Zuletzt geändert am 24. März 2019 um 18:27

OpenCV mit Python

Installation

Raspberry Pi

OpenCV Installation

  • Installiere eine aktuelle Version mit Allem von Raspbian auf die SD-Karte, richte alles ein, update das System via:

sudo apt update && sudo apt upgrade -y

  • Installiere alles Mögliche nach was OpenCV so braucht (alles muss in eine Zeile):
sudo apt install libatlas3-base libsz2 libharfbuzz0b libtiff5 libjasper1 libilmbase12 libopenexr22 libilmbase12 libgstreamer1.0-0 libavcodec57 libavformat57 libavutil55 libswscale4 libqtgui4 libqt4-test libqtcore4 libwebp6
  • Installiere dann OpenCV (und falls es fehlt numpy) via pip3, hier als root, in der fettesten Geschmacksrichtung:

sudo pip3 install opencv-contrib-python numpy

  • Teste ob numpy und opencv richtig installiert sind. Öffne dazu python3 auf der Konsole und probiere aus, ob die beiden folgenden Befehle kein Fehler ausgeben:
    • import numpy
    • import cv2
    • quit()
  • Tipp: Als IDE unter Raspbian für Python3 ist Thonny ein Versuch wert:
    • Installation am besten via pip: sudo pip3 install thonny
    • Nach dem starten von Thonny unter "Tools->Options...->General" den UI mode auf "expert" stellen, bei der Gelegenheit kann auch gleich ein dunkles Theme eingestellt werden, dann sieht es auch gut aus.
    • Das Ding kann Variablen anschauen, Breakpoints setzen, Variabelninhalte anzeigen und Pakete installieren und zeigt Vorschläge zum sauberen Programmieren - also ein Ersatz für das PyCharm, was unter Raspberry nicht läuft.

Kamera Installation

  • Aktiviere die Kamera: sudo raspi-config, dann unter "5 Interfacing Option" die Kamera aktivieren. Tool beenden über "Finish", Raspberry neu starten sudo reboot
  • Teste die Kamera via raspivid -t 5000 : Der Videostream sollte für 5s zu sehen sein.
  • Damit auch Standard-Beispiele laufen, sollte die Raspberry-Kamera noch als V4L2-Device eingebunden werden. Dazu folgendes tun:
    • Edititere die Datei /etc/modules als root via sudo nano /etc/modules
    • Füge am Ende der Datei eine Zeile mit dem Inhalt bcm2835-v4l2 ein, Datei dann mit STRG+o speichern, den Editor mit STRG+x verlassen, das System neu starten
    • Danach sollte das Kommando ls /dev/video0 eine Device-Datei finden und keinen Fehler ausgeben. Wenn nicht, hilft es evtl. im obigen Schritt noch vor die bcm2835-v4l2-Zeile eine Zeile mit folgendem Inhalt einzufügen: v4l2_common (auch hier nach neu booten). Bei mir war das allerdings nicht nötig.
  • Jetzt kann das

Windows

  • Installiere Python3 von Python.org: Wichtig:
    • Per Rechtsklick als Admin installieren
    • Bei Installation auch pip installieren lassen und Pfade setzen lassen
  • Installiere PyCharm Community Edition von Jetbrains
    • Darin habe ich dann ein neues Projekt angelegt, dabei "Virtualenv" als Environment gewählt
    • Über "File->Settings..." das Settings-Fenster öffnen,
      • darin dann Links das eigene "Projekt: xxx" ausklappen, dort drunter auf "Project Interpreter" gehen
      • Hier sollte jetzt eine Python3-Version ausgewählt sein und unter den Packages mind. "pip" vorhanden sein
      • Über das kleine "+"-Symbol recht weit rechts können nun weitere Packages für das Projekt installiert werden, es öffnet sich ein Fenster "Available Packages"
        • Darin in der Suche "opencv" eingeben und das Paket "opencv-contrib-python" installieren - unten wird dann irgendwo angezeigt ob es geklappt hat
        • Darin dann auch noch nach "numpy" suchen und das Paket "numpy" installieren
        • Dann das Packet-Manager-Fenster schliessen
      • Auch das Settings-Fenster mit "OK" schliessen
    • Vermutlich muss man jetzt trotzdem noch etwas warten, weil PyCharm im Hintergrund immernoch installiert. Erst wenn PyCharm fertig ist, kann man das test_video.py starten.

Testen der Kamera unter Python-OpenCV

Das folgende Skript sollte unter allen Betriebsystemen laufen, unter Linux/Raspbian wird ein V4L2 Device benötigt, unter Windows ging es direkt. Das folgende Skript auf der jeweiligen Maschine ausprobieren - via Terminal, Thonny, PyCharm oder was auch immer:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    # Our operations on the frame come here
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv.imshow('Hit ESC to close', gray)
    if cv.waitKey(1) & 0xFF == 27:
        break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()

Es sollte das Videobild in Graustufen angezeigt werden, im aktiven Kamerabildfenster "ESC" drücken, um das Program ordentlich zu beenden.