csi — sensori camera

Il modulo csi è l’interfaccia moderna e orientata agli oggetti ai sensori camera di una OpenMV Cam. Ogni sensore fisico è rappresentato da un’istanza CSI, quindi le schede imager multispettrali che abbinano un sensore a colori a un sensore termico o a eventi possono pilotarli in modo indipendente passando un cid diverso al costruttore. Le cam con un singolo sensore istanziano semplicemente una sola CSI.

Un oggetto CSI possiede l’intera configurazione del sensore – formato dei pixel, framesize / finestra, esposizione / guadagno / bilanciamento del bianco, mirror e flip hardware, pattern di test a barre di colore, clock del frame rate, ROI per l’esposizione automatica e comandi ioctl specifici del chip. I frame vengono catturati con CSI.snapshot(), che restituisce un image.Image basato sul frame buffer.

Questo modulo sostituisce il vecchio modulo sensor (che esponeva le stesse funzionalità come funzioni a livello di modulo legate a un singolo sensore nascosto). Il codice nuovo dovrebbe usare CSI.

Esempio di utilizzo:

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()

Utilizzo con asyncio

Il ciclo bloccante CSI.snapshot() mostrato sopra non coopera con l’event loop di asyncio – mentre snapshot è in attesa del frame successivo, ogni altra coroutine del programma è congelata. Per far convivere un ciclo di cattura con altro lavoro concorrente (un client UART, un osservatore di pulsanti, un task di rete) avvolgi CSI in un piccolo adattatore che trasforma snapshot in una coroutine compatibile con await, eseguendo il polling di snapshot(blocking=False) e cedendo il controllo all’event loop tra un controllo e l’altro:

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__ inoltra ogni altro attributo (reset, pixformat, framesize, le manopole del sensore) alla CSI sottostante, così il wrapper è un sostituto drop-in. La prima chiamata non bloccante avvia anche la cattura DMA della camera se non era già in esecuzione, quindi non serve alcun bootstrap aggiuntivo.

Un ciclo di cattura si inserisce quindi in un programma asyncio più grande come una coroutine qualsiasi:

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())

L’impostazione framebuffers conta ancora in questa forma – la modalità a buffer singolo fa restituire None a snapshot(blocking=False) finché il frame successivo non viene catturato, mentre il double o triple buffering attenua questo effetto, così il wrapper di solito trova un frame bufferizzato in attesa al primo polling. Vedi il capstone AsyncCSI sul tutorial di asyncio per la spiegazione completa.

classe CSI – Camera Sensor Interface

La classe CSI viene usata per controllare un sensore camera.

class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)

Crea un oggetto per comunicare con un sensore camera. Sulle schede con più sensori, è possibile selezionare il particolare oggetto CSI passando un cid come csi.LEPTON per selezionare un modulo sensore FLIR Lepton. Se cid è -1 viene selezionato il sensore primario (in genere un modulo camera a colori sulle schede multi-sensore).

Se delays è False allora tutti i ritardi di assestamento nel driver csi sono disabilitati. Per impostazione predefinita il driver del sensore introduce un ritardo dopo il reset / cambio di modalità per evitare che CSI.snapshot restituisca frame corrotti. Disabilitare i ritardi permette di raggruppare gli aggiornamenti e applicare un singolo ritardo alla fine prima di chiamare CSI.snapshot.

Se fflush è False allora lo svuotamento automatico del framebuffer menzionato in CSI.framebuffers è disabilitato. Questo rimuove ogni limite di tempo sui frame nella fifo del frame buffer.

stream seleziona se questa CSI è la sorgente di stream inviata all’IDE. Se None (predefinito) la CSI diventa la sorgente di stream solo se è il sensore primario (non ausiliario). Passa True per forzare questa CSI a essere la sorgente di stream, oppure un valore falso qualsiasi per lasciare invariata la sorgente di stream esistente.

Metodi

reset(hard: bool = True) None

Inizializza il sensore camera. Esegue un reset hardware commutando il GPIO del segnale RESET verso il modulo camera se hard è True. hard dovrebbe essere impostato a false quando si resettano sensori camera ausiliari che condividono lo stesso GPIO del segnale RESET con il modulo primario.

shutdown(enable: bool) None

Mette la camera in una modalità a consumo inferiore rispetto allo sleep (ma la camera deve essere resettata al risveglio).

sleep(enable: bool) None

Mette la camera in sleep se enable è True. Altrimenti, la risveglia.

flush() None

Copia il contenuto del frame buffer corrente nell’anteprima dell’IDE. Chiama questo metodo dopo l’ultimo CSI.snapshot se lo script termina, così l’IDE mostra l’ultimo frame.

snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None

Scatta una foto usando la camera e restituisce un oggetto image.Image.

Se viene passato time e/o frames, snapshot si blocca per quei time millisecondi e/o frames catturati dalla camera. Entrambi gli argomenti possono essere usati contemporaneamente. Una volta trascorso time e/o frames, snapshot restituirà None.

blocking può essere False per abilitare il comportamento non bloccante, che farà restituire None a snapshot quando l’immagine successiva dalla camera non è pronta invece di attendere.

image può essere un altro oggetto image.Image da aggiornare con la nuova immagine catturata dalla camera invece di restituire un nuovo oggetto image.Image. Il contenuto dell’immagine precedente viene sovrascritto tramite una copia profonda.

Se CSI.auto_rotation è abilitato questo metodo restituirà un image.Image già ruotato.

width() int

Restituisce la larghezza della risoluzione del sensore.

height() int

Restituisce l’altezza della risoluzione del sensore.

cid() int

Restituisce l’ID del chip del modulo camera. Confrontalo con uno tra 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.FROGEYE2020 o csi.SOFTCSI.

readable() bool

Restituisce True se c’è un’immagine pronta per essere restituita da CSI.snapshot, così una chiamata a snapshot non si bloccherà.

pixformat(pixformat: int | None = None) int | None

Imposta il formato dei pixel del modulo camera a uno tra csi.GRAYSCALE, csi.RGB565, csi.BAYER, csi.YUV422 o csi.JPEG (solo sull’OV2640/OV5640).

Restituisce il pixformat corrente se chiamato senza argomenti.

framesize(framesize: int | Tuple[int, int] | None = None) int | None

Imposta il frame size del modulo camera a una delle costanti di dimensione (es. csi.QVGA, csi.VGA, csi.HD, ecc. — vedi la sezione delle costanti).

In alternativa, puoi passare un framesize personalizzato come tupla (w, h). Quando viene chiamato CSI.snapshot il framesize personalizzato verrà valutato rispetto alle regole DMA. In generale i framesize devono essere un multiplo di 8 pixel e/o 16 byte.

Restituisce il framesize corrente se chiamato senza argomenti.

framerate(rate: int | None = None) int | None

Imposta il frame rate in Hz del modulo camera.

Restituisce il framerate corrente se chiamato senza argomenti.

Nota

CSI.framerate funziona scartando i frame ricevuti dal modulo camera per mantenere il frame rate pari o inferiore alla frequenza specificata. Per impostazione predefinita la camera funzionerà al massimo frame rate. Se implementato per il particolare sensore camera, CSI.framerate ridurrà anche internamente il frame rate del sensore camera per risparmiare energia e migliorare la qualità dell’immagine aumentando l’esposizione del sensore. CSI.framerate può entrare in conflitto con CSI.auto_exposure su alcune camere.

window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None

Imposta la risoluzione della camera a una sotto-regione della risoluzione corrente. roi è una tupla (x, y, w, h). Puoi anche passare (w, h) e la finestra verrà centrata.

Restituisce la tupla (x, y, w, h) corrente se chiamato senza argomenti.

gainceiling(gainceiling: int) bool

Imposta il gainceiling dell’immagine della camera a uno tra 2, 4, 8, 16, 32, 64 o 128.

Restituisce True in caso di successo e False in caso di fallimento.

brightness(brightness: int) bool

Imposta la luminosità dell’immagine della camera.

Restituisce True in caso di successo e False in caso di fallimento.

contrast(contrast: int) bool

Imposta il contrasto dell’immagine della camera.

Restituisce True in caso di successo e False in caso di fallimento.

saturation(saturation: int) bool

Imposta la saturazione dell’immagine della camera.

Restituisce True in caso di successo e False in caso di fallimento.

quality(quality: int) bool

Imposta la qualità di compressione JPEG dell’immagine della camera. Da 0 a 100.

Restituisce True in caso di successo e False in caso di fallimento.

Nota

Solo per le camere OV2640/OV5640.

colorbar(enable: bool) bool

Attiva (True) o disattiva (False) la modalità a barre di colore. Per impostazione predefinita è disattivata.

Restituisce True in caso di successo e False in caso di fallimento.

auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None

enable attiva (True) o disattiva (False) il controllo automatico del guadagno. La camera si avvia con il controllo automatico del guadagno attivo.

Se enable è False puoi impostare un guadagno fisso in decibel con gain_db.

Se enable è True puoi impostare il limite massimo di guadagno in decibel con gain_db_ceiling per l’algoritmo di controllo automatico del guadagno.

Nota

Devi disattivare anche il bilanciamento del bianco se vuoi tracciare i colori.

gain_db() float

Restituisce il valore di guadagno corrente della camera in decibel.

auto_exposure(enable: bool, exposure_us: int = -1) None

enable attiva (True) o disattiva (False) il controllo automatico dell’esposizione. La camera si avvia con il controllo automatico dell’esposizione attivo.

Se enable è False puoi impostare un tempo di esposizione fisso in microsecondi con exposure_us.

Nota

Gli algoritmi di esposizione automatica della camera sono piuttosto conservativi riguardo a quanto modificano il valore di esposizione e in genere evitano di cambiarlo di molto. Modificano invece molto il valore di guadagno per gestire le variazioni di illuminazione.

exposure_us() int

Restituisce il valore di esposizione corrente della camera in microsecondi.

auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None

enable attiva (True) o disattiva (False) il bilanciamento automatico del bianco. La camera si avvia con il bilanciamento automatico del bianco attivo.

Se enable è False puoi impostare un guadagno fisso in decibel per i canali rosso, verde e blu rispettivamente con rgb_gain_db.

Nota

Devi disattivare anche il controllo del guadagno se vuoi tracciare i colori.

rgb_gain_db() Tuple[float, float, float]

Restituisce una tupla (r, g, b) dei valori correnti di guadagno rosso, verde e blu della camera in decibel.

auto_blc(enable: bool, regs: List[int] | None = None) None

Imposta la calibrazione automatica del livello di nero (BLC) sulla camera.

enable passa True o False per attivare o disattivare il BLC. In genere lo si vuole sempre attivo.

regs se disabilitato, puoi impostare manualmente i valori dei registri BLC da una precedente chiamata a CSI.blc_regs.

blc_regs() List[int]

Restituisce i registri BLC del sensore come una lista di interi. Da usare con CSI.auto_blc.

hmirror(enable: bool | None = None) bool | None

Attiva (True) o disattiva (False) la modalità mirror orizzontale. Per impostazione predefinita è disattivata.

Restituisce l’impostazione corrente se chiamato senza argomenti.

vflip(enable: bool | None = None) bool | None

Attiva (True) o disattiva (False) la modalità flip verticale. Per impostazione predefinita è disattivata.

Restituisce l’impostazione corrente se chiamato senza argomenti.

transpose(enable: bool | None = None) bool | None

Attiva (True) o disattiva (False) la modalità transpose. Per impostazione predefinita è disattivata.

  • vflip=False, hmirror=False, transpose=False -> rotazione di 0 gradi

  • vflip=True, hmirror=False, transpose=True -> rotazione di 90 gradi

  • vflip=True, hmirror=True, transpose=False -> rotazione di 180 gradi

  • vflip=False, hmirror=True, transpose=True -> rotazione di 270 gradi

Restituisce l’impostazione corrente se chiamato senza argomenti.

auto_rotation(enable: bool | None = None) bool | None

Attiva (True) o disattiva (False) la modalità di rotazione automatica. Per impostazione predefinita è disattivata.

Restituisce l’impostazione corrente se chiamato senza argomenti.

Nota

Questo metodo funziona solo quando la OpenMV Cam ha un imu installato e viene abilitato automaticamente.

framebuffers(count: int | None = None) int | None

Imposta il numero di frame buffer usati per ricevere i dati dell’immagine. Per impostazione predefinita la OpenMV Cam tenterà di allocare il numero massimo di frame buffer possibile. La riallocazione avviene ogni volta che vengono chiamati CSI.pixformat, CSI.framesize o CSI.window.

Un count pari a 1 (buffer singolo), 2 (double buffer) o 3 (triple buffer) seleziona la corrispondente modalità di cattura. Passa 4 o più per mettere il driver in modalità video FIFO, dove count buffer vengono accodati — utile per la registrazione video su scheda SD. In caso di perdita di frame, tutti i frame buffer tranne quello attivo vengono svuotati, così CSI.snapshot restituisce sempre un frame recente.

Restituisce il count corrente se chiamato senza argomenti.

special_effect(effect: int) bool

Imposta l’effetto digitale speciale (uno tra csi.NORMAL o csi.NEGATIVE).

Restituisce True in caso di successo e False in caso di fallimento.

lens_correction(enable: bool, radi: int, coef: int) bool

enable True per abilitare, False per disabilitare. radi raggio intero dei pixel da correggere. coef potenza della correzione.

Restituisce True in caso di successo e False in caso di fallimento.

vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None

Registra la callback cb da eseguire (in contesto di interrupt) ogni volta che il modulo camera genera un nuovo frame (ma prima che il frame venga ricevuto).

cb accetta un argomento e riceve lo stato corrente del pin vsync dopo il cambiamento.

Restituisce la callback registrata se chiamato senza argomenti. Passa un qualsiasi valore non chiamabile per cancellare la callback.

frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None

Registra la callback cb da eseguire (in contesto di interrupt) ogni volta che il modulo camera genera un nuovo frame e il frame è pronto per essere letto tramite CSI.snapshot.

cb non accetta argomenti. Usala per programmare la lettura di un frame successivamente con micropython.schedule().

Restituisce la callback registrata se chiamato senza argomenti. Passa un qualsiasi valore non chiamabile per cancellare la callback.

ioctl(request: int, *args) Any

Esegue una richiesta specifica del sensore. request è una delle costanti IOCTL_*; i restanti argomenti posizionali e il valore di ritorno dipendono dalla richiesta. Le richieste supportate sono raggruppate per famiglia di sensori qui sotto.

Generico (qualsiasi sensore):

ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))

ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))

Imposta la finestra di lettura del sensore. Una finestra più piccola aumenta il frame rate a scapito del campo visivo.

ioctl(IOCTL_GET_READOUT_WINDOW)

Restituisce la finestra di lettura corrente come una tupla (x, y, w, h).

ioctl(IOCTL_SET_TRIGGERED_MODE, enable)

Abilita (True) o disabilita (False) la modalità triggered sull’MT9V034.

ioctl(IOCTL_GET_TRIGGERED_MODE)

Restituisce lo stato corrente della modalità triggered come un bool.

ioctl(IOCTL_SET_FOV_WIDE, enable)

Quando True, istruisce framesize() a ottimizzare per il campo visivo piuttosto che per il frame rate.

ioctl(IOCTL_GET_FOV_WIDE)

Restituisce lo stato corrente di FOV-wide come un bool.

ioctl(IOCTL_SET_NIGHT_MODE, enable)

Abilita (True) o disabilita (False) la «modalità notturna» a bassa luminosità del sensore. Solo OV7725 e OV5640.

ioctl(IOCTL_GET_NIGHT_MODE)

Restituisce lo stato corrente della modalità notturna come un bool.

ioctl(IOCTL_GET_RGB_STATS)

Restituisce una tupla di 4 elementi con le statistiche grezze dei canali RGB (r, gb, gr, b) lette dal sensore (tipicamente usate per la regolazione del bilanciamento del bianco).

OV5640 FPC – messa a fuoco automatica:

ioctl(IOCTL_TRIGGER_AUTO_FOCUS)

Avvia una scansione di messa a fuoco automatica sul modulo OV5640 FPC.

ioctl(IOCTL_PAUSE_AUTO_FOCUS)

Mette in pausa una scansione di messa a fuoco automatica in corso.

ioctl(IOCTL_RESET_AUTO_FOCUS)

Reimposta la posizione di messa a fuoco automatica a quella predefinita.

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)

Si blocca finché la scansione di messa a fuoco automatica corrente non termina. timeout_ms vale 5000 di default se omesso.

FLIR Lepton:

ioctl(IOCTL_LEPTON_GET_WIDTH)

Restituisce la larghezza dell’immagine Lepton in pixel.

ioctl(IOCTL_LEPTON_GET_HEIGHT)

Restituisce l’altezza dell’immagine Lepton in pixel.

ioctl(IOCTL_LEPTON_GET_RADIOMETRY)

Restituisce il tipo di Lepton (radiometrico o no) come int.

ioctl(IOCTL_LEPTON_GET_REFRESH)

Restituisce il refresh rate del Lepton in Hz.

ioctl(IOCTL_LEPTON_GET_RESOLUTION)

Restituisce la risoluzione ADC del Lepton in bit.

ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)

Esegue un comando dell’SDK FLIR Lepton. cmd è l’id di comando a 16 bit definito dall’SDK.

ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)

Scrive un attributo dell’SDK Lepton. attr_id è l’id dell’attributo a 16 bit; payload è un bytes/bytearray la cui lunghezza deve essere un multiplo di 16 bit.

ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)

Legge un attributo dell’SDK Lepton. attr_id è l’id dell’attributo a 16 bit; words è il numero di parole a 16 bit da leggere. Restituisce un bytearray.

ioctl(IOCTL_LEPTON_GET_FPA_TEMP)

Restituisce la temperatura del focal-plane-array del Lepton in gradi Celsius.

ioctl(IOCTL_LEPTON_GET_AUX_TEMP)

Restituisce la temperatura ausiliaria del Lepton in gradi Celsius.

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)

Commuta il Lepton tra l’uscita AGC e l’uscita diretta di temperatura. measurement_enabled=True abilita l’uscita diretta di temperatura. Il flag opzionale high_temp_enabled seleziona l’intervallo di alta temperatura.

ioctl(IOCTL_LEPTON_GET_MODE)

Restituisce una tupla di 2 elementi (measurement_enabled, high_temp_enabled).

ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))

Imposta l’intervallo di temperatura mappato su 0..255 quando la modalità di misura è abilitata.

ioctl(IOCTL_LEPTON_GET_RANGE)

Restituisce l’intervallo (min_celsius, max_celsius) corrente.

Himax HM01B0 – rilevamento del movimento:

ioctl(IOCTL_HIMAX_MD_ENABLE, enable)

Abilita (True) o disabilita (False) il blocco di rilevamento del movimento on-sensor dell’HM01B0.

ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))

ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))

Imposta la finestra di rilevamento del movimento sull’HM01B0.

ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)

Imposta la soglia di rilevamento del movimento (0255).

ioctl(IOCTL_HIMAX_MD_CLEAR)

Azzera il latch dell’interrupt di rilevamento del movimento.

ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)

Abilita (True) o disabilita (False) l’oscillatore interno dell’HM01B0.

Prophesee GENX320 – sensore a eventi:

ioctl(IOCTL_GENX320_SET_BIASES, preset)

Applica un preset di bias. preset è una delle costanti GENX320_BIASES_*.

ioctl(IOCTL_GENX320_SET_BIAS, bias, value)

Imposta un singolo bias. bias è una delle costanti GENX320_BIAS_*; value è l’impostazione intera.

ioctl(IOCTL_GENX320_SET_AFK, enable)

ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)

Configura il filtro anti-flicker. enable è un bool; gli argomenti opzionali di frequenza impostano la banda passante del filtro.

ioctl(IOCTL_GENX320_SET_STC, mode)

ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])

Configura il filtro di contrasto spazio-temporale. mode è una delle costanti GENX320_STC_*; fino a due ulteriori argomenti sono specifici della modalità.

ioctl(IOCTL_GENX320_SET_MODE, mode)

ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)

Commuta il sensore tra le modalità frame ed eventi. mode è una delle costanti GENX320_MODE_*. Per la modalità a eventi, evt_res è la lunghezza dell’asse delle righe del buffer di eventi passato a IOCTL_GENX320_READ_EVENTS.

ioctl(IOCTL_GENX320_READ_EVENTS, buf)

Legge gli eventi in buf, un ndarray uint16 di forma (EVT_res, 6) dove EVT_res è una potenza di due tra 1024 e 65536. Le colonne sono:

  • [0] – tipo di evento (PIX_OFF_EVENT / PIX_ON_EVENT / trigger).

  • [1] – secondi.

  • [2] – millisecondi.

  • [3] – microsecondi.

  • [4] – coordinata x.

  • [5] – coordinata y.

Restituisce il numero di eventi scritti.

ioctl(IOCTL_GENX320_READ_EVENTS_RAW)

Restituisce un image.Image contenente il frame di eventi grezzo dal GENX320.

ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)

Disattiva i pixel il cui rumore supera di più di sigma deviazioni standard la distribuzione normale. iterations è il numero intero di passaggi di calibrazione. Restituisce il numero di pixel disabilitati.

color_palette(palette: int | None = None) int | None

Imposta la palette di colori da usare per operazioni come la conversione da scala di grigi a RGB565 del FLIR Lepton o la visualizzazione degli eventi del GENX320. Una tra image.PALETTE_RAINBOW, image.PALETTE_IRONBOW e (quando supportate) image.PALETTE_DEPTH, image.PALETTE_EVT_DARK o image.PALETTE_EVT_LIGHT.

Restituisce l’impostazione corrente se chiamato senza argomenti.

__write_reg(address: int, value: int) None

Scrive value nel registro della camera all’indirizzo address.

Nota

Consulta il data sheet della camera per le informazioni sui registri.

__read_reg(address: int) int

Legge il registro della camera all’indirizzo address.

Nota

Consulta il data sheet della camera per le informazioni sui registri.

Funzioni

csi.devices() List[int]

Restituisce una lista degli ID dei chip dei sensori rilevati.

Costanti

csi.BINARY: int

Formato dei pixel BINARY (bitmap). Ogni pixel è a 1 bit. Utile per la memorizzazione di maschere; può essere usato con image.Image().

csi.GRAYSCALE: int

Formato dei pixel GRAYSCALE (Y da YUV422). Ogni pixel è a 8 bit.

csi.RGB565: int

Formato dei pixel RGB565. Ogni pixel è a 16 bit (5 bit rosso, 6 bit verde, 5 bit blu).

csi.BAYER: int

Formato dei pixel immagine RAW BAYER.

csi.YUV422: int

Formato dei pixel YUV422. Ogni pixel è memorizzato come un valore Y a 8 bit in scala di grigi seguito da valori di colore U/V a 8 bit alternati e condivisi tra due valori Y (Y1, U, Y2, V, …). Solo alcuni metodi di elaborazione delle immagini funzionano con YUV422.

csi.JPEG: int

Modalità JPEG. Il modulo camera emette immagini JPEG compresse. Usa CSI.quality per controllare la qualità JPEG. Funziona solo per le camere OV2640/OV5640.

csi.OV2640: int

CSI.cid restituisce questo valore per la camera OV2640.

csi.OV5640: int

CSI.cid restituisce questo valore per la camera OV5640.

csi.OV7670: int

CSI.cid restituisce questo valore per la camera OV7670.

csi.OV7690: int

CSI.cid restituisce questo valore per la camera OV7690.

csi.OV7725: int

CSI.cid restituisce questo valore per la camera OV7725.

csi.OV9650: int

CSI.cid restituisce questo valore per la camera OV9650.

csi.MT9V022: int

CSI.cid restituisce questo valore per la camera MT9V022.

csi.MT9V024: int

CSI.cid restituisce questo valore per la camera MT9V024.

csi.MT9V032: int

CSI.cid restituisce questo valore per la camera MT9V032.

csi.MT9V034: int

CSI.cid restituisce questo valore per la camera MT9V034.

csi.MT9M114: int

CSI.cid restituisce questo valore per la camera MT9M114.

csi.BOSON320: int

CSI.cid restituisce questo valore per la camera BOSON 320x256.

csi.BOSON640: int

CSI.cid restituisce questo valore per la camera BOSON 640x512.

csi.LEPTON: int

CSI.cid restituisce questo valore per le camere LEPTON1/2/3.

csi.HM01B0: int

CSI.cid restituisce questo valore per la camera HM01B0.

csi.HM0360: int

CSI.cid restituisce questo valore per la camera HM0360.

csi.GC2145: int

CSI.cid restituisce questo valore per la camera GC2145.

csi.GENX320ES: int

CSI.cid restituisce questo valore per la camera GENX320 (engineering sample).

csi.GENX320: int

CSI.cid restituisce questo valore per la camera GENX320.

csi.PAG7920: int

CSI.cid restituisce questo valore per la camera PAG7920.

csi.PAG7936: int

CSI.cid restituisce questo valore per la camera PAG7936.

csi.PAJ6100: int

CSI.cid restituisce questo valore per la camera PAJ6100.

csi.FROGEYE2020: int

CSI.cid restituisce questo valore per la camera FROGEYE2020.

csi.SOFTCSI: int

CSI.cid restituisce questo valore per la camera software CSI.

csi.NORMAL: int

Modalità normale per CSI.special_effect.

csi.NEGATIVE: int

Modalità negativa per CSI.special_effect.

csi.QCIF: int

Risoluzione 176x144 per il sensore camera.

csi.CIF: int

Risoluzione 352x288 per il sensore camera.

csi.QSIF: int

Risoluzione 176x120 per il sensore camera.

csi.SIF: int

Risoluzione 352x240 per il sensore camera.

csi.QQQVGA: int

Risoluzione 80x60 per il sensore camera.

csi.QQVGA: int

Risoluzione 160x120 per il sensore camera.

csi.QVGA: int

Risoluzione 320x240 per il sensore camera.

csi.VGA: int

Risoluzione 640x480 per il sensore camera.

csi.HQVGA: int

Risoluzione 240x160 per il sensore camera.

csi.HVGA: int

Risoluzione 480x320 per il sensore camera.

csi.WVGA: int

Risoluzione 720x480 per il sensore camera MT9V034.

csi.WVGA2: int

Risoluzione 752x480 per il sensore camera MT9V034.

csi.SVGA: int

Risoluzione 800x600 per il sensore camera.

csi.XGA: int

Risoluzione 1024x768 per il sensore camera.

csi.WXGA: int

Risoluzione 1280x768 per il sensore camera MT9M114.

csi.SXGA: int

Risoluzione 1280x1024 per il sensore camera. Funziona solo per le camere OV2640/OV5640.

csi.SXGAM: int

Risoluzione 1280x960 per il sensore camera MT9M114.

csi.UXGA: int

Risoluzione 1600x1200 per il sensore camera. Funziona solo per le camere OV2640/OV5640.

csi.HD: int

Risoluzione 1280x720 per il sensore camera.

csi.FHD: int

Risoluzione 1920x1080 per il sensore camera. Funziona solo per la camera OV5640.

csi.QHD: int

Risoluzione 2560x1440 per il sensore camera. Funziona solo per la camera OV5640.

csi.QXGA: int

Risoluzione 2048x1536 per il sensore camera. Funziona solo per la camera OV5640.

csi.WQXGA: int

Risoluzione 2560x1600 per il sensore camera. Funziona solo per la camera OV5640.

csi.WQXGA2: int

Risoluzione 2592x1944 per il sensore camera. Funziona solo per la camera OV5640.

csi.IOCTL_SET_READOUT_WINDOW: int

Imposta la finestra di lettura. Vedi CSI.ioctl.

csi.IOCTL_GET_READOUT_WINDOW: int

Ottiene la finestra di lettura. Vedi CSI.ioctl.

csi.IOCTL_SET_TRIGGERED_MODE: int

Imposta la modalità triggered per l’MT9V034. Vedi CSI.ioctl.

csi.IOCTL_GET_TRIGGERED_MODE: int

Ottiene lo stato della modalità triggered per l’MT9V034. Vedi CSI.ioctl.

csi.IOCTL_SET_FOV_WIDE: int

Abilita CSI.framesize a ottimizzare per il campo visivo invece che per gli FPS. Vedi CSI.ioctl.

csi.IOCTL_GET_FOV_WIDE: int

Restituisce se CSI.framesize sta ottimizzando per il campo visivo invece che per gli FPS. Vedi CSI.ioctl.

csi.IOCTL_TRIGGER_AUTO_FOCUS: int

Avvia la messa a fuoco automatica sul modulo camera OV5640 FPC. Vedi CSI.ioctl.

csi.IOCTL_PAUSE_AUTO_FOCUS: int

Mette in pausa la messa a fuoco automatica (mentre è in esecuzione) per il modulo camera OV5640 FPC. Vedi CSI.ioctl.

csi.IOCTL_RESET_AUTO_FOCUS: int

Reimposta la messa a fuoco automatica a quella predefinita per il modulo camera OV5640 FPC. Vedi CSI.ioctl.

csi.IOCTL_WAIT_ON_AUTO_FOCUS: int

Attende il completamento della messa a fuoco automatica sul modulo camera OV5640 FPC. Vedi CSI.ioctl.

csi.IOCTL_SET_NIGHT_MODE: int

Attiva o disattiva la modalità notturna. Riduce il frame rate per aumentare dinamicamente l’esposizione. Vedi CSI.ioctl.

csi.IOCTL_GET_NIGHT_MODE: int

Restituisce se la modalità notturna è abilitata. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_WIDTH: int

Restituisce la larghezza della risoluzione dell’immagine del FLIR Lepton in pixel. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_HEIGHT: int

Restituisce l’altezza della risoluzione dell’immagine del FLIR Lepton in pixel. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_RADIOMETRY: int

Restituisce il tipo di FLIR Lepton (radiometrico o no). Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_REFRESH: int

Restituisce il refresh rate del FLIR Lepton in Hz. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_RESOLUTION: int

Restituisce la risoluzione ADC del FLIR Lepton in bit. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_RUN_COMMAND: int

Esegue un comando a 16 bit dall’SDK FLIR Lepton. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_SET_ATTRIBUTE: int

Imposta un attributo del FLIR Lepton dall’SDK FLIR Lepton. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_ATTRIBUTE: int

Ottiene un attributo del FLIR Lepton dall’SDK FLIR Lepton. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_FPA_TEMP: int

Ottiene la temperatura FPA del FLIR Lepton in Celsius. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_AUX_TEMP: int

Ottiene la temperatura AUX del FLIR Lepton in Celsius. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_SET_MODE: int

Imposta il driver del FLIR Lepton in una modalità in cui ogni pixel è un valore di temperatura. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_MODE: int

Restituisce se la modalità di misura è abilitata per il sensore FLIR Lepton. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_SET_RANGE: int

Imposta l’intervallo di temperatura mappato sui valori dei pixel in modalità di misura. Vedi CSI.ioctl.

csi.IOCTL_LEPTON_GET_RANGE: int

Restituisce l’intervallo di temperatura usato per la modalità di misura. Vedi CSI.ioctl.

csi.IOCTL_HIMAX_MD_ENABLE: int

Controlla l’interrupt di rilevamento del movimento sull’HM01B0. Vedi CSI.ioctl.

csi.IOCTL_HIMAX_MD_WINDOW: int

Imposta la finestra di rilevamento del movimento sull’HM01B0. Vedi CSI.ioctl.

csi.IOCTL_HIMAX_MD_THRESHOLD: int

Imposta la soglia di rilevamento del movimento sull’HM01B0. Vedi CSI.ioctl.

csi.IOCTL_HIMAX_MD_CLEAR: int

Azzera l’interrupt di rilevamento del movimento sull’HM01B0. Vedi CSI.ioctl.

csi.IOCTL_HIMAX_OSC_ENABLE: int

Controlla l’oscillatore interno sull’HM01B0. Vedi CSI.ioctl.

csi.IOCTL_GET_RGB_STATS: int

Restituisce le statistiche RGB dal sensore camera. Vedi CSI.ioctl.

csi.IOCTL_GENX320_SET_BIASES: int

Imposta i bias del sensore GENX320 a uno dei preset GENX320_BIASES_*. Vedi CSI.ioctl. Dopo CSI.reset il driver applica csi.GENX320_BIASES_LOW_NOISE, non csi.GENX320_BIASES_DEFAULT — usa questo ioctl per passare a un preset diverso quando l’applicazione richiede più sensibilità o banda passante.

csi.GENX320_BIASES_DEFAULT: int

Valori predefiniti del datasheet GenX320 — sensibilità, rumore e banda passante bilanciati per scene generiche.

csi.GENX320_BIASES_LOW_LIGHT: int

Ottimizzato per condizioni di scarsa illuminazione — entrambe le soglie di contrasto allentate per una maggiore sensibilità, FO ridotto, HPF disabilitato così anche le variazioni lente di luminosità vengono registrate.

csi.GENX320_BIASES_ACTIVE_MARKER: int

Ottimizzato per tracciare LED lampeggianti ad alto contrasto (marker attivi) — soglie di contrasto innalzate così solo le transizioni nette attivano eventi, FO e HPF spinti al massimo per massimizzare la banda passante e respingere la lenta deriva ambientale, REFR=0 così ogni fronte di lampeggio viene catturato.

csi.GENX320_BIASES_LOW_NOISE: int

Predefinito del driver — sensibilità inferiore rispetto a DEFAULT (soglie di contrasto innalzate) e un FO più basso per minore attività da rumore di fondo. Ideale per scene statiche o lente in cui i falsi eventi dominerebbero.

csi.GENX320_BIASES_HIGH_SPEED: int

Ottimizzato per scene a movimento rapido — FO più alto per una banda passante dei pixel più ampia, HPF più alto per respingere le variazioni lente, REFR più alto per un tempo morto più lungo dopo ogni evento così la lettura non satura.

csi.IOCTL_GENX320_SET_BIAS: int

Imposta un singolo bias del sensore GENX320 a un valore DAC. Passa una costante GENX320_BIAS_* (csi.GENX320_BIAS_DIFF_OFF, csi.GENX320_BIAS_DIFF_ON, csi.GENX320_BIAS_FO, csi.GENX320_BIAS_HPF o csi.GENX320_BIAS_REFR) e un valore DAC intero. Ogni bias è indipendente — chiama ripetutamente questo ioctl per regolare solo i bias necessari dopo aver applicato un preset. Vedi CSI.ioctl.

csi.GENX320_BIAS_DIFF_OFF: int

Soglia di contrasto del comparatore negativo — controlla di quanto un pixel deve scurirsi prima che venga generato un csi.PIX_OFF_EVENT. Valore più basso = più sensibile (più eventi).

csi.GENX320_BIAS_DIFF_ON: int

Soglia di contrasto del comparatore positivo — controlla di quanto un pixel deve schiarirsi prima che venga generato un csi.PIX_ON_EVENT. Valore più basso = più sensibile (più eventi).

csi.GENX320_BIAS_FO: int

Frequenza di taglio del filtro passa-basso del pixel — bilancia la banda passante del pixel (velocità/latenza) rispetto all’attività da rumore di fondo. Valore più alto = risposta del pixel più rapida, più rumore.

csi.GENX320_BIAS_HPF: int

Frequenza di taglio del filtro passa-alto del pixel — respinge le variazioni lente di luminosità. Valore più alto = variazioni più lente filtrate (solo le transizioni rapide vengono registrate).

csi.GENX320_BIAS_REFR: int

Periodo refrattario del pixel — tempo morto dopo che un pixel emette un evento durante il quale non può attivarsi di nuovo. Valore più alto = tempo morto più lungo, meno eventi da un pixel affollato.

csi.IOCTL_GENX320_SET_AFK: int

Imposta il filtro anti-flicker (AFK) del GENX320, che respinge gli eventi dei pixel che commutano a una banda di frequenza periodica (illuminazione fluorescente, display pilotati da LED, ecc.). Passa enable (1 per abilitare, 0 per disabilitare) e, in fase di abilitazione, i limiti della banda in hertz: (enable, freq_low_hz, freq_high_hz). Vedi CSI.ioctl.

csi.IOCTL_GENX320_SET_STC: int

Imposta la modalità del filtro di contrasto spazio-temporale (STC) del GENX320. Passa una costante GENX320_STC_* (csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY, csi.GENX320_STC_TRAIL) seguita dalla soglia o dalle soglie richieste dalla modalità (in millisecondi). Vedi CSI.ioctl.

csi.GENX320_STC_DISABLE: int

Disabilita il filtro STC/trail del GENX320 — ogni evento passa.

csi.GENX320_STC_ONLY: int

Mantiene il secondo evento di un burst; scarta il primo evento e ogni evento successivo. Accetta un parametro, stc_threshold in millisecondi — gli eventi entro quella finestra rispetto a un evento precedente sullo stesso pixel sono considerati parte dello stesso burst.

csi.GENX320_STC_TRAIL_ONLY: int

Mantiene il primo evento di un burst; scarta gli eventi successivi sullo stesso pixel finché non è trascorso trail_threshold. Accetta un parametro, trail_threshold in millisecondi.

csi.GENX320_STC_TRAIL: int

Mantiene il primo evento di un burst più i fronti successivi — combina csi.GENX320_STC_ONLY e csi.GENX320_STC_TRAIL_ONLY. Accetta due parametri, stc_threshold e trail_threshold (entrambi in ms); il sensore richiede che i due restino entro un rapporto di circa 13:1.

csi.IOCTL_GENX320_SET_MODE: int

Imposta la modalità operativa del GENX320. Passa csi.GENX320_MODE_HISTO per l’istogramma di eventi on-chip (la cam si comporta come una normale camera in scala di grigi al framerate configurato) oppure csi.GENX320_MODE_EVENT seguito dalla lunghezza dell’asse delle righe dell”ndarray di eventi (una potenza di due tra 1024 e 65536) per lo streaming di eventi grezzi. Vedi CSI.ioctl.

csi.GENX320_MODE_HISTO: int

Modalità istogramma — gli eventi vengono accumulati on-chip in bin per-pixel e riportati come frame in scala di grigi 320x320 alla frequenza configurata (~20-350 FPS). La cam appare come una normale camera, quindi tutte le routine standard di elaborazione delle immagini funzionano direttamente.

csi.GENX320_MODE_EVENT: int

Modalità a eventi — bypassa l’istogramma on-chip e trasmette gli eventi grezzi in un ndarray numpy con timestamp in microsecondi, per applicazioni che necessitano del pieno dettaglio temporale anziché di un frame pre-binnato.

csi.IOCTL_GENX320_READ_EVENTS: int

Legge gli eventi grezzi in un ndarray uint16 di forma (EVT_res, 6) (con EVT_res corrispondente alla dimensione del buffer passata a csi.IOCTL_GENX320_SET_MODE). Le colonne sono [0] tipo di evento (csi.PIX_OFF_EVENT, csi.PIX_ON_EVENT, csi.EXT_TRIGGER_RISING/FALLING, csi.RST_TRIGGER_RISING/FALLING), [1] timestamp in secondi, [2] millisecondi, [3] microsecondi, [4] coordinata X (0-319), [5] coordinata Y (0-319). Restituisce il numero di eventi scritti nel buffer, lasciando intatte le righe più vecchie oltre tale conteggio. Vedi CSI.ioctl.

csi.IOCTL_GENX320_CALIBRATE: int

Disabilita automaticamente gli hot pixel — pixel che si attivano spuriamente anche su una scena statica. Il driver costruisce un conteggio di hit per-pixel 320x320, calcola la media e la deviazione standard e disabilita ogni pixel il cui conteggio supera mean + sigma * stddev. Passa un budget di conteggio eventi (eventi da conteggiare prima di calcolare le statistiche — più alto = stima più affidabile, più lento; ~10000 è un buon valore predefinito) e un valore float sigma (più basso = più aggressivo, ~0.5 predefinito). Restituisce il numero di pixel disabilitati. Punta prima la cam su una scena statica così gli eventi dovuti al movimento non vengano conteggiati a sfavore di pixel che in realtà sono a posto. Vedi CSI.ioctl.

csi.IOCTL_GENX320_READ_EVENTS_RAW: int

Restituisce un image.Image di frame di eventi grezzo dal GENX320, con gli eventi ancora nella codifica nativa impacchettata del chip — utile se vuoi inoltrare lo stream grezzo a un PC per la decodifica offline anziché elaborarlo sulla cam. Vedi CSI.ioctl.

csi.PIX_OFF_EVENT: int

Tipo di evento GENX320 (colonna [0]) — un pixel ha rilevato una diminuzione di luminosità (la soglia di contrasto negativa è stata superata). Le colonne [4]/[5] contengono la X/Y del pixel.

csi.PIX_ON_EVENT: int

Tipo di evento GENX320 (colonna [0]) — un pixel ha rilevato un aumento di luminosità (la soglia di contrasto positiva è stata superata). Le colonne [4]/[5] contengono la X/Y del pixel.

csi.RST_TRIGGER_RISING: int

Tipo di evento GENX320 (colonna [0]) — trigger di reset del pixel, fronte di salita. X/Y non sono usate. Non generato dal firmware al momento.

csi.RST_TRIGGER_FALLING: int

Tipo di evento GENX320 (colonna [0]) — trigger di reset del pixel, fronte di discesa. X/Y non sono usate. Non generato dal firmware al momento.

csi.EXT_TRIGGER_RISING: int

Tipo di evento GENX320 (colonna [0]) — il pin di trigger esterno del sensore ha visto un fronte di salita. L’ingresso di trigger esterno del GENX320 è cablato alla linea di frame-sync della camera, instradata anche a P10 sul processore e sul connettore pin. X/Y non sono usate.

csi.EXT_TRIGGER_FALLING: int

Tipo di evento GENX320 (colonna [0]) — il pin di trigger esterno del sensore ha visto un fronte di discesa. L’ingresso di trigger esterno del GENX320 è cablato alla linea di frame-sync della camera, instradata anche a P10 sul processore e sul connettore pin. X/Y non sono usate.