8.7 KiB
Ein Bild aufnehmen - Raspberry Pi
In diesem Teil der Lektion fügen Sie Ihrem Raspberry Pi einen Kamerasensor hinzu und lesen Bilder davon aus.
Hardware
Der Raspberry Pi benötigt eine Kamera.
Die Kamera, die Sie verwenden werden, ist ein Raspberry Pi Camera Module. Diese Kamera wurde speziell für den Raspberry Pi entwickelt und wird über einen dedizierten Anschluss am Pi verbunden.
💁 Diese Kamera verwendet das Camera Serial Interface, ein Protokoll der Mobile Industry Processor Interface Alliance, bekannt als MIPI-CSI. Dies ist ein spezielles Protokoll zur Übertragung von Bildern.
Kamera anschließen
Die Kamera kann mit einem Flachbandkabel an den Raspberry Pi angeschlossen werden.
Aufgabe - Kamera anschließen
-
Schalten Sie den Pi aus.
-
Verbinden Sie das Flachbandkabel, das mit der Kamera geliefert wird, mit der Kamera. Ziehen Sie dazu vorsichtig an dem schwarzen Plastikclip im Halter, sodass er sich ein wenig löst. Schieben Sie dann das Kabel in die Buchse, wobei die blaue Seite vom Objektiv weg zeigt und die Metallkontakte zum Objektiv hin zeigen. Sobald das Kabel vollständig eingesteckt ist, drücken Sie den schwarzen Plastikclip wieder zurück.
Eine Animation, die zeigt, wie man den Clip öffnet und das Kabel einsteckt, finden Sie in der Raspberry Pi Dokumentation zum Einstieg mit dem Kameramodul.
-
Entfernen Sie das Grove Base Hat vom Pi.
-
Führen Sie das Flachbandkabel durch den Kameraschlitz im Grove Base Hat. Achten Sie darauf, dass die blaue Seite des Kabels zu den analogen Ports mit der Beschriftung A0, A1 usw. zeigt.
-
Stecken Sie das Flachbandkabel in den Kameraanschluss am Pi. Ziehen Sie erneut den schwarzen Plastikclip hoch, stecken Sie das Kabel ein und drücken Sie den Clip wieder zurück. Die blaue Seite des Kabels sollte zu den USB- und Ethernet-Anschlüssen zeigen.
-
Setzen Sie das Grove Base Hat wieder ein.
Kamera programmieren
Der Raspberry Pi kann jetzt programmiert werden, um die Kamera mit der PiCamera Python-Bibliothek zu verwenden.
Aufgabe - Legacy-Kameramodus aktivieren
Leider hat sich mit der Veröffentlichung von Raspberry Pi OS Bullseye die Kamerasoftware geändert, die mit dem Betriebssystem geliefert wird. Dadurch funktioniert PiCamera standardmäßig nicht mehr. Es gibt eine Ersatzbibliothek namens PiCamera2, die sich jedoch noch in der Entwicklung befindet und derzeit nicht einsatzbereit ist.
Für den Moment können Sie Ihren Pi in den Legacy-Kameramodus versetzen, um PiCamera zu verwenden. Der Kameraanschluss ist standardmäßig deaktiviert, aber durch das Aktivieren der Legacy-Kamerasoftware wird der Anschluss automatisch aktiviert.
-
Schalten Sie den Pi ein und warten Sie, bis er hochgefahren ist.
-
Starten Sie VS Code, entweder direkt auf dem Pi oder über die Remote SSH-Erweiterung.
-
Führen Sie die folgenden Befehle in Ihrem Terminal aus:
sudo raspi-config nonint do_legacy 0 sudo reboot
Dies aktiviert eine Einstellung, um die Legacy-Kamerasoftware zu aktivieren, und startet den Pi neu, damit die Einstellung wirksam wird.
-
Warten Sie, bis der Pi neu gestartet ist, und starten Sie dann VS Code erneut.
Aufgabe - Kamera programmieren
Programmieren Sie das Gerät.
-
Erstellen Sie im Terminal einen neuen Ordner im Home-Verzeichnis des Benutzers
pi
mit dem Namenfruit-quality-detector
. Erstellen Sie in diesem Ordner eine Datei namensapp.py
. -
Öffnen Sie diesen Ordner in VS Code.
-
Um mit der Kamera zu interagieren, können Sie die PiCamera Python-Bibliothek verwenden. Installieren Sie das Pip-Paket dafür mit folgendem Befehl:
pip3 install picamera
-
Fügen Sie den folgenden Code in Ihre Datei
app.py
ein:import io import time from picamera import PiCamera
Dieser Code importiert einige benötigte Bibliotheken, einschließlich der
PiCamera
-Bibliothek. -
Fügen Sie den folgenden Code darunter ein, um die Kamera zu initialisieren:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
Dieser Code erstellt ein PiCamera-Objekt und setzt die Auflösung auf 640x480. Obwohl höhere Auflösungen unterstützt werden (bis zu 3280x2464), arbeitet der Bildklassifikator mit viel kleineren Bildern (227x227), sodass es nicht notwendig ist, größere Bilder aufzunehmen und zu senden.
Die Zeile
camera.rotation = 0
legt die Rotation des Bildes fest. Das Flachbandkabel kommt unten in die Kamera, aber wenn Ihre Kamera gedreht wurde, um besser auf das Objekt zu zeigen, das Sie klassifizieren möchten, können Sie diese Zeile auf die Anzahl der Rotationsgrade ändern.Wenn Sie beispielsweise das Flachbandkabel über etwas hängen lassen, sodass es oben an der Kamera ist, setzen Sie die Rotation auf 180:
camera.rotation = 180
Die Kamera benötigt einige Sekunden, um zu starten, daher die Zeile
time.sleep(2)
. -
Fügen Sie den folgenden Code darunter ein, um das Bild als Binärdaten zu erfassen:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
Dieser Code erstellt ein
BytesIO
-Objekt, um Binärdaten zu speichern. Das Bild wird von der Kamera als JPEG-Datei gelesen und in diesem Objekt gespeichert. Dieses Objekt hat einen Positionsindikator, um zu wissen, wo es sich in den Daten befindet, damit später weitere Daten hinzugefügt werden können. Die Zeileimage.seek(0)
setzt diese Position zurück auf den Anfang, damit alle Daten später gelesen werden können. -
Fügen Sie darunter den folgenden Code ein, um das Bild in einer Datei zu speichern:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
Dieser Code öffnet eine Datei namens
image.jpg
zum Schreiben, liest alle Daten aus demBytesIO
-Objekt und schreibt diese in die Datei.💁 Sie können das Bild direkt in einer Datei speichern, anstatt ein
BytesIO
-Objekt zu verwenden, indem Sie den Dateinamen an dencamera.capture
-Aufruf übergeben. Der Grund für die Verwendung desBytesIO
-Objekts ist, dass Sie später in dieser Lektion das Bild an Ihren Bildklassifikator senden können. -
Richten Sie die Kamera auf etwas und führen Sie diesen Code aus.
-
Ein Bild wird aufgenommen und als
image.jpg
im aktuellen Ordner gespeichert. Sie sehen diese Datei im VS Code Explorer. Wählen Sie die Datei aus, um das Bild anzuzeigen. Falls es gedreht werden muss, aktualisieren Sie die Zeilecamera.rotation = 0
entsprechend und machen Sie ein neues Foto.
💁 Sie finden diesen Code im Ordner code-camera/pi.
😀 Ihr Kameraprogramm war ein Erfolg!
Haftungsausschluss:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.