csi — Kamerasensoren¶
Das Modul csi ist die moderne, objektorientierte Schnittstelle zum bzw. zu den Kamerasensor(en) einer OpenMV Cam. Jeder physische Sensor wird durch eine CSI-Instanz repräsentiert, sodass die multispektralen Imager-Boards, die einen Farbsensor mit einem Thermo- oder Ereignissensor kombinieren, jeden einzeln ansteuern können, indem dem Konstruktor eine andere cid übergeben wird. Kameras mit nur einem Sensor instanziieren einfach eine einzige CSI.
Ein CSI-Objekt besitzt die vollständige Sensorkonfiguration – Pixelformat, Framesize/Fenster, Belichtung/Verstärkung/Weißabgleich, Hardware-Spiegelung und -Kippung, Farbbalken-Testmuster, Bildraten-Takt, ROI für die automatische Belichtung und chipspezifische ioctl-Befehle. Einzelbilder werden mit CSI.snapshot() aufgenommen, was ein image.Image zurückgibt, das vom Framebuffer gestützt wird.
Dieses Modul löst das veraltete sensor-Modul ab (welches dieselbe Funktionalität als modulweite Funktionen bot, die an einen einzigen verborgenen Sensor gebunden waren). Neuer Code sollte CSI verwenden.
Anwendungsbeispiel:
import csi
# Setup camera.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # skip frames
# Take pictures.
while(True):
csi0.snapshot()
Verwendung mit Asyncio¶
Die blockierende CSI.snapshot()-Schleife oben kooperiert nicht mit der asyncio-Ereignisschleife – während snapshot auf das nächste Einzelbild wartet, ist jede andere Coroutine im Programm eingefroren. Damit eine Aufnahmeschleife mit anderer nebenläufiger Arbeit (einem UART-Client, einem Tasten-Überwacher, einer Netzwerkaufgabe) koexistieren kann, umhülle CSI mit einem kleinen Adapter, der snapshot in eine await-fähige Coroutine verwandelt, indem er snapshot(blocking=False) abfragt und zwischen den Prüfungen die Kontrolle an die Ereignisschleife abgibt:
import asyncio
import csi
class AsyncCSI:
def __init__(self, *args, **kwargs):
self._csi = csi.CSI(*args, **kwargs)
def __getattr__(self, name):
return getattr(self._csi, name)
async def snapshot(self):
while True:
img = self._csi.snapshot(blocking=False)
if img is not None:
return img
await asyncio.sleep_ms(0)
__getattr__ leitet jedes andere Attribut (reset, pixformat, framesize, die Sensor-Stellgrößen) an das zugrunde liegende CSI weiter, sodass der Wrapper ein direkter Ersatz ist. Der erste nicht blockierende Aufruf startet außerdem die DMA-Aufnahme der Kamera, falls sie noch nicht lief, sodass kein zusätzliches Bootstrapping nötig ist.
Eine Aufnahmeschleife fügt sich dann als nur eine weitere Coroutine in ein größeres asyncio-Programm ein:
async def capture_loop(cam):
while True:
img = await cam.snapshot()
# process img here
async def main():
cam = AsyncCSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
asyncio.create_task(some_other_task())
await capture_loop(cam)
asyncio.run(main())
Die Einstellung framebuffers ist auch in dieser Form noch von Bedeutung – der Einzelpuffer-Modus lässt snapshot(blocking=False) None zurückgeben, bis das nächste Einzelbild aufgenommen ist, während Doppel- oder Dreifachpufferung dies ausgleicht, sodass der Wrapper bei der ersten Abfrage in der Regel ein gepuffertes Einzelbild vorfindet. Im AsyncCSI-Abschlussbeispiel des asyncio-Tutorials findest du die vollständige Erläuterung.
Klasse CSI – Kamerasensor-Schnittstelle¶
Die Klasse CSI wird zur Steuerung eines Kamerasensors verwendet.
- class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)¶
Erstellt ein Objekt zur Kommunikation mit einem Kamerasensor. Auf Boards mit mehreren Sensoren kann das jeweilige CSI-Objekt durch Übergabe einer
cidwiecsi.LEPTONausgewählt werden, um ein FLIR-Lepton-Sensormodul auszuwählen. Istcidgleich -1, wird der Primärsensor ausgewählt (auf Boards mit mehreren Sensoren üblicherweise ein Farbkameramodul).Ist
delaysgleichFalse, werden alle Einschwingzeit-Verzögerungen im csi-Treiber deaktiviert. Standardmäßig verzögert der Sensortreiber nach einem Reset bzw. Moduswechsel, um zu verhindern, dassCSI.snapshotbeschädigte Einzelbilder zurückgibt. Das Deaktivieren der Verzögerungen erlaubt es dir, Aktualisierungen zu bündeln und am Ende eine einzige Verzögerung anzuwenden, bevorCSI.snapshotaufgerufen wird.Ist
fflushgleichFalse, wird das inCSI.framebufferserwähnte automatische Leeren des Framebuffers deaktiviert. Dadurch entfällt jegliches Zeitlimit für Einzelbilder im Framebuffer-FIFO.streamwählt aus, ob dieses CSI die an die IDE gesendete Stream-Quelle ist. BeiNone(Standard) wird das CSI nur dann zur Stream-Quelle, wenn es der primäre (nicht-zusätzliche) Sensor ist. ÜbergibTrue, um dieses CSI zur Stream-Quelle zu erzwingen, oder einen beliebigen falschen Wert, um die bestehende Stream-Quelle unverändert zu lassen.Methoden¶
- reset(hard: bool = True) None¶
Initialisiert den Kamerasensor. Führt einen Hardware-Reset durch, indem das RESET-Signal-GPIO zum Kameramodul umgeschaltet wird, falls
hardgleichTrueist.hardsollte auf false gesetzt werden, wenn zusätzliche Kamerasensoren zurückgesetzt werden, die sich dasselbe RESET-Signal-GPIO mit dem Primärmodul teilen.
- shutdown(enable: bool) None¶
Versetzt die Kamera in einen Modus mit geringerem Energieverbrauch als Schlaf (aber die Kamera muss beim Aufwecken zurückgesetzt werden).
- sleep(enable: bool) None¶
Versetzt die Kamera in den Schlafmodus, wenn
enableTrue ist. Andernfalls weckt sie sie wieder auf.
- flush() None¶
Kopiert den aktuellen Inhalt des Framebuffers in die IDE-Vorschau. Rufe dies nach dem letzten
CSI.snapshotauf, wenn das Skript beendet wird, damit die IDE das letzte Einzelbild anzeigt.
- snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None¶
Nimmt mit der Kamera ein Bild auf und gibt ein
image.Image-Objekt zurück.Werden
timeund/oderframesübergeben, blockiert snapshot für so vieletime-Millisekunden und/oder so viele von der Kamera aufgenommeneframes. Beide Argumente können gleichzeitig verwendet werden. Nachdemtimeund/oderframesverstrichen sind, gibt snapshotNonezurück.blockingkannFalsesein, um nicht blockierendes Verhalten zu aktivieren, wodurch snapshotNonezurückgibt, wenn das nächste Bild der Kamera nicht bereit ist, anstatt zu warten.imagekann ein anderesimage.Image-Objekt sein, das mit dem neu von der Kamera aufgenommenen Bild aktualisiert wird, anstatt ein neuesimage.Image-Objekt zurückzugeben. Der vorherige Bildinhalt wird per Deep Copy überschrieben.Ist
CSI.auto_rotationaktiviert, gibt diese Methode ein bereits rotiertesimage.Imagezurück.
- cid() int¶
Gibt die Chip-ID des Kameramoduls zurück. Vergleiche mit einer von
csi.OV2640,csi.OV5640,csi.OV7670,csi.OV7690,csi.OV7725,csi.OV9650,csi.MT9V022,csi.MT9V024,csi.MT9V032,csi.MT9V034,csi.MT9M114,csi.BOSON320,csi.BOSON640,csi.LEPTON,csi.HM01B0,csi.HM0360,csi.GC2145,csi.GENX320ES,csi.GENX320,csi.PAG7920,csi.PAG7936,csi.PAJ6100,csi.FROGEYE2020odercsi.SOFTCSI.
- readable() bool¶
Gibt
Truezurück, wenn ein Bild bereit ist, vonCSI.snapshotzurückgegeben zu werden, sodass ein Aufruf von snapshot nicht blockiert.
- pixformat(pixformat: int | None = None) int | None¶
Setzt das Pixelformat des Kameramoduls auf eines von
csi.GRAYSCALE,csi.RGB565,csi.BAYER,csi.YUV422odercsi.JPEG(nur bei der OV2640/OV5640).Gibt das aktuelle pixformat zurück, wenn ohne Argumente aufgerufen.
- framesize(framesize: int | Tuple[int, int] | None = None) int | None¶
Setzt die Framesize des Kameramoduls auf eine der Größenkonstanten (z. B.
csi.QVGA,csi.VGA,csi.HDusw. — siehe den Abschnitt über Konstanten).Alternativ kannst du eine benutzerdefinierte Framesize als
(w, h)-Tupel übergeben. Beim Aufruf vonCSI.snapshotwird die benutzerdefinierte Framesize gegen die DMA-Regeln geprüft. Im Allgemeinen müssen Framesizes ein Vielfaches von 8 Pixeln und/oder 16 Bytes sein.Gibt die aktuelle framesize zurück, wenn ohne Argumente aufgerufen.
- framerate(rate: int | None = None) int | None¶
Setzt die Bildrate des Kameramoduls in Hz.
Gibt die aktuelle framerate zurück, wenn ohne Argumente aufgerufen.
Bemerkung
CSI.frameratefunktioniert, indem vom Kameramodul empfangene Einzelbilder verworfen werden, um die Bildrate auf oder unter der angegebenen Rate zu halten. Standardmäßig läuft die Kamera mit der maximalen Bildrate. Sofern für den jeweiligen Kamerasensor implementiert, reduziertCSI.framerateauch die Bildrate des Kamerasensors intern, um Energie zu sparen und die Bildqualität durch eine längere Sensorbelichtung zu verbessern.CSI.frameratekann bei manchen Kameras mitCSI.auto_exposurein Konflikt geraten.
- window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None¶
Setzt die Auflösung der Kamera auf einen Teilbereich der aktuellen Auflösung.
roiist ein(x, y, w, h)-Tupel. Du kannst auch(w, h)übergeben, dann wird das Fenster zentriert.Gibt das aktuelle
(x, y, w, h)-Tupel zurück, wenn ohne Argumente aufgerufen.
- gainceiling(gainceiling: int) bool¶
Setzt das Verstärkungslimit (gainceiling) des Kamerabildes auf einen von 2, 4, 8, 16, 32, 64 oder 128.
Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- brightness(brightness: int) bool¶
Setzt die Helligkeit des Kamerabildes.
Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- contrast(contrast: int) bool¶
Setzt den Kontrast des Kamerabildes.
Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- saturation(saturation: int) bool¶
Setzt die Sättigung des Kamerabildes.
Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- quality(quality: int) bool¶
Setzt die JPEG-Komprimierungsqualität des Kamerabildes. 0 - 100.
Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.Bemerkung
Nur für die Kameras OV2640/OV5640.
- colorbar(enable: bool) bool¶
Schaltet den Farbbalken-Modus ein (
True) oder aus (False). Standardmäßig aus.Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
enableschaltet die automatische Verstärkungsregelung ein (True) oder aus (False). Die Kamera startet mit eingeschalteter automatischer Verstärkungsregelung.Ist
enablegleichFalse, kannst du mitgain_dbeine feste Verstärkung in Dezibel setzen.Ist
enablegleichTrue, kannst du mitgain_db_ceilingdas maximale Verstärkungslimit in Dezibel für den Algorithmus der automatischen Verstärkungsregelung setzen.Bemerkung
Du musst auch den Weißabgleich ausschalten, wenn du Farben verfolgen möchtest.
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
enableschaltet die automatische Belichtungsregelung ein (True) oder aus (False). Die Kamera startet mit eingeschalteter automatischer Belichtungsregelung.Ist
enablegleichFalse, kannst du mitexposure_useine feste Belichtungszeit in Mikrosekunden setzen.Bemerkung
Automatische Belichtungsalgorithmen von Kameras sind ziemlich konservativ, was die Stärke der Anpassung des Belichtungswerts betrifft, und vermeiden im Allgemeinen, den Belichtungswert stark zu verändern. Stattdessen verändern sie den Verstärkungswert stark, um mit wechselnden Lichtverhältnissen umzugehen.
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
enableschaltet den automatischen Weißabgleich ein (True) oder aus (False). Die Kamera startet mit eingeschaltetem automatischem Weißabgleich.Ist
enablegleichFalse, kannst du mitrgb_gain_dbjeweils eine feste Verstärkung in Dezibel für den roten, grünen und blauen Kanal setzen.Bemerkung
Du musst auch die Verstärkungsregelung ausschalten, wenn du Farben verfolgen möchtest.
- rgb_gain_db() Tuple[float, float, float]¶
Gibt ein Tupel
(r, g, b)der aktuellen Verstärkungswerte für Rot, Grün und Blau der Kamera in Dezibel zurück.
- auto_blc(enable: bool, regs: List[int] | None = None) None¶
Setzt die automatische Schwarzpegel-Kalibrierung (BLC) an der Kamera.
enableübergibTrueoderFalse, um BLC ein- oder auszuschalten. In der Regel möchtest du dies immer eingeschaltet haben.regsist es deaktiviert, kannst du die BLC-Registerwerte aus einem vorherigen Aufruf vonCSI.blc_regsmanuell setzen.
- blc_regs() List[int]¶
Gibt die BLC-Register des Sensors als Liste von Ganzzahlen zurück. Zur Verwendung mit
CSI.auto_blc.
- hmirror(enable: bool | None = None) bool | None¶
Schaltet den horizontalen Spiegelmodus ein (
True) oder aus (False). Standardmäßig aus.Gibt die aktuelle Einstellung zurück, wenn ohne Argumente aufgerufen.
- vflip(enable: bool | None = None) bool | None¶
Schaltet den vertikalen Kippmodus ein (
True) oder aus (False). Standardmäßig aus.Gibt die aktuelle Einstellung zurück, wenn ohne Argumente aufgerufen.
- transpose(enable: bool | None = None) bool | None¶
Schaltet den Transponiermodus ein (
True) oder aus (False). Standardmäßig aus.vflip=False, hmirror=False, transpose=False -> 0 Grad Drehung
vflip=True, hmirror=False, transpose=True -> 90 Grad Drehung
vflip=True, hmirror=True, transpose=False -> 180 Grad Drehung
vflip=False, hmirror=True, transpose=True -> 270 Grad Drehung
Gibt die aktuelle Einstellung zurück, wenn ohne Argumente aufgerufen.
- auto_rotation(enable: bool | None = None) bool | None¶
Schaltet den automatischen Rotationsmodus ein (
True) oder aus (False). Standardmäßig aus.Gibt die aktuelle Einstellung zurück, wenn ohne Argumente aufgerufen.
Bemerkung
Diese Methode funktioniert nur, wenn die OpenMV Cam eine
imuinstalliert hat, und wird automatisch aktiviert.
- framebuffers(count: int | None = None) int | None¶
Setzt die Anzahl der Framebuffer, die zum Empfang von Bilddaten verwendet werden. Standardmäßig versucht die OpenMV Cam, die maximale Anzahl an Framebuffern zu allozieren, die sie kann. Eine Neuallozierung erfolgt, sobald
CSI.pixformat,CSI.framesizeoderCSI.windowaufgerufen werden.Ein
countvon 1 (Einzelpuffer), 2 (Doppelpuffer) oder 3 (Dreifachpuffer) wählt den entsprechenden Aufnahmemodus. Übergib 4 oder höher, um den Treiber in den Video-FIFO-Modus zu versetzen, in demcountPuffer in eine Warteschlange eingereiht werden — nützlich für die Videoaufzeichnung auf eine SD-Karte. Bei einem Frame-Drop werden alle Framebuffer außer dem aktiven gelöscht, sodassCSI.snapshotstets ein aktuelles Einzelbild zurückgibt.Gibt den aktuellen count zurück, wenn ohne Argumente aufgerufen.
- special_effect(effect: int) bool¶
Setzt den speziellen Digitaleffekt (einen von
csi.NORMALodercsi.NEGATIVE).Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- lens_correction(enable: bool, radi: int, coef: int) bool¶
enableTruezum Aktivieren,Falsezum Deaktivieren.radiganzzahliger Radius der zu korrigierenden Pixel.coefStärke der Korrektur.Gibt bei Erfolg
Trueund bei FehlschlagFalsezurück.
- vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None¶
Registriert den Callback
cb, der (im Interrupt-Kontext) ausgeführt wird, sobald das Kameramodul ein neues Einzelbild erzeugt (aber bevor das Einzelbild empfangen wird).cbnimmt ein Argument entgegen und erhält den aktuellen Zustand des vsync-Pins nach dessen Änderung.Gibt den registrierten Callback zurück, wenn ohne Argumente aufgerufen. Übergib einen beliebigen nicht aufrufbaren Wert, um den Callback zu löschen.
- frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None¶
Registriert den Callback
cb, der (im Interrupt-Kontext) ausgeführt wird, sobald das Kameramodul ein neues Einzelbild erzeugt und das Einzelbild bereit ist, überCSI.snapshotgelesen zu werden.cbnimmt keine Argumente entgegen. Verwende dies, um das spätere Lesen eines Einzelbilds mitmicropython.schedule()einzuplanen.Gibt den registrierten Callback zurück, wenn ohne Argumente aufgerufen. Übergib einen beliebigen nicht aufrufbaren Wert, um den Callback zu löschen.
- ioctl(request: int, *args) Any¶
Führt eine sensorspezifische Anforderung aus.
requestist eine derIOCTL_*-Konstanten; die übrigen Positionsargumente und der Rückgabewert hängen von der Anforderung ab. Die unterstützten Anforderungen sind unten nach Sensorfamilie gruppiert.Generisch (jeder Sensor):
ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))Setzt das Auslesefenster des Sensors. Ein kleineres Fenster erhöht die Bildrate auf Kosten des Sichtfelds.
ioctl(IOCTL_GET_READOUT_WINDOW)Gibt das aktuelle Auslesefenster als
(x, y, w, h)-Tupel zurück.ioctl(IOCTL_SET_TRIGGERED_MODE, enable)Aktiviert (
True) oder deaktiviert (False) den getriggerten Modus auf der MT9V034.ioctl(IOCTL_GET_TRIGGERED_MODE)Gibt den aktuellen Zustand des getriggerten Modus als
boolzurück.ioctl(IOCTL_SET_FOV_WIDE, enable)Bei
Trueweist esframesize()an, auf das Sichtfeld statt auf die Bildrate zu optimieren.ioctl(IOCTL_GET_FOV_WIDE)Gibt den aktuellen FOV-Wide-Zustand als
boolzurück.ioctl(IOCTL_SET_NIGHT_MODE, enable)Aktiviert (
True) oder deaktiviert (False) den Schwachlicht-„Nachtmodus“ des Sensors. Nur OV7725 und OV5640.ioctl(IOCTL_GET_NIGHT_MODE)Gibt den aktuellen Nachtmodus-Zustand als
boolzurück.ioctl(IOCTL_GET_RGB_STATS)Gibt ein 4-Tupel roher RGB-Kanal-Statistiken
(r, gb, gr, b)zurück, die vom Sensor gelesen wurden (typischerweise zur Abstimmung des Weißabgleichs verwendet).
OV5640 FPC – Autofokus:
ioctl(IOCTL_TRIGGER_AUTO_FOCUS)Startet einen Autofokus-Durchlauf am OV5640-FPC-Modul.
ioctl(IOCTL_PAUSE_AUTO_FOCUS)Pausiert einen laufenden Autofokus-Durchlauf.
ioctl(IOCTL_RESET_AUTO_FOCUS)Setzt die Autofokus-Position auf den Standardwert zurück.
ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)Blockiert, bis der aktuelle Autofokus-Durchlauf abgeschlossen ist.
timeout_msist standardmäßig 5000, falls weggelassen.
FLIR Lepton:
ioctl(IOCTL_LEPTON_GET_WIDTH)Gibt die Breite des Lepton-Bildes in Pixeln zurück.
ioctl(IOCTL_LEPTON_GET_HEIGHT)Gibt die Höhe des Lepton-Bildes in Pixeln zurück.
ioctl(IOCTL_LEPTON_GET_RADIOMETRY)Gibt den Typ des Lepton (radiometrisch oder nicht) als int zurück.
ioctl(IOCTL_LEPTON_GET_REFRESH)Gibt die Bildwiederholrate des Lepton in Hz zurück.
ioctl(IOCTL_LEPTON_GET_RESOLUTION)Gibt die ADC-Auflösung des Lepton in Bits zurück.
ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)Führt einen FLIR-Lepton-SDK-Befehl aus.
cmdist die vom SDK definierte 16-Bit-Befehls-ID.ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)Schreibt ein Lepton-SDK-Attribut.
attr_idist die 16-Bit-Attribut-ID;payloadist einbytes/bytearray, dessen Länge ein Vielfaches von 16 Bit sein muss.ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)Liest ein Lepton-SDK-Attribut.
attr_idist die 16-Bit-Attribut-ID;wordsist die Anzahl der zu lesenden 16-Bit-Wörter. Gibt einbytearrayzurück.ioctl(IOCTL_LEPTON_GET_FPA_TEMP)Gibt die Temperatur der Fokalebenenmatrix (focal-plane-array) des Lepton in Grad Celsius zurück.
ioctl(IOCTL_LEPTON_GET_AUX_TEMP)Gibt die Hilfstemperatur des Lepton in Grad Celsius zurück.
ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)Schaltet das Lepton zwischen AGC- und direkter Temperaturausgabe um.
measurement_enabled=Trueaktiviert die direkte Temperaturausgabe. Das optionale Flaghigh_temp_enabledwählt den Hochtemperaturbereich.ioctl(IOCTL_LEPTON_GET_MODE)Gibt ein 2-Tupel
(measurement_enabled, high_temp_enabled)zurück.ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))Setzt den auf
0..255abgebildeten Temperaturbereich, wenn der Messmodus aktiviert ist.ioctl(IOCTL_LEPTON_GET_RANGE)Gibt den aktuellen
(min_celsius, max_celsius)-Bereich zurück.
Himax HM01B0 – Bewegungserkennung:
ioctl(IOCTL_HIMAX_MD_ENABLE, enable)Aktiviert (
True) oder deaktiviert (False) den sensorinternen Bewegungserkennungsblock der HM01B0.ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))Setzt das Bewegungserkennungsfenster auf der HM01B0.
ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)Setzt den Schwellenwert der Bewegungserkennung (
0–255).ioctl(IOCTL_HIMAX_MD_CLEAR)Löscht den Interrupt-Latch der Bewegungserkennung.
ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)Aktiviert (
True) oder deaktiviert (False) den internen Oszillator der HM01B0.
Prophesee GENX320 – Ereignissensor:
ioctl(IOCTL_GENX320_SET_BIASES, preset)Wendet ein Bias-Preset an.
presetist eine derGENX320_BIASES_*-Konstanten.ioctl(IOCTL_GENX320_SET_BIAS, bias, value)Setzt einen einzelnen Bias.
biasist eine derGENX320_BIAS_*-Konstanten;valueist die ganzzahlige Einstellung.ioctl(IOCTL_GENX320_SET_AFK, enable)ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)Konfiguriert den Anti-Flicker-Filter.
enableist ein bool; die optionalen Frequenzargumente legen das Durchlassband des Filters fest.ioctl(IOCTL_GENX320_SET_STC, mode)ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])Konfiguriert den raumzeitlichen Kontrastfilter (spatio-temporal contrast).
modeist eine derGENX320_STC_*-Konstanten; bis zu zwei weitere Argumente sind modusspezifisch.ioctl(IOCTL_GENX320_SET_MODE, mode)ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)Schaltet den Sensor zwischen Frame- und Ereignismodus um.
modeist eine derGENX320_MODE_*-Konstanten. Für den Ereignismodus istevt_resdie Zeilenachsen-Länge des Ereignispuffers, der anIOCTL_GENX320_READ_EVENTSübergeben wird.ioctl(IOCTL_GENX320_READ_EVENTS, buf)Liest Ereignisse in
buf, einuint16-ndarrayder Form(EVT_res, 6), wobeiEVT_reseine Zweierpotenz zwischen 1024 und 65536 ist. Die Spalten sind:[0]– Ereignistyp (PIX_OFF_EVENT/PIX_ON_EVENT/ Trigger).[1]– Sekunden.[2]– Millisekunden.[3]– Mikrosekunden.[4]–x-Koordinate.[5]–y-Koordinate.
Gibt die Anzahl der geschriebenen Ereignisse zurück.
ioctl(IOCTL_GENX320_READ_EVENTS_RAW)Gibt ein
image.Imagezurück, das das rohe Ereignis-Einzelbild der GENX320 enthält.ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)Schaltet Pixel ab, deren Rauschen mehr als
sigmaStandardabweichungen von der Normalverteilung abweicht.iterationsist die ganzzahlige Anzahl der Kalibrierungsdurchläufe. Gibt die Anzahl der deaktivierten Pixel zurück.
- color_palette(palette: int | None = None) int | None¶
Setzt die zu verwendende Farbpalette für Dinge wie die Graustufen-zu-RGB565-Umwandlung des FLIR Lepton oder die Visualisierung von GENX320-Ereignissen. Eine von
image.PALETTE_RAINBOW,image.PALETTE_IRONBOWund (sofern unterstützt)image.PALETTE_DEPTH,image.PALETTE_EVT_DARKoderimage.PALETTE_EVT_LIGHT.Gibt die aktuelle Einstellung zurück, wenn ohne Argumente aufgerufen.
Funktionen¶
Konstanten¶
- csi.BINARY: int¶
BINARY-Pixelformat (Bitmap). Jeder Pixel ist 1-Bit. Nützlich für die Maskenspeicherung; kann mit
image.Image()verwendet werden.
- csi.YUV422: int¶
YUV422-Pixelformat. Jeder Pixel wird als 8-Bit-Graustufen-Y-Wert gespeichert, gefolgt von abwechselnden 8-Bit-U/V-Farbwerten, die sich zwei Y-Werte teilen (Y1, U, Y2, V, …). Nur einige Bildverarbeitungsmethoden funktionieren mit YUV422.
- csi.JPEG: int¶
JPEG-Modus. Das Kameramodul gibt komprimierte JPEG-Bilder aus. Verwende
CSI.quality, um die JPEG-Qualität zu steuern. Funktioniert nur für die Kameras OV2640/OV5640.
- csi.NORMAL: int¶
Normalmodus für
CSI.special_effect.
- csi.NEGATIVE: int¶
Negativmodus für
CSI.special_effect.
- csi.SXGA: int¶
1280x1024-Auflösung für den Kamerasensor. Funktioniert nur für die Kameras OV2640/OV5640.
- csi.UXGA: int¶
1600x1200-Auflösung für den Kamerasensor. Funktioniert nur für die Kameras OV2640/OV5640.
- csi.IOCTL_GET_TRIGGERED_MODE: int¶
Liest den Zustand des getriggerten Modus für die MT9V034 aus. Siehe
CSI.ioctl.
- csi.IOCTL_SET_FOV_WIDE: int¶
Aktiviert für
CSI.framesizedie Optimierung auf das Sichtfeld statt auf FPS. SieheCSI.ioctl.
- csi.IOCTL_GET_FOV_WIDE: int¶
Gibt zurück, ob
CSI.framesizeauf das Sichtfeld statt auf FPS optimiert. SieheCSI.ioctl.
- csi.IOCTL_TRIGGER_AUTO_FOCUS: int¶
Löst den Autofokus am OV5640-FPC-Kameramodul aus. Siehe
CSI.ioctl.
- csi.IOCTL_PAUSE_AUTO_FOCUS: int¶
Pausiert den Autofokus (während er läuft) für das OV5640-FPC-Kameramodul. Siehe
CSI.ioctl.
- csi.IOCTL_RESET_AUTO_FOCUS: int¶
Setzt den Autofokus für das OV5640-FPC-Kameramodul auf den Standardwert zurück. Siehe
CSI.ioctl.
- csi.IOCTL_WAIT_ON_AUTO_FOCUS: int¶
Wartet, bis der Autofokus am OV5640-FPC-Kameramodul abgeschlossen ist. Siehe
CSI.ioctl.
- csi.IOCTL_SET_NIGHT_MODE: int¶
Schaltet den Nachtmodus ein oder aus. Reduziert die Bildrate, um die Belichtung dynamisch zu erhöhen. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_WIDTH: int¶
Gibt die Breite der Bildauflösung des FLIR Lepton in Pixeln zurück. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_HEIGHT: int¶
Gibt die Höhe der Bildauflösung des FLIR Lepton in Pixeln zurück. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RADIOMETRY: int¶
Gibt den Typ des FLIR Lepton (radiometrisch oder nicht) zurück. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_REFRESH: int¶
Gibt die Bildwiederholrate des FLIR Lepton in Hz zurück. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RESOLUTION: int¶
Gibt die ADC-Auflösung des FLIR Lepton in Bits zurück. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_RUN_COMMAND: int¶
Führt einen 16-Bit-Befehl aus dem FLIR-Lepton-SDK aus. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_ATTRIBUTE: int¶
Setzt ein FLIR-Lepton-Attribut aus dem FLIR-Lepton-SDK. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_ATTRIBUTE: int¶
Liest ein FLIR-Lepton-Attribut aus dem FLIR-Lepton-SDK. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_FPA_TEMP: int¶
Liest die FPA-Temperatur des FLIR Lepton in Celsius aus. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_AUX_TEMP: int¶
Liest die AUX-Temperatur des FLIR Lepton in Celsius aus. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_MODE: int¶
Versetzt den FLIR-Lepton-Treiber in einen Modus, in dem jeder Pixel ein Temperaturwert ist. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_MODE: int¶
Gibt zurück, ob der Messmodus für den FLIR-Lepton-Sensor aktiviert ist. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_RANGE: int¶
Setzt den auf Pixelwerte abgebildeten Temperaturbereich im Messmodus. Siehe
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RANGE: int¶
Gibt den für den Messmodus verwendeten Temperaturbereich zurück. Siehe
CSI.ioctl.
- csi.IOCTL_HIMAX_MD_ENABLE: int¶
Steuert den Bewegungserkennungs-Interrupt auf der HM01B0. Siehe
CSI.ioctl.
- csi.IOCTL_HIMAX_MD_WINDOW: int¶
Setzt das Bewegungserkennungsfenster auf der HM01B0. Siehe
CSI.ioctl.
- csi.IOCTL_HIMAX_MD_THRESHOLD: int¶
Setzt den Schwellenwert der Bewegungserkennung auf der HM01B0. Siehe
CSI.ioctl.
- csi.IOCTL_HIMAX_MD_CLEAR: int¶
Löscht den Bewegungserkennungs-Interrupt auf der HM01B0. Siehe
CSI.ioctl.
- csi.IOCTL_GENX320_SET_BIASES: int¶
Setzt die Biases des GENX320-Sensors auf eines der
GENX320_BIASES_*-Presets. SieheCSI.ioctl. NachCSI.resetwendet der Treibercsi.GENX320_BIASES_LOW_NOISEan, nichtcsi.GENX320_BIASES_DEFAULT— verwende dieses ioctl, um auf ein anderes Preset umzuschalten, wenn die Anwendung mehr Empfindlichkeit oder Bandbreite benötigt.
- csi.GENX320_BIASES_DEFAULT: int¶
GenX320-Datenblatt-Standardwerte — ausgewogene Empfindlichkeit, Rauschen und Bandbreite für allgemeine Szenen.
- csi.GENX320_BIASES_LOW_LIGHT: int¶
Abgestimmt auf Schwachlichtbedingungen — beide Kontrast-Schwellenwerte gelockert für höhere Empfindlichkeit, FO abgesenkt, HPF deaktiviert, sodass auch langsame Helligkeitsänderungen noch registriert werden.
- csi.GENX320_BIASES_ACTIVE_MARKER: int¶
Abgestimmt auf das Verfolgen kontrastreicher blinkender LEDs (aktive Marker) — Kontrast-Schwellenwerte angehoben, sodass nur scharfe Übergänge auslösen, FO und HPF hoch gedreht, um die Bandbreite zu maximieren und langsame Umgebungsdrift zu unterdrücken, REFR=0, sodass jede Blinkflanke erfasst wird.
- csi.GENX320_BIASES_LOW_NOISE: int¶
Treiber-Standardwert — geringere Empfindlichkeit als
DEFAULT(angehobene Kontrast-Schwellenwerte) und ein niedrigeres FO für weniger durch Hintergrundrauschen verursachte Aktivität. Am besten für statische oder langsame Szenen, in denen Falschereignisse überwiegen würden.
- csi.GENX320_BIASES_HIGH_SPEED: int¶
Abgestimmt auf Szenen mit schneller Bewegung — höheres FO für eine breitere Pixelbandbreite, höherer HPF zur Unterdrückung langsamer Änderungen, höherer REFR für eine längere Totzeit nach jedem Ereignis, damit das Auslesen nicht in Sättigung gerät.
- csi.IOCTL_GENX320_SET_BIAS: int¶
Setzt einen einzelnen GENX320-Sensor-Bias auf einen DAC-Wert. Übergib eine
GENX320_BIAS_*-Konstante (csi.GENX320_BIAS_DIFF_OFF,csi.GENX320_BIAS_DIFF_ON,csi.GENX320_BIAS_FO,csi.GENX320_BIAS_HPFodercsi.GENX320_BIAS_REFR) und einen ganzzahligen DAC-Wert. Jeder Bias ist unabhängig — rufe dieses ioctl wiederholt auf, um nach dem Anwenden eines Presets nur die benötigten Biases anzupassen. SieheCSI.ioctl.
- csi.GENX320_BIAS_DIFF_OFF: int¶
Negativer Komparator-Kontrast-Schwellenwert — steuert, wie stark sich ein Pixel verdunkeln muss, bevor ein
csi.PIX_OFF_EVENTausgelöst wird. Niedrigerer Wert = empfindlicher (mehr Ereignisse).
- csi.GENX320_BIAS_DIFF_ON: int¶
Positiver Komparator-Kontrast-Schwellenwert — steuert, wie stark sich ein Pixel aufhellen muss, bevor ein
csi.PIX_ON_EVENTausgelöst wird. Niedrigerer Wert = empfindlicher (mehr Ereignisse).
- csi.GENX320_BIAS_FO: int¶
Pixel-Tiefpass-Grenzfrequenz — wägt die Pixelbandbreite (Geschwindigkeit/Latenz) gegen die durch Hintergrundrauschen verursachte Aktivität ab. Höherer Wert = schnellere Pixelreaktion, mehr Rauschen.
- csi.GENX320_BIAS_HPF: int¶
Pixel-Hochpass-Grenzfrequenz — unterdrückt langsame Helligkeitsänderungen. Höherer Wert = langsamere Änderungen werden herausgefiltert (nur schnelle Übergänge registrieren).
- csi.GENX320_BIAS_REFR: int¶
Pixel-Refraktärzeit — Totzeit, nachdem ein Pixel ein Ereignis abgegeben hat, während der es nicht erneut auslösen kann. Höherer Wert = längere Totzeit, weniger Ereignisse von einem stark beschäftigten Pixel.
- csi.IOCTL_GENX320_SET_AFK: int¶
Setzt den Anti-Flicker-Filter (AFK) der GENX320, der Ereignisse von Pixeln unterdrückt, die mit einem periodischen Frequenzband umschalten (Leuchtstoffbeleuchtung, LED-getriebene Displays usw.). Übergib
enable(1 zum Aktivieren, 0 zum Deaktivieren) und beim Aktivieren die Bandgrenzen in Hertz:(enable, freq_low_hz, freq_high_hz). SieheCSI.ioctl.
- csi.IOCTL_GENX320_SET_STC: int¶
Setzt den Modus des raumzeitlichen Kontrastfilters (STC, spatio-temporal contrast) der GENX320. Übergib eine
GENX320_STC_*-Konstante (csi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLY,csi.GENX320_STC_TRAIL), gefolgt von dem bzw. den Schwellenwerten, die der Modus erfordert (in Millisekunden). SieheCSI.ioctl.
- csi.GENX320_STC_DISABLE: int¶
Deaktiviert den STC-/Trail-Filter der GENX320 — jedes Ereignis wird durchgelassen.
- csi.GENX320_STC_ONLY: int¶
Behält das zweite Ereignis eines Bursts; verwirft das erste Ereignis und alle späteren Ereignisse. Nimmt einen Parameter entgegen,
stc_thresholdin Millisekunden — Ereignisse, die innerhalb dieses Fensters eines vorherigen Ereignisses auf demselben Pixel liegen, werden als Teil desselben Bursts betrachtet.
- csi.GENX320_STC_TRAIL_ONLY: int¶
Behält das erste Ereignis eines Bursts; verwirft nachfolgende Ereignisse auf demselben Pixel, bis
trail_thresholdverstrichen ist. Nimmt einen Parameter entgegen,trail_thresholdin Millisekunden.
- csi.GENX320_STC_TRAIL: int¶
Behält das erste Ereignis eines Bursts plus nachfolgende Flanken — kombiniert
csi.GENX320_STC_ONLYundcsi.GENX320_STC_TRAIL_ONLY. Nimmt zwei Parameter entgegen,stc_thresholdundtrail_threshold(beide ms); der Sensor verlangt, dass die beiden ungefähr in einem Verhältnis von 13:1 bleiben.
- csi.IOCTL_GENX320_SET_MODE: int¶
Setzt den Betriebsmodus der GENX320. Übergib
csi.GENX320_MODE_HISTOfür das On-Chip-Ereignishistogramm (die Kamera verhält sich wie eine normale Graustufenkamera mit der konfigurierten Bildrate) odercsi.GENX320_MODE_EVENT, gefolgt von der Zeilenachsen-Länge des Ereignis-ndarray(eine Zweierpotenz zwischen 1024 und 65536) für das rohe Ereignis-Streaming. SieheCSI.ioctl.
- csi.GENX320_MODE_HISTO: int¶
Histogramm-Modus — Ereignisse werden On-Chip in Bins pro Pixel akkumuliert und als 320x320-Graustufen-Einzelbild mit der konfigurierten Rate (~20-350 FPS) gemeldet. Die Kamera sieht aus wie eine normale Kamera, sodass alle gängigen Bildverarbeitungsroutinen direkt funktionieren.
- csi.GENX320_MODE_EVENT: int¶
Ereignismodus — umgeht das On-Chip-Histogramm und streamt rohe Ereignisse mit Mikrosekunden-Zeitstempeln in ein numpy-
ndarray, für Anwendungen, die das volle zeitliche Detail statt eines vorgebinnten Einzelbilds benötigen.
- csi.IOCTL_GENX320_READ_EVENTS: int¶
Liest rohe Ereignisse in ein uint16-
ndarrayder Form(EVT_res, 6)(wobeiEVT_resder ancsi.IOCTL_GENX320_SET_MODEübergebenen Puffergröße entspricht). Die Spalten sind[0]Ereignistyp (csi.PIX_OFF_EVENT,csi.PIX_ON_EVENT,csi.EXT_TRIGGER_RISING/FALLING,csi.RST_TRIGGER_RISING/FALLING),[1]Sekunden-Zeitstempel,[2]Millisekunden,[3]Mikrosekunden,[4]X-Koordinate (0-319),[5]Y-Koordinate (0-319). Gibt die Anzahl der in den Puffer geschriebenen Ereignisse zurück und lässt ältere Zeilen über diese Anzahl hinaus unberührt. SieheCSI.ioctl.
- csi.IOCTL_GENX320_CALIBRATE: int¶
Deaktiviert automatisch heiße Pixel — Pixel, die selbst bei einer statischen Szene fälschlicherweise auslösen. Der Treiber erstellt eine 320x320-Trefferzählung pro Pixel, berechnet Mittelwert und Standardabweichung und deaktiviert jeden Pixel, dessen Zählung
mean + sigma * stddevüberschreitet. Übergib ein Ereignis-Zählungsbudget (Ereignisse, die vor dem Berechnen der Statistiken gezählt werden — höher = zuverlässigere Schätzung, langsamer; ~10000 ist ein guter Standardwert) und einen sigma-Float (niedriger = aggressiver, ~0.5 Standardwert). Gibt die Anzahl der deaktivierten Pixel zurück. Richte die Kamera zuerst auf eine statische Szene, damit bewegungsgetriebene Ereignisse nicht gegen Pixel gezählt werden, die eigentlich in Ordnung sind. SieheCSI.ioctl.
- csi.IOCTL_GENX320_READ_EVENTS_RAW: int¶
Gibt ein rohes Ereignis-Einzelbild als
image.Imagevon der GENX320 zurück, wobei die Ereignisse noch in der nativen gepackten Codierung des Chips vorliegen — nützlich, wenn du den Rohstream zur Offline-Decodierung an einen PC weiterleiten möchtest, anstatt ihn auf der Kamera zu verarbeiten. SieheCSI.ioctl.
- csi.PIX_OFF_EVENT: int¶
GENX320-Ereignistyp (Spalte
[0]) — ein Pixel hat eine Helligkeitsabnahme erkannt (der negative Kontrast-Schwellenwert wurde überschritten). Die Spalten[4]/[5]enthalten X/Y des Pixels.
- csi.PIX_ON_EVENT: int¶
GENX320-Ereignistyp (Spalte
[0]) — ein Pixel hat eine Helligkeitszunahme erkannt (der positive Kontrast-Schwellenwert wurde überschritten). Die Spalten[4]/[5]enthalten X/Y des Pixels.
- csi.RST_TRIGGER_RISING: int¶
GENX320-Ereignistyp (Spalte
[0]) — Pixel-Reset-Trigger, steigende Flanke. X/Y werden nicht verwendet. Wird derzeit von der Firmware nicht erzeugt.
- csi.RST_TRIGGER_FALLING: int¶
GENX320-Ereignistyp (Spalte
[0]) — Pixel-Reset-Trigger, fallende Flanke. X/Y werden nicht verwendet. Wird derzeit von der Firmware nicht erzeugt.
- csi.EXT_TRIGGER_RISING: int¶
GENX320-Ereignistyp (Spalte
[0]) — der externe Trigger-Pin des Sensors hat eine steigende Flanke gesehen. Der externe Trigger-Eingang der GENX320 ist mit der Frame-Sync-Leitung der Kamera verdrahtet, die auch zu P10 am Prozessor und zur Stiftleiste geführt wird. X/Y werden nicht verwendet.
- csi.EXT_TRIGGER_FALLING: int¶
GENX320-Ereignistyp (Spalte
[0]) — der externe Trigger-Pin des Sensors hat eine fallende Flanke gesehen. Der externe Trigger-Eingang der GENX320 ist mit der Frame-Sync-Leitung der Kamera verdrahtet, die auch zu P10 am Prozessor und zur Stiftleiste geführt wird. X/Y werden nicht verwendet.