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.
Zur Wahrung deiner Privatsphäre wird erst eine Verbindung zu YouTube hergestelt, wenn du den Abspielbutton betätigst.
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:
- http://pklab.net/?&id=392&lang=EN&t=Install-OpenCV-3.2-Python/C++-on-Raspberry-PI
- http://www.pyimagesearch.com/2016/04/18/install-guide-raspberry-pi-3-raspbian-jessie-opencv-3/
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:
- Raspberry Video Camera – Teil 1: Oachkatzl-Cam
- Raspberry Video Camera – Teil 2: Komponenten & Konzepte
- Raspberry Video Camera – Teil 3: Raspberry Pi Kamera Modul V2.1
- Raspberry Video Camera – Teil 4: Aufnahmeauslöser
- Raspberry Video Camera – Teil 5: Passiver Infrarot Bewegungssensor
- Raspberry Video Camera – Teil 6: Stromversorgung
- Raspberry Video Camera – Teil 7: Spannungsregler 5V
- Raspberry Video Camera – Teil 8: Montage Modell 850
- Raspberry Video Camera – Teil 9: Montage Kamera Modul
- Raspberry Video Camera – Teil 10: SW Installation Betriebssystem und Module
- Raspberry Video Camera – Teil 11: SW Python für die Kamera
- Raspberry Video Camera – Teil 12: SW Trigger per Bewegungssensor
- Raspberry Video Camera – Teil 13: SW Autostart und Überwachung
- Raspberry Video Camera – Teil 15: SW Einzelbilder exportieren für die Farberkennung
- Raspberry Video Camera – Teil 16: SW Trigger per Farberkennung
- Raspberry Video Camera – Teil 17: Exkurs – Wie Computer Farben sehen
- Raspberry Video Camera – Teil 18: SW Farbkalibrierung
- Raspberry Video Camera – Teil 19: SW Kombinationstrigger
- Raspberry Video Camera – Teil 20: Exkurs – Farbdarstellung per 2D-Histogramm
- Raspberry Video Camera – Teil 21: Konzept einer selbstlernenden Farberkennung
- Raspberry Video Camera – Teil 22: SW selbstlernende Farberkennung in Python
- Raspberry Video Camera – Teil 23: Verbesserung durch ROI und Aufnahmezeitbegrenzung
- Raspberry Video Camera – Teil 24: Anpassung von Programmparametern
- Raspberry Video Camera – Teil 25: Zweite Kamera
- Raspberry Video Camera – Teil 26: Optimierungen gegen Frame Drops
- Raspberry Video Camera – Teil 27: Was kostet der Spaß?
- Raspberry Video Camera – Teil 28: Kamera Modell 200 mit Raspberry Pi Zero
- Raspberry Video Camera – Teil 29: Stromversorgung für Kamera Modell 200
- Raspberry Video Camera – Teil 30: Software für Kamera Modell 200
Diese Anleitung ist einfach super, leicht verständlich und gut nachvollziehbar.
Bei mir ist die Installation von OpenCV leider auch beim zweiten Versuch mit make -j4 bei ca. 18% abgebrochen. Aber ohne -j4 hat es dann geklappt (3 Std 20 Min).
Bis hierhin funktioniert bei mir alles wie beschrieben.
Besten Dank
Detlef
Vielen Dank für das freundliche Feedback.
Hallo Helmut,
bis hierhin hat alles gut geklappt.
leider bekomme ich diese Fehlermeldung beim Linken.
Hast Du eine Idee?
[ 99%] Building CXX object modules/optflow/CMakeFiles/opencv_test_optflow.dir/te st/test_OF_accuracy.cpp.o
[ 99%] Building CXX object modules/optflow/CMakeFiles/opencv_perf_optflow.dir/pe rf/perf_deepflow.cpp.o
modules/python3/CMakeFiles/opencv_python3.dir/build.make:312: recipe for target ‚modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o‘ failed
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] E rror 1
CMakeFiles/Makefile2:13384: recipe for target ‚modules/python3/CMakeFiles/opencv _python3.dir/all‘ failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
make[1]: *** Warte auf noch nicht beendete Prozesse…
[ 99%] Building CXX object modules/optflow/CMakeFiles/opencv_perf_optflow.dir/pe rf/perf_main.cpp.o
[ 99%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.di r/perf/perf_main.cpp.o
[ 99%] Building CXX object modules/optflow/CMakeFiles/opencv_test_optflow.dir/te st/test_OF_reproducibility.cpp.o
Linking CXX executable ../../bin/opencv_perf_optflow
[ 99%] Built target opencv_perf_optflow
[100%] Building CXX object modules/optflow/CMakeFiles/opencv_test_optflow.dir/te st/test_motiontemplates.cpp.o
[100%] Building CXX object modules/optflow/CMakeFiles/opencv_test_optflow.dir/te st/test_main.cpp.o
[100%] Building CXX object modules/optflow/CMakeFiles/opencv_test_optflow.dir/te st/ocl/test_motempl.cpp.o
Linking CXX executable ../../bin/opencv_perf_stitching
[100%] Built target opencv_perf_stitching
Linking CXX executable ../../bin/opencv_test_optflow
[100%] Built target opencv_test_optflow
Makefile:146: recipe for target ‚all‘ failed
make: *** [all] Error 2
pi@pifacetest:~/opencv-3.2.0/build$
Danke
Frank
Hallo Helmut,
ich habe python 3.2.4 kann das das Problem sein?
habe make nochmal laufen lassen:
[ 97%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
/home/pi/opencv-3.2.0/modules/python/src2/cv2.cpp:530:1: error: too many initializers for ‘PyTypeObject {aka _typeobject}’
modules/python3/CMakeFiles/opencv_python3.dir/build.make:312: recipe for target ‚modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o‘ failed
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:13384: recipe for target ‚modules/python3/CMakeFiles/opencv_python3.dir/all‘ failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
Makefile:146: recipe for target ‚all‘ failed
make: *** [all] Error 2
Danke
Frank
Hallo Frank,
das glaube ich nicht. Für mich sieht das eher so aus, als würden irgendwelche Python-3-Libraies fehlen.
Die Version 3.2 ist inzwischen auch schon wieder veraltet, Du könntest es mal mit 3.4 versuchen.
Goog luck
Helmut
Habe die Sache auf einem B+ durchgezogen mit raspbian stretch und cv3.4.1. Musste ein – zwei Abhängigkeiten von Hand auflösen aber hat funktioniert. Ansonsten perfekte Anleitung DANKE!
VG Konubixe
Hallo Helmut,
ich bekommen folgende Fehlermeldung:
Paket cmake ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
E: Für Paket »cmake« existiert kein Installationskandidat.
E: Paket cmake-curses-gui kann nicht gefunden werden.
Kannst du mir da weiterhelfen.
Danke
Jörg
Scheinbar wurde cmake nicht installiert. Was für ein Raspbian verwendest Du denn? Hast Du vor der cmake Installation sudo apt update durchgeführt? Vielleicht hilft auch dieser Artikel: http://blog.wenzlaff.de/?p=12732
Hallo Helmut,
ich habe alles genau so gemacht auf einem Raspi3B mit Stretch, bekomme aber das opencv immer auf Pyzhon 2.7 installiert.
Habs 2 mal probiert (dauert ewig) aber immer auf Python 2.7
nach dem cmake
Python 2:
— Interpreter: /usr/bin/python2.7 (ver 2.7.13)
— Libraries: /usr/lib/arm-linux-gnueabihf/libpython2.7.so (ver 2.7.13)
— numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.1)
— packages path: lib/python2.7/dist-packages
—
— Python 3:
— Interpreter: /usr/bin/python3 (ver 3.5.3)
—
— Python (for build): /usr/bin/python2.7
—
Da steht aber auch was von Python 3. Hast Du denn in Python 3 probiert cv2 zu importieren?
Hallo Helmut,
Ich habe das nachvollzogen, und funktioniert alles, aber egal was ich tue das opencv wird immer für Python 2.7 installiert.
Was ist da falsch ?
danke
Pretzi
Ich denke, dass man sich heute die Arbeit gar nicht mehr machen braucht Open-CV selber zu compilieren. Probier doch mal, ob Du Open-CV nicht direkt über Linux als Paket installieren kannst mit
sudo apt install python3-opencv
.Oder über PIP so wie hier beschrieben: https://www.pyimagesearch.com/2018/09/19/pip-install-opencv/