sensor_save_and_restore_settings.py
# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Sensoreinstellungen speichern und wiederherstellen
#
# Dieses Beispiel zeigt, wie sich Kameraeinstellungen speichern und anschließend wiederherstellen lassen,
# nach einem Sensor-Reset und/oder Powerdown.
import csi
import time
# Pixelformat auf RGB565 (oder GRAYSCALE) setzen
target_pixformat = csi.RGB565
# Framegröße auf QVGA (320x240) setzen
target_framesize = csi.QVGA
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(target_pixformat)
csi0.framesize(target_framesize)
# 3 Sekunden warten, damit die automatischen Kamerafunktionen laufen und die FPS gemessen werden können.
t = time.ticks_ms()
clock = time.clock()
fps = 0
while time.ticks_diff(time.ticks_ms(), t) < 3000:
clock.tick()
csi0.snapshot()
fps = clock.fps()
# Der Sensor sollte jetzt Zeit haben, sich aufzuwärmen und sich an die aktuelle Umgebung anzupassen.
# Die Einstellungen jetzt auslesen, bevor der Sensor ausgeschaltet wird.
gain = csi0.gain_db()
exposure = csi0.exposure_us()
rgb_gain = csi0.rgb_gain_db()
print("Gain == %f db" % gain)
print("Exposure == %d us" % exposure)
print("RGB Gain == %f db, %f db, %f db" % (rgb_gain[0], rgb_gain[1], rgb_gain[2]))
print("Powering Off Sensor")
csi0.shutdown(True)
time.sleep(2)
del csi0
# Deaktiviert alle Einschwingzeit-Verzögerungen im Sensortreibercode. Dies führt zwangsläufig zu
# fehlerhaften Bildern beim Ändern von Einstellungen. Dafür lassen sich Sensoreinstellungen jedoch
# jetzt schnell und in großer Zahl ändern.
ts = time.ticks_ms()
print("Powering On Sensor")
csi0 = csi.CSI(delays=False)
csi0.reset()
csi0.pixformat(target_pixformat)
csi0.framesize(target_framesize)
csi0.auto_gain(False, gain_db=gain)
csi0.auto_exposure(False, exposure_us=exposure)
csi0.auto_whitebal(False, rgb_gain_db=rgb_gain)
# Sie müssen vor dem Aufruf von snapshot eine Verzögerung einfügen, da das aktuell aus der Kamera kommende Bild
# höchstwahrscheinlich stark fehlerhaft ist. Die genaue Verzögerungszeit unten ist
# anwendungsabhängig. Sie sollten jedoch wahrscheinlich mindestens ein Einzelbild abwarten.
time.sleep(1.0 / fps)
print("Restore Delay %d ms" % (time.ticks_ms() - ts))
gain = csi0.gain_db()
exposure = csi0.exposure_us()
rgb_gain = csi0.rgb_gain_db()
print("Gain == %f db" % gain)
print("Exposure == %d us" % exposure)
print("RGB Gain == %f db, %f db, %f db" % (rgb_gain[0], rgb_gain[1], rgb_gain[2]))
clock = time.clock()
# Das Bild sollte wieder so aussehen wie vor dem Speichern und Wiederherstellen.
while True:
clock.tick()
img = csi0.snapshot()
# print(clock.fps())