classe ImageIO – objeto ImageIO¶
A classe ImageIO grava e reproduz fluxos de quadros Image no formato nativo em disco do OpenMV. Um único fluxo pode conter quadros heterogêneos (formatos de pixel / tamanhos diferentes) e registra o intervalo entre quadros de cada um, de modo que a reprodução recria a taxa de quadros original.
Há dois armazenamentos de apoio:
Fluxo de arquivo – os quadros são lidos de / anexados a um arquivo no sistema de arquivos. O arquivo começa com um cabeçalho mágico de 16 bytes
OMV IMG STR Vx.yseguido por blocos por quadro. O escritor atual emiteV2.0; arquivos mais antigosV1.0eV1.1ainda podem ser lidos.Fluxo de memória – os quadros são lidos de / escritos em um buffer de RAM de tamanho fixo alocado no momento da construção. Útil para passar quadros por filtros que precisam de uma gravação sem tocar no sistema de arquivos.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Cria um fluxo
ImageIO.Se
pathfor uma string, um fluxo de arquivo é aberto nesse caminho.modedeve ser um dos seguintes:Se
pathfor uma 3-tupla(w, h, pixformat), um fluxo de memória é alocado. Nesse casomodeé o número inteiro de slots de quadro a pré-alocar. O buffer é dimensionado paracountquadros de(w, h, pixformat)e não pode crescer após a criação.pixformaté um dos valoresimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGouimage.PNG. Para os formatos comprimidos (image.JPEG,image.PNG) o tamanho por slot é estimado em 2 bpp; quadros maiores que a estimativa geramValueErrorno momento dewrite().Inspeção¶
- type() int¶
Retorna o armazenamento de apoio do fluxo:
FILE_STREAMpara um fluxo de arquivo,MEMORY_STREAMpara um fluxo de memória.
- is_closed() bool¶
Retorna
Trueseclose()foi chamado neste objeto. Uma vez fechado, o fluxo geraOSError("Stream closed")em qualquer leitura/escrita/busca posterior.
- count() int¶
Retorna o número de quadros atualmente armazenados no fluxo. Para fluxos de arquivo, isso cresce à medida que
write()anexa quadros; para fluxos de memória, é fixado no momento da construção.
- offset() int¶
Retorna o índice do quadro atual. Incrementado por
read()ewrite(), redefinido porseek().
- version() int | None¶
Retorna a versão do formato em disco para fluxos de arquivo (
10paraV1.0,11paraV1.1,20paraV2.0). RetornaNonepara fluxos de memória.
E/S¶
- write(img: Image) ImageIO¶
Anexa (fluxo de arquivo) ou armazena no offset (fluxo de memória)
imge avançaoffset()em uma posição.Para fluxos de arquivo o arquivo cresce à medida que os quadros são anexados. Escrever em um offset que não seja o final trunca o restante do arquivo, de modo que a contagem pode diminuir.
Para fluxos de memória o quadro é escrito no slot atual; escrever além do último slot gera
EOFError("End of stream")e escrever um quadro maior quebuffer_size()geraValueError("Invalid frame size").Retorna
self, de modo que as chamadas podem ser encadeadas.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Lê o quadro no
offset()atual, avança o offset e retorna a novaImage. Espelha a metade de reprodução dewrite().copy_to_fb– quandoTrue(padrão), o quadro decodificado é colocado no frame buffer da câmera (o mesmo lugar onde umcsi.CSI.snapshot()é depositado), de modo que aImageretornada pode ser desenhada através da pré-visualização do IDE. QuandoFalse, o quadro é alocado no heap do MicroPython em vez disso.loop(somente fluxos de arquivo) – quandoTrue(padrão), ler além do último quadro retorna ao primeiro quadro e continua. QuandoFalse, a chamada retornaNoneassim que o final do arquivo é alcançado.pause– quandoTrue(padrão), a chamada bloqueia até que o intervalo entre quadros originalmente gravado tenha decorrido, de modo que a reprodução ocorre na taxa de quadros nativa da gravação. Defina comoFalsepara reprodução o mais rápido possível.
- seek(offset: int) ImageIO¶
Move
offset()para o quadrooffset.offsetdeve ser não negativo; offsets de fluxos de memória também devem ser menores quecount().As buscas em fluxos de arquivo percorrem o arquivo quadro a quadro a partir do início, já que os blocos de quadro têm tamanho variável – espere tempo O(offset) para grandes saltos.
Retorna
self, de modo que as chamadas podem ser encadeadas.
- sync() ImageIO¶
Descarrega as escritas pendentes para o disco em fluxos de arquivo (chama o
syncsubjacente do sistema de arquivos). Não tem efeito para fluxos de memória.Retorna
self, de modo que as chamadas podem ser encadeadas.
- close() None¶
Fecha o fluxo. Libera o buffer de memória (fluxos de memória) ou fecha o arquivo (fluxos de arquivo). Após
close()o objetoImageIOnão pode ser reutilizado; operações subsequentes geramOSError("Stream closed"). Chamarclose()duas vezes não tem efeito.Um
ImageIOtambém é fechado automaticamente quando é coletado pelo coletor de lixo (registra um finalizador na construção).
Constantes¶