Schlagwort-Archive: Computer Vision

Raspberry Pi mit openCV beobachtet Callibot

openCV mit dem Raspberry Pi – ein Einstieg

Sei die erste, die diesen Beitrag teilt.

Computer Vision ist der Einstieg in KI. Mit dem Raspberry Pi lassen sich handliche Geräte bauen, die mit entsprechenden Bibliotheken erstaunliche Dinge tun können. Z.B. Bienen oder LKW zählen. Als Basis lohnt der Blick auf openCV. Mittlerweile ist die Installation recht einfach.

Die Grundinstallation

Als Basis dient ein Raspberry Pi 3 B mit dem Betriebssystem Raspbian Stretch inkl Desktop, aber ohne Softwareschnickschnack. Dann passt alles so gerade auf eine 8 GB SD-Karte. Eine schnelle Karte sei empfohlen. Ebenso ist eine Raspberry Pi Kamera sinnvoll.

Die Installation erfolgt in vier Schritten:

  1. Raspbian aufsetzen
  2. Verbindung zum Raspberry Pi Desktop mit VNC aufbauen
  3. openCV für Python installieren
  4. Mit einem kleinen Python-Script die Installation testen.

Für den späteren Betrieb ist es sicher sinnvoll, auf den Desktop zu verzichten und den Raspberry headless einzurichten (Das empfehle ich meinen Studenten grundsätzlich). Bei der Entwicklung und den ersten Tests ist  für Video allerdings ein Fernzugriff auf eine grafische Benutzungsoberfläche hilfreich. Daher wird hier auf VNC gesetzt.

Raspbian aufsetzen

Zunächst laden Sie das das 3,4 GB große Image (Raspbian Stretch with desktop) und entpacken es:

https://www.raspberrypi.org/downloads/raspbian/

Auf einem Windows Rechner laden Sie WinDiskImager und brennen die SD-Karte. Auf einem Mac gelingt dies am Besten in der Konsole.:


df -h
sudo unmount disk2s1
sudo dd of=/dev/rdisk2 if=Downloads/raspbian.img bs=1m

Der Brennprozess dauert etliche Minuten.

Auf der SD-Karte finden der Rechner eine Partition „boot“. In dieser partition erzeugen Sie eine leere Datei ssh mit

nano ssh

und eine Datei


nano wpa_supplicant.conf

mit folgendem Inhalt:

# Datei wpa_supplicant.conf in der Boot-Partition (Raspbian Stretch)
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="wlan-bezeichnung"
       psk="passwort"
       key_mgmt=WPA-PSK
}

Eine detaillierte Beschreibung finden Sie unter

https://pi-buch.info/wlan-schon-vor-der-installation-konfigurieren

Danach bindet sich der Raspberry in Ihr WLAN ein und ist über SSH erreichbar.

Die IP Adresse des Raspberrys finden Sie mit einem Tool wie Fritz Box WLAN auf dem Smartphone oder in der Konsole des Mac mit

sudo arp-scan -l

Sie können sich nun mit SSH direkt auf den Raspberry schalten mit Ihrer IP-Adresse

ssh pi@192.168.1.103

Die erste Aktion auf dem Raspberry sollte dann die Aktualisierung sein mit

sudo apt-get update
sudo apt-get upgrade

Remote Desktop einrichten

Sie benötigen zwei Komponenten: einen Serverprozess auf dem Raspberry und einen VNC-Client auf Ihrem Rechner.

Auf dem Raspberry ist unter Stretch schon der RealVNC Server installiert. Er muss nur mit

sudo raspi-config

eingeschaltet werden.

Als VNC-Client auf dem Mac funktionierte bei mir problemfrei RealVNC, alle anderen Lösungsvorschläge im Internet hakelten.

https://www.realvnc.com/de/connect/download/viewer/macos/

Eine detailliertere Beschreibung gibt es unter

https://www.elektronik-kompendium.de/sites/raspberry-pi/2111301.htm

Es empfiehlt sich, parallel ein Terminal mit SSH-Verbindung und eine Remote Desktop Sitzung gleichzeitig offen zu halten. So können im Terminal Scripte erstellt und gleich im Desktop getestet werden.

openCV installieren

Bislang war die Installation von openCV ein Abenteuer für Fortgeschrittene, mit etlichen vorbereitenden Schritten musste openCV aus den Quellen selber kompiliert werden. Eine (nicht einfache) Anleitung, wie das geht finden Sie hier:

https://blog.helmutkarger.de/raspberry-video-camera-teil-14-sw-installation-computer-vision-opencv-3-2/

Zumindest für Python 3 gibt es inzwischen eine einfache Alternative, die direke Installation mit PIP.

Die Anleitungen im Internet führten bei mir nicht direkt zum Erfolg, es war folgende Befehlskette erforderlich:

pip install --upgrade pip
sudo apt install libatlas3-base libwebp6 libtiff5 libjasper1 libilmbase12 libopenexr22 libilmbase12 libgstreamer1.0-0 libavcodec57 libavformat57 libavutil55 libswscale4 libqtgui4 libqt4-test libqtcore4
sudo pip3 install opencv-python

Danach sollte ein interaktiver Test das Ergebnis zeigen, z.B.:

pi@raspberrypi~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.4'>
>>> 

Eine Anleitung die als „Pate“ diente, ist

https://pypi.org/project/opencv-python/ , ergänzt durch

https://blog.piwheels.org/new-opencv-builds/

Erster Test

Der folgende Python Code ist auf vielen Webseiten zu finden und eignet sich als Einstieg:

# import the necessary packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
 
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (320, 240)
camera.framerate = 25
rawCapture = PiRGBArray(camera, size=(320, 240))
 
# allow the camera to warmup
time.sleep(1.0)
 
# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_p$
        # grab the raw NumPy array representing the image, then initialize t$
        # and occupied/unoccupied text
        image = frame.array
 
        # show the frame
        cv2.imshow("Frame", image)
        key = cv2.waitKey(1) & 0xFF
 
        # clear the stream in preparation for the next frame
        rawCapture.truncate(0)
 
        # if the `q` key was pressed, break from the loop
        if key == ord("q"):
                break

Mit

nano bild.py

kann das Programm angelegt werden.

Ein Start erfolgt dann im Desktop über VNC-Client, so dass direkt der Videostrom kontrolliert werden kann.

Der Screenshot in Abb.1 zeigt den VNC-Client mit einem Bild 320×240 Pixel und dem geöffneten Terminal, daneben die Mac-Konsole mit SSH und dem in nano geöffneten Quelltext.

Abb. 1: Screenshot erster Test