classe ImageIO – objet ImageIO¶
La classe ImageIO enregistre et restitue des flux de trames Image dans le format natif sur disque d’OpenMV. Un même flux peut contenir des trames hétérogènes (formats de pixels / tailles différents) et enregistre l’intervalle entre trames de chacune afin que la restitution reproduise la cadence d’images d’origine.
Il existe deux supports de stockage :
Flux fichier – les trames sont lues depuis / ajoutées à un fichier du système de fichiers. Le fichier commence par un en-tête magique de 16 octets
OMV IMG STR Vx.ysuivi de blocs par trame. L’écrivain actuel émetV2.0; les anciens fichiersV1.0etV1.1restent lisibles.Flux mémoire – les trames sont lues depuis / écrites dans un tampon RAM de taille fixe alloué au moment de la construction. Utile pour faire transiter des trames à travers des filtres qui nécessitent un enregistrement sans toucher au système de fichiers.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Crée un flux
ImageIO.Si
pathest une chaîne, un flux fichier est ouvert à ce chemin.modedoit être l’une des valeurs suivantes :Si
pathest un triplet(w, h, pixformat), un flux mémoire est alloué.modeest alors l’entier nombre d’emplacements de trame à préallouer. Le tampon est dimensionné pourcounttrames de(w, h, pixformat)et ne peut pas grandir après sa création.pixformatest l’une des valeursimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGouimage.PNG. Pour les formats compressés (image.JPEG,image.PNG) la taille par emplacement est estimée à 2 bpp ; les trames plus grandes que l’estimation lèventValueErrorau moment duwrite().Inspection¶
- type() int¶
Renvoie le support de stockage du flux :
FILE_STREAMpour un flux fichier,MEMORY_STREAMpour un flux mémoire.
- is_closed() bool¶
Renvoie
Truesiclose()a été appelée sur cet objet. Une fois fermé, le flux lèveOSError("Stream closed")à toute lecture/écriture/recherche ultérieure.
- count() int¶
Renvoie le nombre de trames actuellement stockées dans le flux. Pour les flux fichier, ce nombre augmente à mesure que
write()ajoute des trames ; pour les flux mémoire, il est fixé au moment de la construction.
- offset() int¶
Renvoie l’index de trame courant. Incrémenté par
read()etwrite(), réinitialisé parseek().
- version() int | None¶
Renvoie la version du format sur disque pour les flux fichier (
10pourV1.0,11pourV1.1,20pourV2.0). RenvoieNonepour les flux mémoire.
- buffer_size() int | None¶
Renvoie la taille du tampon de pixels par emplacement, en octets, pour les flux mémoire (la taille de l’emplacement moins l’en-tête de gestion interne
Image). RenvoieNonepour les flux fichier. Utilisez ceci aveccount()pour vérifier si une taille de trame particulière tiendra.
E/S¶
- write(img: Image) ImageIO¶
Ajoute (flux fichier) ou stocke à un décalage donné (flux mémoire)
imget avanceoffset()d’une unité.Pour les flux fichier, le fichier grandit à mesure que les trames sont ajoutées. Écrire à un décalage qui n’est pas la fin tronque le reste du fichier, de sorte que le nombre de trames peut diminuer.
Pour les flux mémoire, la trame est écrite dans l’emplacement courant ; écrire au-delà du dernier emplacement lève
EOFError("End of stream")et écrire une trame plus grande quebuffer_size()lèveValueError("Invalid frame size").Renvoie
selfafin que les appels puissent être chaînés.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Lit la trame au
offset()courant, avance le décalage et renvoie la nouvelleImage. Reflète la moitié restitution dewrite().copy_to_fb– lorsqueTrue(par défaut), la trame décodée est placée dans le tampon d’image de la caméra (le même endroit où atterrit uncsi.CSI.snapshot()), de sorte que l”Imagerenvoyée est dessinable via l’aperçu de l’IDE. LorsqueFalse, la trame est allouée sur le tas MicroPython à la place.loop(flux fichier uniquement) – lorsqueTrue(par défaut), lire au-delà de la dernière trame revient à la première trame et continue. LorsqueFalse, l’appel renvoieNoneune fois la fin du fichier atteinte.pause– lorsqueTrue(par défaut), l’appel se bloque jusqu’à ce que l’intervalle entre trames enregistré à l’origine se soit écoulé, de sorte que la restitution s’exécute à la cadence d’images native de l’enregistrement. Mettez àFalsepour une restitution aussi rapide que possible.
- seek(offset: int) ImageIO¶
Déplace
offset()vers la trameoffset.offsetdoit être non négatif ; les décalages de flux mémoire doivent en plus être inférieurs àcount().Les recherches sur flux fichier parcourent le fichier trame par trame depuis le début, car les blocs de trame sont de taille variable – attendez-vous à un temps en O(offset) pour les grands sauts.
Renvoie
selfafin que les appels puissent être chaînés.
- sync() ImageIO¶
Vide les écritures en attente sur le disque pour les flux fichier (appelle le
syncsous-jacent du système de fichiers). Sans effet pour les flux mémoire.Renvoie
selfafin que les appels puissent être chaînés.
- close() None¶
Ferme le flux. Libère le tampon mémoire (flux mémoire) ou ferme le fichier (flux fichier). Après
close(), l’objetImageIOne peut plus être réutilisé ; les opérations ultérieures lèventOSError("Stream closed"). Appelerclose()deux fois est sans effet.Un
ImageIOest aussi fermé automatiquement lorsqu’il est récupéré par le ramasse-miettes (il enregistre un finaliseur lors de la construction).
Constantes¶