Das Bullseye-Kamerasystem

17.November 2021, David Ploughman
Übersetzung von W. Edenhofer,
im Original https://www.raspberrypi.com/news/bullseye-camera-system/

Als wir letzte Woche unser erstes Raspberry Pi OS-Image basierend auf Debian Bullseye veröffentlichten, haben wir auf eine Änderung hingewiesen, die für Leute, die Code geschrieben haben, um Kameras mit Raspberry Pi zu verwenden, enorm wichtig ist: Der Treiber, den Raspberry Pi verwendet, um auf Kameramodule zuzugreifen, wurde durch libcamera ersetzt.

Diese sehr bedeutenden Änderungen bedeuten weniger Closed-Source-Code und erleichtern es Benutzern außerhalb von Raspberry Pi, neue Kamerahard- und -software zu entwickeln. Sie bedeuten aber auch, dass neue Raspberry Pi OS-Releases die bekannten Raspicam-Apps und die Picamera-Python-Bibliothek nicht mehr unterstützen.

An die Stelle dieses älteren Kamerasystems tritt der neue und fast vollständig quelloffene Kamerastack basierend auf Standard-Linux-Frameworks wie V4L2 (Video for Linux) und libcamera. Auch unsere Kernel-Treiber bewegen sich seit einiger Zeit in diese Richtung und haben erst kürzlich weitere große Schritte in Richtung der bevorzugten neuen Media-Controller-Architektur gemacht.

Der Hauptunterschied, den Benutzer bemerken werden, ist jedoch, dass Betriebssystemversionen ab Bullseye das ältere Kamerasystem und die älteren Anwendungen nicht mehr unterstützen und stattdessen die libcamera-Apps von Raspberry Pi erstellt und vorinstalliert werden. Bevor wir fortfahren, beachten Sie, dass Raspberry Pi OS Buster immer noch zum Download verfügbar ist, wenn Sie Bullseye nicht verwenden möchten. Wenn Sie Kameraanwendungen mit Ihrem Raspberry Pi verwenden, empfehlen wir Ihnen, sich etwas Zeit zu nehmen, um abzuwägen, ob Sie an dieser Stelle zu Bullseye wechseln. In diesem Blogbeitrag wird erörtert, warum Sie dies tun möchten und warum nicht.

Was sind libcamera-Apps?

Libcamera-Apps wurden entwickelt, um die meisten Funktionen zu kopieren, die Benutzer von raspistill, raspivid und raspiyuv kennen. Dabei gibt es einige unvermeidbare Unterschiede, die hier genauer untersucht werden. Zu den neuen Anwendungen gehören:

libcamera-hello – eine einfache „Hallo Welt“-Anwendung, die einen Kameravorschaustream startet und auf dem Bildschirm anzeigt.

libcamera-jpeg – eine einfache Anwendung, um ein Vorschaufenster auszuführen und dann hochauflösende Standbilder aufzunehmen.

libcamera-still – eine komplexere Anwendung zur Aufnahme von Standbildern, die mehr Funktionen von raspistill emuliert.

libcamera-vid – eine Anwendung zur Videoaufnahme.

libcamera-raw – eine grundlegende Anwendung zum Erfassen von Rohbildern (unverarbeiteter Bayer1) Angepasste Farbinformation ) direkt vom Sensor.

libcamera-detect – Diese Anwendung wird nicht standardmäßig erstellt, aber Benutzer können sie erstellen, wenn sie TensorFlow Lite auf ihrem Raspberry Pi installiert haben. Es erfasst JPEG-Bilder, wenn bestimmte Objekte erkannt werden.

raspberrypi.com

libcamera-detect:
identifiziert Katzen, Äpfel und andere weniger nützliche Objekte

Warum sollte man libcamera-apps verwenden?

Wir empfehlen den Benutzern, zu Bullseye zu wechseln, da libcamera-Apps zahlreiche Vorteile bieten:

Sie bieten eine verbesserte Bildqualität, die ein Benutzer außerdem nach seinem eigenen Geschmack anpassen kann.

Wir können Fehler beheben und neue Funktionen entwickeln – all das war im proprietären Broadcom-Stack extrem schwierig. Wir freuen uns beispielsweise sehr, in naher Zukunft Autofokus-Funktionen zu planen.

Da es sich um Open Source handelt, können Drittanbieter Probleme beheben und auch neue Funktionen hinzufügen – wir berücksichtigen gerne Pull Requests in unserem Github-Repository. (Beiträge zum Kernel oder zur libcamera selbst müssen auf die übliche Weise vorgelagert werden.)

Es ist viel einfacher, Unterstützung für neue Kameras hinzuzufügen, und zwar für Kameras von Drittanbietern – eine Reihe wird bereits unterstützt (einschließlich der Sony imx290, imx327 und imx378 sowie der Omnivision ov9281). Wir arbeiten gerne mit Anbietern zusammen und weitere sind bereits in der Pipeline.

Die Anwendungen sind leicht verständlich gestaltet, so dass der Anwender sie an die eigenen Bedürfnisse anpassen kann.

Wir zeigen, wie die Kameraanwendungen mit leistungsstarken Bildverarbeitungsbibliotheken von Drittanbietern wie OpenCV und TensorFlow Lite erweitert werden können.

Wir bieten ein Framework zur Bildnachbearbeitung, das Beispiele für Bewegungserkennung, HDR-Bildgebung (High Dynamic Range), Gesichts- und Objekterkennung, Posenschätzung und Bildsegmentierung umfasst. Wir würden uns freuen, wenn Nutzer mehr beitragen möchten!

Es wird in der 64-Bit-Version von Raspberry Pi OS vollständig unterstützt.

Trotzdem bleiben die libcamera-Apps von libcamera und Raspberry Pi in Arbeit. Gründe, bei einer älteren Betriebssystemversion zu bleiben und mit dem alten Kamerasystem fortzufahren, sind:

Es gibt noch keine Python-Schnittstelle. Eine Alternative zur alten Picamera, phantasievoll Picamera2 genannt, ist in Entwicklung. Auch dies wird sich viel direkter in etablierte Python-Bibliotheken integrieren, um auf Dinge wie Fenster- und Grafikfunktionen zuzugreifen. Picamera2 wird von Raspberry Pi entwickelt (im Gegensatz zu Picamera selbst, das eigentlich Code von Drittanbietern ist) und dies wird sowohl den Support als auch die weitere zukünftige Entwicklung erleichtern.

Derzeit wird Stereo-Imaging innerhalb von libcamera nicht unterstützt, obwohl dies in unseren zukünftigen Entwicklungsplänen vorgesehen ist.

Benutzer von Raspberry Pis mit niedrigem Stromverbrauch (wie Zero), die gleichzeitig X Windows verwenden möchten, können mit dem Legacy-Stack eine bessere Kameraleistung erzielen, da dies mehr Arbeit auf der GPU und weniger auf den ARM-Kernen (die Probleme haben können) macht mit X Windows auf jeden Fall). Beachten Sie, dass libcamera-Apps auf diesen Systemen immer noch gut funktionieren, wenn X Windows nicht ausgeführt wird oder wenn kein Live-Videofenster erforderlich ist.

Es gibt noch einige bekannte Problemebekannte Probleme in libcamera.

Wie weiter oben erwähnt, steht für diejenigen, die es verwenden möchten, die vorherige Buster-Version weiterhin zum Download zur Verfügung.

libcamera testen

Benutzer des neuen Bullseye OS werden feststellen, dass libcamera-Apps vorinstalliert sind und ohne weitere Eingriffe funktionieren. Sie müssen nicht einmal mehr die Kamera aktivieren, obwohl Sie immer noch eine anschließen müssen!

Beachten Sie, dass es einige bekannte Probleme mit der ersten Version gibt:

Die Vorschau bei der Ausführung unter X Windows funktioniert auf Raspberry Pi Zero oder Raspberry Pi 1, 2 oder 3 Geräten ohne diesen Workaround nicht. Benutzer von Raspberry Pi 4 oder diejenigen, die kein X Windows verwenden, sind nicht betroffen.

Das Raspberry Pi Camera Module 2, Raspberry Pi Camera Module 2 NoIR und Raspberry Pi High Quality Camera funktionieren noch nicht auf dem neuen Raspberry Pi Zero 2 W.

Beide Probleme werden in Kürze behoben.

Inzwischen können Buster-Benutzer mit einer aktuellen Version des Betriebssystems libcamera-Apps aus den apt-Repositorys installieren.

Weitere Informationen zu den ersten Schritten mit den neuen Anwendungen finden Sie auf unserer offiziellen Dokumentationsseite, wo es viele Beispielbefehle gibt.

Bekannte Probleme

Uns sind die folgenden Probleme in libcamera und libcamera-apps bekannt.

Modusauswahl. libcamera versucht anhand der angegebenen Ausgabeauflösung den gewünschten Kameramodus zu erraten, leider ist dies alles andere als narrensicher. Es kann zu beschnittenen Kameramodi springen, wenn Sie wirklich das volle FoV haben wollten, und es gibt keine Möglichkeit, Kameramodi anzufordern, die schneller rahmen (vielleicht durch Senden von Rohbildern mit einer geringeren Bittiefe). Wir bleiben diesbezüglich im Gespräch mit dem libcamera-Team und arbeiten an einer Lösung.

libcamera unterstützt keine Farbräume. Dies bedeutet, dass alle Bilder, einschließlich Videostreams, im Standard-JPEG-Farbraum („full range BT601“) vorliegen. Auch hier arbeiten wir mit dem libcamera-Team daran, eine Lösung dafür zu finden.

Auf Pi 3s (und früheren Geräten) kann die Grafikhardware nur Bilder mit bis zu 2048 x 2048 Pixeln unterstützen, was die Kamerabilder begrenzt, die im Vorschaufenster in der Größe geändert werden können. In der Praxis bedeutet dies, dass die Videocodierung von Bildern mit einer Größe von mehr als 2048 Pixeln (die zwangsläufig einen anderen Codec als h.264 verwenden würde) keine Vorschaubilder unterstützt oder beschädigte Vorschaubilder erzeugt. Für Pi 4s beträgt die Grenze 4096 Pixel. Wir empfehlen, vorerst die Option -n (keine Vorschau) zu verwenden.

Das Vorschaufenster zeigt bei Verwendung von X-Fenstern einige Anzeigefehler. Dies ist wahrscheinlich nicht zu beheben.