clase ImageIO – objeto ImageIO¶
La clase ImageIO graba y reproduce flujos de fotogramas Image en el formato nativo en disco de OpenMV. Un único flujo puede contener fotogramas heterogéneos (distintos formatos de píxel / tamaños) y registra el intervalo entre fotogramas de cada uno, de modo que la reproducción recrea la tasa de fotogramas original.
Existen dos almacenes de respaldo:
Flujo de archivo – los fotogramas se leen de / se añaden a un archivo del sistema de archivos. El archivo comienza con una cabecera mágica de 16 bytes
OMV IMG STR Vx.yseguida de fragmentos por fotograma. El escritor actual emiteV2.0; los archivos más antiguosV1.0yV1.1aún se pueden leer.Flujo de memoria – los fotogramas se leen de / se escriben en un búfer de RAM de tamaño fijo asignado en el momento de la construcción. Útil para hacer pasar fotogramas por filtros que necesitan una grabación sin tocar el sistema de archivos.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Crea un flujo
ImageIO.Si
pathes una cadena, se abre un flujo de archivo en esa ruta.modedebe ser uno de:Si
pathes una 3-tupla(w, h, pixformat), se asigna un flujo de memoria. En ese casomodees el número entero de ranuras de fotograma a preasignar. El búfer se dimensiona paracountfotogramas de(w, h, pixformat)y no se permite que crezca tras su creación.pixformates uno deimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGoimage.PNG. Para los formatos comprimidos (image.JPEG,image.PNG) el tamaño por ranura se estima en 2 bpp; los fotogramas mayores que la estimación lanzanValueErroren el momento dewrite().Inspección¶
- type() int¶
Devuelve el almacén de respaldo del flujo:
FILE_STREAMpara un flujo de archivo,MEMORY_STREAMpara un flujo de memoria.
- is_closed() bool¶
Devuelve
Truesi se ha llamado aclose()sobre este objeto. Una vez cerrado, el flujo lanzaOSError("Stream closed")ante cualquier lectura/escritura/búsqueda posterior.
- count() int¶
Devuelve el número de fotogramas almacenados actualmente en el flujo. Para los flujos de archivo este valor crece a medida que
write()añade fotogramas; para los flujos de memoria es fijo desde el momento de la construcción.
- offset() int¶
Devuelve el índice del fotograma actual. Se incrementa con
read()ywrite(), y se reinicia conseek().
- version() int | None¶
Devuelve la versión del formato en disco para los flujos de archivo (
10paraV1.0,11paraV1.1,20paraV2.0). DevuelveNonepara los flujos de memoria.
- buffer_size() int | None¶
Devuelve el tamaño en bytes del búfer de píxeles por ranura para los flujos de memoria (el tamaño de la ranura menos la cabecera interna de control de la
Image). DevuelveNonepara los flujos de archivo. Úsalo junto concount()para comprobar si un tamaño de fotograma concreto cabrá.
E/S¶
- write(img: Image) ImageIO¶
Añade (flujo de archivo) o almacena en el desplazamiento (flujo de memoria)
imgy avanzaoffset()en uno.Para los flujos de archivo, el archivo crece a medida que se añaden fotogramas. Escribir en un desplazamiento que no sea el final trunca el resto del archivo, de modo que el recuento puede reducirse.
Para los flujos de memoria, el fotograma se escribe en la ranura actual; escribir más allá de la última ranura lanza
EOFError("End of stream")y escribir un fotograma mayor quebuffer_size()lanzaValueError("Invalid frame size").Devuelve
selfpara que las llamadas se puedan encadenar.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Lee el fotograma en el
offset()actual, avanza el desplazamiento y devuelve la nuevaImage. Es el reflejo de reproducción de la mitad dewrite().copy_to_fb– cuando esTrue(predeterminado), el fotograma decodificado se coloca en el búfer de fotogramas (frame buffer) de la cámara (el mismo lugar donde aterriza uncsi.CSI.snapshot()), de modo que laImagedevuelta se puede dibujar a través de la vista previa del IDE. Cuando esFalse, el fotograma se asigna en el montículo de MicroPython.loop(solo flujos de archivo) – cuando esTrue(predeterminado), leer más allá del último fotograma vuelve al primer fotograma y continúa. Cuando esFalse, la llamada devuelveNoneuna vez alcanzado el final del archivo.pause– cuando esTrue(predeterminado), la llamada se bloquea hasta que haya transcurrido el intervalo entre fotogramas grabado originalmente, de modo que la reproducción se ejecuta a la tasa de fotogramas nativa de la grabación. Establécelo enFalsepara una reproducción lo más rápida posible.
- seek(offset: int) ImageIO¶
Mueve
offset()al fotogramaoffset.offsetdebe ser no negativo; los desplazamientos de los flujos de memoria también deben ser menores quecount().Las búsquedas en flujos de archivo recorren el archivo fotograma a fotograma desde el principio, dado que los fragmentos de fotograma son de tamaño variable; espera un tiempo O(offset) para saltos grandes.
Devuelve
selfpara que las llamadas se puedan encadenar.
- sync() ImageIO¶
Vuelca a disco las escrituras pendientes en los flujos de archivo (llama al
syncdel sistema de archivos subyacente). No tiene efecto en los flujos de memoria.Devuelve
selfpara que las llamadas se puedan encadenar.
- close() None¶
Cierra el flujo. Libera el búfer de memoria (flujos de memoria) o cierra el archivo (flujos de archivo). Tras
close()el objetoImageIOno se puede reutilizar; las operaciones posteriores lanzanOSError("Stream closed"). Llamar aclose()dos veces no tiene efecto.Un
ImageIOtambién se cierra automáticamente cuando se recolecta como basura (registra un finalizador en el momento de la construcción).
Constantes¶