class ImageIO – objeto ImageIO¶
A classe ImageIO regista e reproduz sequências de fotogramas Image no formato nativo do OpenMV em disco. Uma única sequência pode conter fotogramas heterogéneos (diferentes formatos de pixel / tamanhos) e regista o intervalo entre fotogramas de cada um, de modo a que a reprodução recrie a taxa de fotogramas original.
Existem dois tipos de armazenamento:
Sequência de ficheiro – os fotogramas são lidos / adicionados a um ficheiro no sistema de ficheiros. O ficheiro começa com um cabeçalho mágico de 16 bytes
OMV IMG STR Vx.yseguido de blocos por fotograma. O escritor atual emiteV2.0; ficheiros mais antigosV1.0eV1.1ainda são legíveis.Sequência de memória – os fotogramas são lidos / escritos num buffer de RAM de tamanho fixo alocado no momento da construção. Útil para passar fotogramas por filtros que necessitam de uma gravação sem aceder ao sistema de ficheiros.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Cria uma sequência
ImageIO.Se
pathfor uma cadeia de caracteres, é aberta uma sequência de ficheiro nesse caminho.modedeve ser um dos seguintes:Se
pathfor uma 3-tupla(w, h, pixformat), é alocada uma sequência de memória.modeé então o número inteiro de posições de fotograma a pré-alocar. O buffer é dimensionado paracountfotogramas de(w, h, pixformat)e não pode crescer após a criação.pixformaté um dos seguintes:image.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGouimage.PNG. Para os formatos comprimidos (image.JPEG,image.PNG) o tamanho por posição é estimado em 2 bpp; fotogramas maiores que a estimativa lançamValueErrorno momento dewrite().Inspeção¶
- type() int¶
Devolve o tipo de armazenamento da sequência:
FILE_STREAMpara uma sequência de ficheiro,MEMORY_STREAMpara uma sequência de memória.
- is_closed() bool¶
Devolve
Trueseclose()tiver sido chamado neste objeto. Uma vez fechado, a sequência lançaOSError("Stream closed")em qualquer leitura/escrita/posicionamento subsequente.
- count() int¶
Devolve o número de fotogramas atualmente armazenados na sequência. Para sequências de ficheiro este valor cresce à medida que
write()adiciona fotogramas; para sequências de memória é fixo no momento da construção.
- offset() int¶
Devolve o índice do fotograma atual. Incrementado por
read()ewrite(), reposto porseek().
- version() int | None¶
Devolve a versão do formato em disco para sequências de ficheiro (
10paraV1.0,11paraV1.1,20paraV2.0). DevolveNonepara sequências de memória.
- buffer_size() int | None¶
Devolve o tamanho do buffer de pixel por posição em bytes para sequências de memória (o tamanho da posição menos o cabeçalho interno de gestão de
Image). DevolveNonepara sequências de ficheiro. Use isto em conjunto comcount()para verificar se um fotograma de determinado tamanho caberá.
E/S¶
- write(img: Image) ImageIO¶
Adiciona (sequência de ficheiro) ou armazena na posição atual (sequência de memória)
imge avançaoffset()em um.Para sequências de ficheiro, o ficheiro cresce à medida que os fotogramas são adicionados. Escrever numa posição que não seja o fim trunca o resto do ficheiro, podendo reduzir a contagem.
Para sequências de memória, o fotograma é escrito na posição atual; escrever além da última posição lança
EOFError("End of stream")e escrever um fotograma maior quebuffer_size()lançaValueError("Invalid frame size").Devolve
selfpara que as chamadas possam ser encadeadas.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Lê o fotograma na
offset()atual, avança o offset e devolve o novoImage. Corresponde à metade de reprodução dewrite().copy_to_fb– quandoTrue(predefinição) o fotograma descodificado é colocado no buffer de fotograma da câmara (o mesmo local onde aterra umcsi.CSI.snapshot()), pelo que oImagedevolvido pode ser visualizado através da pré-visualização do IDE. QuandoFalseo fotograma é alocado na heap do MicroPython.loop(apenas para sequências de ficheiro) – quandoTrue(predefinição) a leitura além do último fotograma regressa ao primeiro e continua. QuandoFalsea chamada devolveNoneapós atingir o fim do ficheiro.pause– quandoTrue(predefinição) a chamada bloqueia até que o intervalo entre fotogramas originalmente gravado tenha decorrido, de modo a que a reprodução ocorra à taxa de fotogramas nativa da gravação. Defina comoFalsepara reprodução o mais rápido possível.
- seek(offset: int) ImageIO¶
Move
offset()para o fotogramaoffset.offsetdeve ser não negativo; os offsets de sequências de memória também devem ser inferiores acount().Os posicionamentos em sequências de ficheiro percorrem o ficheiro fotograma a fotograma a partir do início, uma vez que os blocos de fotograma têm tamanho variável – espere tempo O(offset) para grandes deslocamentos.
Devolve
selfpara que as chamadas possam ser encadeadas.
- sync() ImageIO¶
Envia para disco as escritas pendentes em sequências de ficheiro (chama o
syncdo sistema de ficheiros subjacente). Sem efeito para sequências de memória.Devolve
selfpara que as chamadas possam ser encadeadas.
- close() None¶
Fecha a sequência. Liberta o buffer de memória (sequências de memória) ou fecha o ficheiro (sequências de ficheiro). Após
close()o objetoImageIOnão pode ser reutilizado; operações subsequentes lançamOSError("Stream closed"). Chamarclose()duas vezes não tem efeito.Um
ImageIOé também fechado automaticamente quando é recolhido pelo coletor de lixo (regista um finalizador na construção).
Constantes¶