Die Himbeer-Pi hat viele der bestes Zubehör und eines, das sicher auf dieser Liste erscheinen wird, ist das neue Kameramodul 3. In unser Raspberry Pi Camera Module 3 Testhaben wir gesagt, dass wir den schnellen Autofokus und die HDR-Bilder lieben, und wir möchten diese Funktionen in dieser Anleitung mit Ihnen teilen.
Wenn Sie noch nie eine Raspberry Pi-Kamera verwendet haben, ist unsere Anfängerleitfaden für Picamera2 ist eine großartige Grundierung, um Ihren Pi dazu zu bringen, großartige Bilder zu machen. In dieser Anleitung werden wir die vielen Möglichkeiten untersuchen, wie wir das Fokussystem des Kameramoduls 3 mit Picamera2 verwenden können, und lernen, wie man HDR-Bilder mit einem schnellen und einfachen Skript aufnimmt, das den Prozess automatisiert. Wenn Python nicht Ihr Ding ist, kann das Kameramodul 3 auch mit gesteuert werden libcamera über das Terminal.
Kennenlernen des Autofokus
Der Autofokus hat drei Modi, in denen er arbeitet.
- Handbuch: Der Benutzer muss das LensPosition-Steuerelement angeben, um den Fokus des Objektivs zu ändern. Ein Wert von Null erzeugt einen unendlichen Fokus. Werte bis 10 werden akzeptiert, wobei 10 den Fokus auf 1/10 Meter (10CM) setzt.
- Auto: Der typische Autofokus, der AfTrigger verwendet, um einen Autofokuszyklus zu starten.
- Kontinuierlich: Die Kamera sucht nach einem Ziel und fokussiert sich erneut auf das Ziel, wenn der Algorithmus es erkennt.
Projekt 1: Kontinuierlichen Fokus verwenden
Der kontinuierliche Fokus verwendet einen Algorithmus, um den Bildstrom nach einem Ziel zu durchsuchen. Es spielt keine Rolle, ob das Ziel nah (ca. 10 cm) oder weit entfernt ist, der Algorithmus findet das Ziel und erfasst es. Aber wie nutzen wir es? Lassen Sie uns einen kurzen Test durchführen. Wir verwenden einen kontinuierlichen Fokusmodus, um nach dem bestmöglichen Fokus auf unser Ziel zu suchen. Es wäre nützlich, ein Objekt zu haben, das Sie an die Kamera halten können, wir haben einen Dollarschein verwendet.
1. Öffnen Sie im Hauptmenü Programmierung >> Thonny.
2. Picamera2 importieren.
from picamera2 import Picamera2
3. Importieren Sie die Kontrollklasse von libcamera. Damit können wir die Kamera nach unseren Wünschen konfigurieren.
from libcamera import controls
4. Erstellen Sie ein Objekt, picam2 die wir als Verbindung zwischen dem Code und unserer Kamera verwenden werden.
picam2 = Picamera2()
5. Starten Sie ein Vorschaufenster. In der Vorschau sehen wir die Ausgabe der Kamera.
picam2.start(show_preview=True)
6. Stellen Sie den AfMode (Autofokus-Modus) auf kontinuierlich ein.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
7. Speichern Sie den Code als AFtest.py.
8. Klicken Sie auf Ausführen, um den Code zu starten. Ein Vorschaufenster wird angezeigt. Bewegen Sie ein Objekt, wir haben einen Dollarschein ausgewählt, um den Rahmen herum und beobachten Sie, wie sich der Fokus verschiebt. Versuchen Sie, das Objekt näher zum Objektiv zu bewegen, denken Sie daran, dass der nächste Fokuspunkt 10 Zentimeter entfernt ist.
Vollständige Codeliste
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
Projekt 2: Fokus manuell setzen
Manchmal ist ein fester Fokus das, was wir brauchen, um eine großartige Aufnahme zu machen. Schließlich wollen wir kein verschwommenes Durcheinander einfangen. Das Fixieren des Fokus ist relativ einfach; Tatsächlich ist es so einfach, dass wir den größten Teil des Codes aus dem vorherigen Beispiel wiederverwenden können.
1. Verwenden Sie Speichern unter auf dem vorherigen Beispiel to Erstellen Sie eine neue Datei namens ManualFocusTest.py
2. Ändern Sie die letzte Zeile, um LensPosition zu verwendensetzen Sie in diesem Fall den Wert auf 0,0 für einen unendlichen Fokus.
picam2.set_controls("AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.0)
3. Führen Sie den Code aus. Beachten Sie, wie der Fokus für weit entfernte Objekte scharf ist, aber in der Nähe sind sie verschwommen.
4. Ändern Sie den LensPosition-Wert auf 0,5. Dies ergibt ungefähr eine Brennweite von 50 cm.
5. Speichern Sie den Code und führen Sie ihn aus. Bewegen Sie ein Objekt auf die Kamera zu und von ihr weg. Beachten Sie, wie der Fokus bei etwa 50 cm scharf wird.
Vollständige Codeliste
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.5)
Projekt 3: Schneller Fokus für mehrere Bilder
Ob es sich um eine Vogelkamera, einen Schulsporttag oder die Haussicherheit handelt, manchmal brauchen wir eine Reihe scharfer Bilder. Glücklicherweise können wir das Kameramodul 3 so einstellen, dass es eine Reihe schneller Bilder aufnimmt und den Autofokus auf hohe Geschwindigkeit stellt.
1. Erstellen Sie eine neue Datei namens AfFastFocus.py
2. Picamera2 importieren.
from picamera2 import Picamera2
3. Importieren Sie die Kontrollklasse von libcamera. Damit können wir die Kamera nach unseren Wünschen konfigurieren.
from libcamera import controls
4. Erstellen Sie ein Objekt, picam2 die wir als Verbindung zwischen dem Code und unserer Kamera verwenden werden.
picam2 = Picamera2()
5. Starten Sie ein Vorschaufenster. In der Vorschau sehen wir die Ausgabe der Kamera.
picam2.start(show_preview=True)
6. Stellen Sie den Autofokusmodus auf Kontinuierlich und AfSpeed auf Schnell ein.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
7. Stellen Sie die Kamera so ein, dass sie drei Dateien mit einer Verzögerung von einer halben Sekunde zwischen jeder Aufnahme aufnimmt. Der Dateiname „fastfocus.jpg“ hängt 0, dann 1 und 2 an jede Datei an. Geben Sie uns drei Dateien in numerischer Reihenfolge.
picam2.start_and_capture_files("fastfocus:d.jpg", num_files=3, delay=0.5)
8. Schließen Sie das Vorschaufenster.
picam2.stop_preview()
9. Schließen Sie die Kameraverbindung.
picam2.stop()
10. Speichern Sie den Code und führen Sie ihn aus. Halten Sie ein Objekt in drei verschiedenen Abständen zur Kamera und beobachten Sie, wie sich der Fokus ändert, das Vorschaufenster einfriert, während die Kamera eine Aufnahme macht, und dann für die nächste Aufnahme freigegeben wird. Sobald drei Aufnahmen gemacht wurden, schließt sich das Vorschaufenster.
Vollständige Codeliste
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("fastfocus-test:d.jpg", num_files=3, delay=0.5)
picam2.stop_preview()
picam2.stop()
Aufnehmen eines HDR-Bildes mit Picamera2
HDR-Bilder (High Dynamic Range) können problemlos aufgenommen werden Bibliothek. Wir müssen nur das Argument –hdr übergeben, wenn wir den Befehl ausführen. Aber für Picamera2 müssen wir einen Terminalbefehl ausführen, bevor wir unseren Python-Code ausführen.
HDR erhöht den dynamischen Helligkeitsbereich von Bildern. Mit HDR erhalten wir tiefere Dunkelheit und hellere Bilder. Dies funktioniert, indem mehrere Bilder derselben Szene mit jeweils unterschiedlichen Belichtungen aufgenommen werden. Diese Bilder werden dann zu einem einzigen Bild kombiniert, das den gesamten Bereich umfasst. Das Kameramodul 3 kann HDR-Bilder aufnehmen, jedoch nicht mit der vollen Auflösung von 12 MP. Stattdessen erhalten wir ein 3MP-Bild mit einer Auflösung von 2304 x 1296 Pixel.
Für unseren Test werden wir den Code aus der wiederverwenden AfFastFocus.py Projekt, um eine Reihe von HDR-Bildern aufzunehmen. Wir werden auch die Betriebssystembibliothek von Python verwenden, um einen Terminalbefehl auszuführen, der die HDR-Einstellung ohne Benutzerinteraktion ein- und ausschaltet. Das bedeutet, dass wir nicht vergessen werden, die HDR-Einstellungen ein- und auszuschalten.
1. Erstellen Sie eine neue Datei namens HDRAfFastFocus.py
2. Picamera2 importieren.
from picamera2 import Picamera2
3. Importieren Sie die Kontrollklasse von libcamera. Damit können wir die Kamera nach unseren Wünschen konfigurieren.
from libcamera import controls
4. Importieren Sie das OS-Modul. Dadurch kann unser Code mit dem zugrunde liegenden Betriebssystem, in diesem Fall Raspberry Pi OS (Linux), interagieren.
import os
5. Erstellen Sie ein Objekt, picam2 die wir als Verbindung zwischen dem Code und unserer Kamera verwenden werden.
picam2 = Picamera2()
6. Verwenden Sie die Systemfunktion des Betriebssystemmoduls, um die Kamera auf die Verwendung von HDR einzustellen. Picamera2 unterstützt HDR, aber nicht direkt im Modul. Das Problem liegt bei V4L2, der Kernel-Schnittstelle zwischen der Kamera und dem Linux-Videosystem. Im Moment bietet es mit dieser Kamera keine vollständige Unterstützung für HDR, daher müssen wir diese schnelle Problemumgehung ausführen, um es in Picamera2 verfügbar zu machen.
7. Geben Sie eine Nachricht an die Python-Shell aus informiert uns, dass HDR eingeschaltet ist.
print("Setting HDR to ON")
8. Starten Sie ein Vorschaufenster. In der Vorschau sehen wir die Ausgabe der Kamera.
picam2.start(show_preview=True)
9. Stellen Sie den Autofokusmodus auf Kontinuierlich ein und Stellen Sie AfSpeed auf Fast ein.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
10. Stellen Sie die Kamera so ein, dass sie drei Dateien mit einer Verzögerung von einer Sekunde zwischen jeder Aufnahme aufnimmt. Der Dateiname „HDRfastfocus.jpg“ hängt 0, dann 1 und 2 an jede Datei an. Geben Sie uns drei Dateien in numerischer Reihenfolge. Wir verdoppeln die Verzögerung zwischen jeder Aufnahme, um der Kamera Zeit zu geben, das vorherige Bild zu speichern und dann den Fokus für das nächste Bild einzustellen. Wir haben es mit einer Verzögerung von 0,5 getestet und unsere Aufnahmen waren manchmal etwas zu unscharf.
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
11. Schließen Sie das Vorschaufenster.
picam2.stop_preview()
12. Schließen Sie die Kameraverbindung.
picam2.stop()
13. Drucken Sie eine Nachricht an den Benutzer dass HDR jetzt ausgeschaltet ist, und führen Sie dann den Befehl mit os.system aus.
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
14. Speichern Sie den Code und führen Sie ihn aus. Halten Sie ein Objekt in drei verschiedenen Abständen zur Kamera und beobachten Sie, wie sich der Fokus ändert, das Vorschaufenster einfriert, während die Kamera eine Aufnahme macht, und dann für die nächste Aufnahme freigegeben wird. Sobald drei Aufnahmen gemacht wurden, schließt sich das Vorschaufenster.
Vollständige Codeliste
from picamera2 import Picamera2
from libcamera import controls
import os
picam2 = Picamera2()
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=1 -d /dev/v4l-subdev0")
print("Setting HDR to ON")
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
picam2.stop_preview()
picam2.stop()
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")