Mittels zweier Kommandozeilenprogramme können Sie jetzt die Möglichkeiten der Kamera ausloten. Dabei kümmert sich raspistill um Fotos. Das Kommando aus der ersten Zeile von Listing 2 sorgt beispielsweise dafür, dass die Raspi-Kamera fünf Sekunden lang ein Preview-Fenster anzeigt, damit Sie das gewünschte Bildmotiv anpeilen können. Anschließend löst das Programm dann die Aufnahme aus und speichert sie mit einer Auflösung von 640 x 480 Pixeln in der Datei bild.jpg.
Listing 2
$ raspistill -w 640 -h 480 -o bild.jpg $ raspistill --nopreview --timeout 1 --quality 50 -o bild.jpg $ raspivid -t 8000 -o video.h264
Raspistill beherrscht zwar neben JPG auch PNG und BMP und nutzt diese Standards automatisch, wenn Sie diese als Dateisuffix angeben. Allerdings lässt sich die Kamera beim Speichern von PNGs vergleichsweise viel Zeit, da die Raspi-GPU nur JPEG-Bilder hardwarebeschleunigt komprimiert, und BMPs verbrauchen ohne sichtbaren Qualitätsgewinn überproportional viel Speicherplatz.
Der Befehl in der zweiten Zeile von Listing 1 weist Raspistill an, kein Vorschaufenster anzuzeigen (--nopreview) und vor der Aufnahme nur eine Sekunde zu pausieren (--timeout 1). Ferner soll die Bildkompression nicht die maximale Bildqualität (100) anstreben, sondern sich zum Zweck des Platzsparens mit Mittelmaß zufriedengeben (--quality 50). Da eine Vorgabe für die Auflösung fehlt, nutzt die Kamera hier den vordefinierten Standard von 2592 x 1944 Pixeln.
Videos statt Bilder nimmt raspivid auf – jedoch mangels eines im RasPi fest verbauten Mikrofons ohne Ton. Der Aufruf in Zeile 3 von Listing 1 weist die Kamera an, acht Sekunden lang ein Video aufzuzeichnen und als video.h264 abzuspeichern. Ohne Angabe für die gewünschte Auflösung nutzt das Tool standardmäßig Full-HD. Die Videodatei wandeln Sie bei Bedarf im Anschluss beispielsweise mit Ffmpeg von H.264 in ein gebräuchlicheres Videoformat um.
Sowohl Raspistill als auch Raspivid verfügen noch über einige Optionen mehr, etwa um die EXIF-Header einer Bilddatei mit Werten zu befüllen. Möchten Sie die beiden Befehle in Shell-Skripten einsetzen, sollten Sie deswegen die Dokumentation [4] studieren.
Beim dort unter anderem beschriebenen Parameter -roi gilt es, zu beachten, dass dieser lediglich für einen digitalen Zoom sorgt. Ein echter optischer Zoom wäre technisch gar nicht möglich, da das Pi-Kameramodul bauartbedingt nur mit einer Festbrennweite arbeitet.
Programmierung
Für erste, kleinere Experimente verrichten die beiden Kommandozeilentools zuverlässig ihren Dienst. Geht es aber daran, größere Projekte zu realisieren, verursacht es meist weniger Aufwand, die Pi-Kamera mittels einer Programmiersprache anzusprechen. Besonders einfach gelingt dies mit dem Python-Modul Picamera [5], das alle Optionen der Kamera vollständig implementiert.
Bei dem Python-Skript aus Listing 3 handelt es sich um das exakte funktionale Pendant des Kommandozeilenaufrufs aus der ersten Zeile von Listing 1. In den ersten beiden Zeilen importiert das Skript die benötigten Module. Zeile 4 erzeugt ein Objekt kamera der Klasse picamera.PiCamera.
Der try-Block ab Zeile 5 sorgt dafür, dass das Skript Ausnahmefehler abfangen kann – etwa, wenn kein Kamera-Modul an den RasPi angeschlossen ist. Im Fehlerfall kommt dann direkt die Objektmethode close() zur Anwendung.
Nach dem Setzen der Auflösung, die von den Standardvorgaben abweicht (Zeile 6) zeigt das Skript fünf Sekunden lang eine Vorschau (Zeilen 7 bis 9), um schließlich auszulösen und das Bild als bild.jpg abzuspeichern (Zeile 10).
Listing 3
import time
import picamera
kamera = picamera.PiCamera()
try:
kamera.resolution = (640, 480)
kamera.start_preview()
time.sleep(5)
kamera.stop_preview()
kamera.capture('bild.jpg')
finally:
kamera.close()
Videos zeichnen Sie nach einem ähnlichen Schema auf. Hierzu simuliert Listing 4 den Kommandozeilenaufruf aus der dritten Zeile von Listing 1. Auch hier müssen Sie ein Vorschaufenster gegebenenfalls explizit anfordern und wieder schließen (Zeilen 4 und 8). Die Methoden start_recording('Datei') und stop_recording() (Zeilen 5 und 7) steuern die Aufnahme.
Die Aufnahmedauer stellen Sie über die Methode wait_recording() ein (Zeile 6). Diese prüft während der Aufnahme unter anderem kontinuierlich, ob der Speicherplatz auf der SD-Karte für die Aufzeichnung noch ausreicht, und bricht die Aufnahme gegebenenfalls ab. Ferner müssen Sie, anders als bei der Aufzeichnung von Einzelbildern, mittels with direkt auf die Klasse picamera.PiCamera zugreifen.
Listing 4
import picamera
with picamera.PiCamera() as kamera:
kamera.start_preview()
kamera.start_recording('video.h264')
kamera.wait_recording(8)
kamera.stop_recording()
kamera.stop_preview()





