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.

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:

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:

12 Kommentare

  1. Detlef Brauckhoff

    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

    Antworten
    1. Helmut (Beitrag Autor)

      Vielen Dank für das freundliche Feedback.

      Antworten
  2. frank egersdorfer

    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

    Antworten
  3. frank egersdorfer

    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

    Antworten
    1. Helmut (Beitrag Autor)

      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

      Antworten
  4. Claus Appelt

    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

    Antworten
  5. Jöerg

    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

    Antworten
    1. Helmut (Beitrag Autor)

      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

      Antworten
  6. Pretzi

    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

    Antworten
    1. Helmut (Beitrag Autor)

      Da steht aber auch was von Python 3. Hast Du denn in Python 3 probiert cv2 zu importieren?

      Antworten
  7. Pretzi

    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

    Antworten
    1. Helmut (Beitrag Autor)

      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/

      Antworten

Schreiben Sie einen Kommentar

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