Raspberry Video Camera – Teil 3: Raspberry Pi Kamera Modul V2.1

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.

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:

2 Kommentare

  1. Theresa

    Hallo! Wie hoch liegen die Frames der Voreinstellungen bitte?

  2. Helmut (Beitrag Autor)

    Ich verstehe die Frage nicht. Die Voreinstellung von was?

Schreiben Sie einen Kommentar

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