classe ImageIO – oggetto ImageIO¶
La classe ImageIO registra e riproduce flussi di frame Image nel formato su disco nativo di OpenMV. Un singolo flusso può contenere frame eterogenei (formati di pixel / dimensioni diversi) e registra l’intervallo tra i frame per ciascuno di essi, in modo che la riproduzione ricrei il frame rate originale.
Esistono due archivi di supporto:
Flusso su file – i frame vengono letti da / aggiunti a un file nel filesystem. Il file inizia con un’intestazione magica di 16 byte
OMV IMG STR Vx.yseguita da blocchi per ciascun frame. Lo scrittore attuale emetteV2.0; i file più vecchiV1.0eV1.1sono ancora leggibili.Flusso in memoria – i frame vengono letti da / scritti in un buffer RAM di dimensione fissa allocato al momento della costruzione. Utile per far transitare i frame attraverso filtri che richiedono una registrazione senza toccare il filesystem.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Crea un flusso
ImageIO.Se
pathè una stringa, viene aperto un flusso su file in quel percorso.modedeve essere uno dei seguenti:Se
pathè una tupla di 3 elementi(w, h, pixformat), viene allocato un flusso in memoria.modeè in tal caso il numero intero di slot per frame da pre-allocare. Il buffer è dimensionato percountframe di(w, h, pixformat)e non può crescere dopo la creazione.pixformatè uno traimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGoimage.PNG. Per i formati compressi (image.JPEG,image.PNG) la dimensione per slot è stimata a 2 bpp; i frame più grandi della stima sollevanoValueErroral momento diwrite().Ispezione¶
- type() int¶
Restituisce l’archivio di supporto del flusso:
FILE_STREAMper un flusso su file,MEMORY_STREAMper un flusso in memoria.
- is_closed() bool¶
Restituisce
Trueseclose()è stata chiamata su questo oggetto. Una volta chiuso, il flusso sollevaOSError("Stream closed")a ogni successiva operazione di lettura/scrittura/seek.
- count() int¶
Restituisce il numero di frame attualmente memorizzati nel flusso. Per i flussi su file questo valore cresce man mano che
write()aggiunge frame; per i flussi in memoria è fisso al momento della costruzione.
- offset() int¶
Restituisce l’indice del frame corrente. Viene incrementato da
read()ewrite(), e azzerato daseek().
- version() int | None¶
Restituisce la versione del formato su disco per i flussi su file (
10perV1.0,11perV1.1,20perV2.0). RestituisceNoneper i flussi in memoria.
- buffer_size() int | None¶
Restituisce la dimensione in byte del buffer di pixel per slot per i flussi in memoria (la dimensione dello slot meno l’intestazione di gestione interna di
Image). RestituisceNoneper i flussi su file. Usalo insieme acount()per verificare se una determinata dimensione di frame entrerà.
I/O¶
- write(img: Image) ImageIO¶
Aggiunge (flusso su file) o memorizza all’offset (flusso in memoria)
imge fa avanzareoffset()di uno.Per i flussi su file il file cresce man mano che vengono aggiunti i frame. Scrivere a un offset diverso da quello finale tronca il resto del file, quindi il conteggio può diminuire.
Per i flussi in memoria il frame viene scritto nello slot corrente; scrivere oltre l’ultimo slot solleva
EOFError("End of stream")e scrivere un frame più grande dibuffer_size()sollevaValueError("Invalid frame size").Restituisce
selfin modo che le chiamate possano essere concatenate.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Legge il frame all’attuale
offset(), fa avanzare l’offset e restituisce la nuovaImage. Rispecchia la metà di riproduzione diwrite().copy_to_fb– quando èTrue(predefinito) il frame decodificato viene collocato nel frame buffer della camera (lo stesso posto in cui finiscecsi.CSI.snapshot()), in modo che l’oggettoImagerestituito sia disegnabile tramite l’anteprima dell’IDE. Quando èFalseil frame viene invece allocato nell’heap di MicroPython.loop(solo flussi su file) – quando èTrue(predefinito) la lettura oltre l’ultimo frame torna al primo frame e prosegue. Quando èFalsela chiamata restituisceNoneuna volta raggiunta la fine del file.pause– quando èTrue(predefinito) la chiamata si blocca finché non è trascorso l’intervallo tra i frame originariamente registrato, in modo che la riproduzione avvenga al frame rate nativo della registrazione. Imposta suFalseper una riproduzione il più veloce possibile.
- seek(offset: int) ImageIO¶
Sposta
offset()al frameoffset.offsetdeve essere non negativo; gli offset dei flussi in memoria devono inoltre essere inferiori acount().I seek sui flussi su file percorrono il file frame per frame a partire dall’inizio, poiché i blocchi dei frame hanno dimensione variabile – per salti lunghi aspettati un tempo O(offset).
Restituisce
selfin modo che le chiamate possano essere concatenate.
- sync() ImageIO¶
Scarica le scritture in sospeso sul disco per i flussi su file (chiama la
syncdel filesystem sottostante). Non ha effetto per i flussi in memoria.Restituisce
selfin modo che le chiamate possano essere concatenate.
- close() None¶
Chiude il flusso. Rilascia il buffer di memoria (flussi in memoria) o chiude il file (flussi su file). Dopo
close()l’oggettoImageIOnon può essere riutilizzato; le operazioni successive sollevanoOSError("Stream closed"). Chiamareclose()due volte non ha effetto.Un oggetto
ImageIOviene chiuso automaticamente anche quando viene raccolto dal garbage collector (registra un finaliser al momento della costruzione).
Costanti¶