Raspberry Video Camera – Teil 14: SW Installation Computer Vision (OpenCV 3.2)

Eine automatische Videokamera per Bewegungssensor zu triggern ist nur eine von vielen Möglichkeiten. Man kann auch die Bilder der Kamera auswerten und versuchen darin Bewegungen oder Objekte zu erkennen. Eine extra Hardware, wie ein Bewegungssensor, ist dann nicht mehr nötig, allerdings schlaue Software, die bei der Bildauswertung behilflich ist. Computer Vision heißt das Zauberwort, das man mit maschinellem Sehen übersetzen könnte. Und das gibt es auch für den Raspberry Pi und für Python. OpenCV 3.2 wird in diesem Artikel installiert – quasi als Vorarbeit, damit wir dann in den nächsten Artikel Objekterkennung in Python betreiben können. Dann wird die Kamera durch die Farben der Eichhörnchen getriggert.


Zuerst aber wieder ein Oachkatzl-Video. Mehr davon gibts in meinem YouTube-Kanal.

OpenCV 3.2 für den Raspberry Pi

OpenCV ist eine freie Programmbibliothek mit Algorithmen für die Bildverarbeitung und maschinelles Sehen.“ So heißt  es bei Wikipedia. Und OpenCV ist äußerst mächtig, da gibt es neben Gesichts- und Gesten-Erkennung auch Module für maschinelles Lernen und neuronale Netze. Alles Dinge, die wir für dieses Projekt nicht brauchen werden, deshalb ist die Verwendung von OpenCV ein wenig mit Kanonen auf Spatzen geschossen. Aber OpenCV beinhaltet Funktionen, die es uns in Python sehr einfach machen, ganze Bilder mit nur einer Befehlszeile auszuwerten, ohne die Notwendigkeit, alle Pixel einzeln abfragen zu müssen. Das macht OpenCV für die Raspberry Video Camera interessant und es bietet eine Plattform für weitere individuelle Experimente.

Leider ist die Installation von OpenCV arbeits- und zeitaufwendig, denn OpenCV muss am Raspberry Pi aus dem Quellcode kompiliert werden. Ein paar Stunden sollten wir dafür schon einplanen, aber ich erkläre Schritt für Schritt, wie es funktioniert.

Voraussetzungen

Ich gehe in dieser Anleitung von folgenden Annahmen aus:

  • Wir haben einen Raspberry Pi 3 im Einsatz ( Ein RasPi 2 dürfte es auch tun).
  • Entsprechend meinem Artikel ist Raspbian Jessie Lite in der Version vom März 2017 installiert und die weiteren Grundeinrichtungen sind, so wie im Artikel beschrieben, vorgenommen.
  • Es gibt einen funktionierenden Zugang per SSH.
  • Wir installieren OpenCV 3.2.0.
  • Es wird nur für Python 3 installiert, nicht mehr für Python 2.7.
  • Mindestens noch 2GB freier Speicherplatz stehen auf der SD-Karte zur Verfügung.

Altes OpenCV2 deinstallieren

Raspbian bringt eine alte Version 2.4.9 von OpenCV mit, die gnadenlos überholt ist und nicht mit Python 3 zusammenarbeitet. Die deinstallieren wir zuerst.

sudo apt-get remove libopencv*
sudo apt-get autoremove

Aktualisieren des Systems

Das kennen wir schon:

sudo apt-get update
sudo apt-get upgrade
sudo reboot

Entwicklungstools installieren

sudo apt-get install build-essential cmake cmake-curses-gui pkg-config

Benötigte Libraries installieren

sudo apt-get install \
libjpeg-dev \
libtiff5-dev \
libjasper-dev \
libpng12-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libeigen3-dev \
libxvidcore-dev \
libx264-dev \
libgtk2.0-dev

Weitere Libraries zur Optimierung

sudo apt-get install libatlas-base-dev gfortran

Python 3 Headerfiles und Numpy installieren

sudo apt-get install python3-dev python3-numpy

Download und Entpacken des OpenCV Sourcecodes

wget https://github.com/opencv/opencv/archive/3.2.0.zip -O opencv-3.2.0.zip
wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip -O opencv_contrib-3.2.0.zip
unzip opencv-3.2.0.zip
unzip opencv_contrib-3.2.0.zip

Arbeitsverzeichnis für den Buildprozess anlegen

cd ~/opencv-3.2.0/
mkdir build
cd build

Build konfigurieren

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
-D BUILD_EXAMPLES=OFF \
-D ENABLE_NEON=ON ..

Dabei auf folgende Fertigmeldung warten:

...
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/opencv-3.2.0/build

Jetzt ein kleines Stück nach oben blättern. dort gibt es u. a. einen Eintrag zu Python 3. Der sollte in etwa wie folgt aussehen:

--   Python 3:
--     Interpreter:         /usr/bin/python3.4 (ver 3.4.2)
--     Libraries:           /usr/lib/arm-linux-gnueabihf/libpython3.4m.so (ver 3.4.2)
--     numpy:               /usr/lib/python3/dist-packages/numpy/core/include (ver 1.8.2)
--     packages path:       lib/python3.4/dist-packages

Kompilierung starten

make -j4

und warten, dass mit 100% ohne Fehler abgeschlossen wird – in etwa so:

[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-34m.so
[100%] Built target opencv_python3

Der Make-Vorgang wird länger als eine Stunde dauern. Der Parameter -j4 bedeutet, dass der Compiler 4 Prozessorkerne benutzen kann. Das kann aber auch zu Problemen führen, wie es mir mit einer OpenCV 3.1 Version passiert ist. In so einem Fall sollte man die Kompilierung noch einmal als Singleprozess (ohne -j4) versuchen, was Multiprozessor-Probleme vermeidet, aber auch wesentlich länger dauert.

make clean
make

Installation

Zur eigentlichen Installation braucht es jetzt Root-Rechte (sudo) und dann haben wir es schon geschafft.

sudo make install
sudo ldconfig

Test

Um zu überprüfen, ob wir nun OpenCV in Python verwenden können, starten wir Python 3 im interaktiven Modus, importieren das OpenCV Modul (ja, das heißt cv2, obwohl es OpenCV 3 ist) und rufen die Versionsinfo ab. (Eingaben sind hervorgehoben)

$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0'
>>>

Python wird dann mit Strg-D beendet. Die ausgegebene Version muss der eben installierten entsprechen, in diesem Fall 3.2.0. Andernfalls, oder bei einer Fehlermeldung, war die Installation nicht erfolgreich.

Bei Problemen helfen vielleicht auch diese beiden englischsprachigen Artikel weiter, die etwas ausführlicher geschrieben sind als meine kurze Anleitung:

Pyimagesearch.com ist generell eine gute Quelle, wenn es um Computer Vision geht.

Damit haben wir nun das nötige Rüstzeug installiert, um im nächsten Schritt eine Bildauswertung für den Kameratrigger programmieren zu können.

 


Weitere Artikel in dieser Kategorie:

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.