Waren die ersten beiden Artikel dieser Serie eher einleitender Natur um einen Überblick über das Projekt zu geben, geht es nun konkret zur Sache. Ich stelle das Raspberry Pi Kamera Modul vor, beschreibe die Installation, die Möglichkeiten der Kamera und zeige, wie Einzelbilder und Videos damit aufgenommen werden können. Dazu verwenden wir Raspistill und Raspivid, zwei Tools, die im Raspbian Betriebssystem bereits enthalten sind. Danach gibt es einen kurzen Einstieg in die Kameraprogrammierung mit Python. Benötigt wird das Raspberry Pi Kamera Modul in der Version 2.1 mit Verbindungskabel und ein Raspberry Pi 3 (oder Vorgänger) mit aktuellem grundkonfigurierten Raspbian Jessie.
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.
Kameravarianten
Das Raspberry Pi Kameramodul ist in verschiedenen Varianten lieferbar. Da gibt es die ältere Version 1.3 mit 5-MPixel Sensor und 2592 x 1944 Pixel maximaler Auflösung und die neue Version 2.1 mit 8-MPixel Sensor und 3280 x 2464 Pixel maximaler Auflösung. Beide Varianten gibt es auch in einer NoIR Ausführung ohne Infrarotfilter, die eher für Nachtaufnahmen geeignet sind. Daneben sind Kameramodule mit aufgesetzten Linsen am Markt, zur Einstellung eines manuellen Fokus oder als Weitwinkelobjektiv. Und um die Verwirrung komplett zu machen, gibt es inzwischen auch Kameramodule, die ein Flachbandkabel passend zum Raspberry Pi Zero mitbringen. Das passt natürlich nicht in den Raspberry Pi 2 oder 3.
Ich selbst verwende das Raspberry Pi Camera Module v2.1, 8-MPixel mit Sony IMX219PQ Exmor R CMOS-Bildsensor und zwar in der Tageslichtausführung mit IR-Filter (also nicht die NoIR-Variante). Mit dabei ist ein 15cm langes Flachbandkabel passend auf Raspberry Pi 2 und 3 und lang genug für meine Zwecke. Dieses Modul sei allen empfohlen, die Tagaufnahmen machen wollen.
Für das Kameramodul ist auch ein eigenes Gehäuse am Markt verfügbar. Das brauchen wir für dieses Projekt aber nicht, da die Kamera zusammen mit den anderen Komponenten innerhalb einer Lock & Lock Frischhaltebox untergebracht wird.
Eigenschaften der Kamera Version 2.1
Wie bereits erwähnt ist die maximale Auflösung bei Einzelbildern 3280 x 2464 Pixel. Bei Videoaufnahmen sind es 1920 × 1080 Pixel bei 30 Bildern pro Sekunde, also Videomode 1080p30, was Full-HD entspricht. Das bedeutet, dass im Videomodus nicht die gesamte Sensorfläche Verwendung findet, sondern die Auflösung auf den Standard 1080p begrenzt wird, Das Bild wird zentriert und die allseitig überstehenden Pixel werden abgeschnitten (crop-mode). Eine Besonderheit gibt es bei geringeren Auflösungen, zum Beispiel dem Videomode 720p. Nachdem der Sensor mehr als die doppelte Auflösung liefern kann, erfolgt ein so genanntes Binning. Das bedeutet, dass von der Kamera bereits jeweils 2×2 Pixel zu einem Bildpunkt zusammengefasst werden. Das kann Vorteile im Rauschverhalten bei schlechtem Licht bringen, auf jeden Fall aber eine geringere Datenmenge, die zum RasPi übertragen werden muss, und damit eine höhere mögliche Framerate. Dieses interne Detail Binning erwähne ich hier eigentlich nur, weil es einen seltsamen Sachverhalt erklärt. Ein Bild oder Video in 1080p zeigt nämlich einen kleineren Bildausschnitt des anvisierten Objekts, als ein Bild in 720p. Wer mit verschiedenen Videoauflösungen experimentiert, wird schnell auf diese Eigenart stoßen, obwohl man es an sich genau umgekehrt erwarten würde. Aber durch das Binning bei 720p werden für jeden Bildpunkt zwei vertikale und zwei horizontale Sensorpunkte verwendet, also 2560 x 1440 Punkte anstelle von 1280 x 720. Und da 2560 x 1440 einer größeren Sensorfläche als das ungebinnte 1920 x 1080 bei Full-HD entspricht, zeigt im Ergebnis die kleinere Auflösung den größeren Bildausschnitt. Klingt seltsam – is‘ aber so.
Montage
Das Flachbandkabel der Kamera wird mit dem CSI-Port (Camera Serial Interface) des Raspberry Pi verbunden. Allerdings passt es mechanisch in zwei Anschlüsse, dem Camera- und dem Display-Interface. Der richtige Anschluss ist am RasPi mit ‚Camera‘ beschriftet und befindet sich direkt neben dem HDMI-Anschluss. Das Einstecken des Kabels ist leider etwas fummelig. Zuerst hebt man mit dem Fingernagel die Arretierung etwas an, dann wird das Flachbandkabel so in den Schlitz gesteckt, dass die blaue Lasche vom HDMI-Port weg zeigt. Und dann drückt man die Arretierung wieder nach unten. Dabei muss darauf geachtet werden, dass das Kabel gerade und bis zum Anschlag in den Anschluss gesteckt und nicht verkantet wird. Sollte später die Kamera nicht erkannt werden, liegt das mit hoher Wahrscheinlichkeit an einem Problem mit diesem Anschluss. Dann am besten den Strom abstellen, das Flachbandkabel komplett vom RasPi lösen und noch einmal neu befestigen.
Kamera aktivieren
Die Kamera ist nun mit dem Raspberry Pi verbunden, dieser hat ein aktuelles Raspbian aufgespielt bekommen, ist grundeingerichtet worden und wir können per SSH darauf zugreifen. Die letztgenannten Schritte erkläre ich in einem eigenen Artikel. Bevor wir nun mit der Kamera arbeiten können, muss sie in raspi-config aktiviert werden. Dazu geben wir ein:
sudo raspi-config
und wählen im Menü Enable Camera.
Einzelbilder aufnehmen mit Raspistill
Dieses Kapitel streife ich nur kurz, da Einzelbilder nicht das Ziel dieses Projekts sind. Aber für eine erste Funktionskontrolle ist es durchaus sinnvoll ein paar Bilder aufzunehmen.
raspistill -o image.jpg
schießt nach 5s Auslöseverzögerung ein Foto in der Maximalauflösung von 3280 x 2464 Pixel. Sollte das Bild auf dem Kopf stehen, weil die Kamera kopfüber am Kabel hängt, lässt sich das softwaremäßig ausgleichen durch:
raspistill -hf -vf -o image.jpg
Das Bild wird durch -hf
horizontal und durch -vf
vertikal umgeklappt. Und natürlich lässt sich auch die Auflösung nach eigenen Wünschen wählen:
raspistill -w 2000 -h 1000 -o image.jpg
Das ergibt ein Bild mit 2000px Breite und 1000px Höhe.
Damit sind die Möglichkeiten natürlich bei weitem nicht erschöpft, es gibt jede Menge weitere Parameter um die Kamera zu steuern. Zum Beispiel um Einfluss auf die Auslöseverzögerung oder die Bildqualität zu nehmen.Ich verweise deshalb hier auf die Originaldokumetation der Raspberry Foundation zum Kameramodul.
Videos aufnehmen mit Raspivid
Ebenso einfach wie das Auslösen eines Einzelbilds, ist die Aufzeichnung einer Videosequenz. Mit folgendem Befehl lösen wir ein 5 Sekunden langes Video in 1080p aus:
raspivid -o test.h264 -t 5000
Die Voreinstellung sind 30 Frames pro Sekunde, aber das lässt sich auch ändern:
raspivid -o test.h264 -t 5000 -fps 25
Und mit -hf
und -vf
lässt sich das Bild drehen, falls die Kamera auf dem Kopf stehen sollte:
raspivid -hf -vf -o test.h264 -t 5000
Alle möglichen Parameter finden sich wieder in der Dokumetation zum Kameramodul.
Auf einen Parameter möchte ich hier aber noch explizit hinweisen, weil er später noch wichtig werden wird. Es handelt sich um -b
für die Bitrate. Dieser Wert ist ein Maß für die Datenmenge, die bei der Aufnahme erzeugt wird und damit auch für die Videoqualität. Angegeben wird die Bitrate in Bit/s und der Standardwert ist 17000000 für 17MBit/s. Möglich sind maximal 25MBit/s, was der höchsten Qualität entspricht, aber auch sehr große Videodateien erzeugt. Der folgende Befehl verringert die Bitrate auf 8,5MBit/s, folglich auch die Qualität, wobei die Datenmenge auf die Hälfte des Standardwerts reduziert wird. Das spart Platz auf der SD-Karte bei kaum sichtbaren Einbußen in der Bildqualität.
raspivid -o test.h264 -t 5000 -b 8500000
Die Videoaufzeichnung erfolgt im H.264 Format, was man auch so belassen sollte, weil das für Raspberry Pi und Kamera eine sehr effektive Art des Videoencodings ist. H.264 bereitet aber oft Probleme beim Abspielen, weil nicht jeder Player damit umgehen kann. Sehr verbreitet ist hingegen das MP4 Format. Aus diesem Grund wollen wir H.264 in MP4 umwandeln. Dazu braucht es ein kleines Zusatztool mit dem Namen MP4Box, das wir zuerst mit dem folgenden Befehl nachinstallieren müssen:
sudo apt-get install gpac
Und nun können wir eine aufgezeichnete Videosequenz wie folgt umwandeln:
MP4Box -fps 30 -add test.h264 -new test.mp4
Der Parameter -new
bewirkt, dass eine bereits vorhandene Zieldatei mit gleichem Namen überschrieben wird. Wenn wir den Parameter weglassen, dann wird neuer Inhalt an eine vorhandene Datei angehängt, was zu unerwünschten Ergebnissen führt. Die Framerate -fps
sollten wir hier auf jeden Fall angeben, denn der Defaultwert ist bei MP4Box 25 und nicht 30 wie bei Raspivid und die beiden müssen natürlich übereinstimmen. Die erzeugte MP4-Datei kann nun mit jedem Videoplayer angeschaut werden.
Videos mit Python aufnehmen
Raspistill und Raspivid bieten bereits sehr viele Möglichkeiten, Fotos und Videos aufzuzeichnen – richtig Musik kommt in die Sache aber wenn wir die Videofunktionalitäten in unsere eigenen Python-Programme einbinden können. Genau das ermöglicht das Python-Modul Picamera. Das muss zuerst installiert werden mit:
$ sudo apt-get install python-picamera python3-picamera
Dieser Befehl installiert Picamera für Python 2.7 und für Python 3. Wer ausschließlich Python 3 verwendet – so wie ich – der kann python.picamera weglassen und installiert nur python3-picamera.
Ein kurzes Codebeispiel, das das gleiche macht wie der Raspivid Befehl im vorhergehenden Kapitel, würde wie folgt aussehen:
import picamera
camera = picamera.PiCamera()
camera.resolution = (1920, 1080)
camera.start_recording('test.h264')
camera.wait_recording(5)
camera.stop_recording()
In der ersten Zeile wird das Picamera-Modul eingebunden. Dann wird ein Picamera-Objekt mit dem Namen camera erzeugt, dem danach die gewünschte Videoauflösung mitgeteilt wird. Mit start_recording beginnt die Aufzeichnung, wait_recording wartet die 5 Sekunden Aufnahmezeit ab und stop_recording beendet schließlich die Aufnahme und speichert die Datei ab. Eigentlich ganz einfach.
Dieses Beispiel habe ich (mit wenigen eigenen Modifikationen) der Originaldokumentation von Picamera entnommen, auf die ich hier ausdrücklich verweisen möchte. Die Doku beinhaltet zahlreiche Beispiele, auf denen sich leicht eigene Entwicklungen aufsetzen lassen.
So weit das Grundrüstzeug für den Umgang mit dem Raspberry Pi Kamera Modul. Wie das Python-Programm für die Oachkatzl Video Cam aussieht und funktioniert, zeige ich in einem eigenen Artikel.
Weitere Artikel in dieser Kategorie:
- Raspberry Video Camera – Teil 1: Oachkatzl-Cam
- Raspberry Video Camera – Teil 2: Komponenten & Konzepte
- 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 14: SW Installation Computer Vision (OpenCV 3.2)
- 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
Hallo! Wie hoch liegen die Frames der Voreinstellungen bitte?
Ich verstehe die Frage nicht. Die Voreinstellung von was?
Die Voreinstellung von der Frames per second
Steht doch im Artikel: 25fps bei Mp4Box und 30fps bei Raspivid.