OpenCV mit Python: Unterschied zwischen den Versionen
Tut (Diskussion | Beiträge) (→Kamera Installation) |
Tut (Diskussion | Beiträge) (→Testen der Kamera unter Python-OpenCV) |
||
Zeile 69: | Zeile 69: | ||
cv.destroyAllWindows() | cv.destroyAllWindows() | ||
</pre> | </pre> | ||
+ | |||
+ | Es sollte das Videobild in Graustufen angezeigt werden, im aktiven Kamerabildfenster "ESC" drücken, um das Program ordentlich zu beenden. | ||
+ | |||
+ | == RAW-Zugriff auf die Raspberry Pi Kamera == | ||
+ | Mit dem folgenden Skript kann ohne V4L2-Treiber auf die Raspberry Pi Kamera zugegriffen werden. Evtl. ermöglicht das auch feinere Einstellungsmöglichkeiten der Kamera wie z.B. Belichtungszeit etc. | ||
+ | <pre> | ||
+ | # OpenCV camera test special for Raspberry Pi | ||
+ | # import the necessary packages | ||
+ | from picamera.array import PiRGBArray | ||
+ | from picamera import PiCamera | ||
+ | import time | ||
+ | import cv2 | ||
+ | import numpy as np | ||
+ | |||
+ | # initialize the camera and grab a reference to the raw camera capture | ||
+ | camera = PiCamera() | ||
+ | camera.resolution = (640, 480) | ||
+ | camera.framerate = 32 | ||
+ | camera.rotation = 0 | ||
+ | rawCapture = PiRGBArray(camera, size=camera.resolution) | ||
+ | |||
+ | # allow the camera to warmup | ||
+ | time.sleep(1) | ||
+ | |||
+ | # capture frames from the camera | ||
+ | for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): | ||
+ | # grab the raw NumPy array representing the image, then initialize the timestamp | ||
+ | # and occupied/unoccupied text | ||
+ | image = frame.array | ||
+ | |||
+ | # show the frame | ||
+ | gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) | ||
+ | cv2.imshow("Hit ESC to end", gray.astype(np.uint8)) | ||
+ | |||
+ | # clear the stream in preparation for the next frame | ||
+ | rawCapture.truncate(0) | ||
+ | |||
+ | # if the `q` or ESC key was pressed, break from the loop | ||
+ | key = cv2.waitKey(1) & 0xFF | ||
+ | if key == ord("q") or key == 27: | ||
+ | break | ||
+ | |||
+ | cv2.destroyAllWindows() | ||
+ | camera.close() | ||
+ | </pre> | ||
Es sollte das Videobild in Graustufen angezeigt werden, im aktiven Kamerabildfenster "ESC" drücken, um das Program ordentlich zu beenden. | Es sollte das Videobild in Graustufen angezeigt werden, im aktiven Kamerabildfenster "ESC" drücken, um das Program ordentlich zu beenden. |
Version vom 24. März 2019, 18:35 Uhr
Inhaltsverzeichnis
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.
- Installation am besten via pip:
Kamera Installation
- Aktiviere die Kamera:
sudo raspi-config
, dann unter "5 Interfacing Option" die Kamera aktivieren. Tool beenden über "Finish", Raspberry neu startensudo 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.
- Edititere die Datei /etc/modules als root via
- Jetzt kann alles zusammen getestet werden, in dem das Skript im Abschnitt OpenCV_mit_Python#Testen_der_Kamera_unter_Python-OpenCV auf der Konsole oder z.B. in Thonny gestartet wird. Es sollte ein Fenster mit dem Kamerabild in Graustufen anzeigen.
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.
RAW-Zugriff auf die Raspberry Pi Kamera
Mit dem folgenden Skript kann ohne V4L2-Treiber auf die Raspberry Pi Kamera zugegriffen werden. Evtl. ermöglicht das auch feinere Einstellungsmöglichkeiten der Kamera wie z.B. Belichtungszeit etc.
# OpenCV camera test special for Raspberry Pi # import the necessary packages from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 import numpy as np # initialize the camera and grab a reference to the raw camera capture camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 32 camera.rotation = 0 rawCapture = PiRGBArray(camera, size=camera.resolution) # allow the camera to warmup time.sleep(1) # capture frames from the camera for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): # grab the raw NumPy array representing the image, then initialize the timestamp # and occupied/unoccupied text image = frame.array # show the frame gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.imshow("Hit ESC to end", gray.astype(np.uint8)) # clear the stream in preparation for the next frame rawCapture.truncate(0) # if the `q` or ESC key was pressed, break from the loop key = cv2.waitKey(1) & 0xFF if key == ord("q") or key == 27: break cv2.destroyAllWindows() camera.close()
Es sollte das Videobild in Graustufen angezeigt werden, im aktiven Kamerabildfenster "ESC" drücken, um das Program ordentlich zu beenden.