class ImageIO – objekt ImageIO

Klasa ImageIO snima i reproducira tokove sličica Image u OpenMV-ovom izvornom formatu pohranjenom na disku. Jedan tok može sadržavati heterogene sličice (različitih formata piksela / veličina) i za svaku bilježi međusličični interval kako bi reprodukcija ponovno stvorila izvornu brzinu sličica.

Postoje dvije pozadinske pohrane:

  • Tok datoteke – sličice se čitaju iz / dodaju u datoteku na datotečnom sustavu. Datoteka započinje 16-bajtnim magičnim zaglavljem OMV IMG STR Vx.y iza kojeg slijede blokovi po sličici. Trenutni zapisivač emitira V2.0; starije V1.0 i V1.1 datoteke i dalje su čitljive.

  • Memorijski tok – sličice se čitaju iz / zapisuju u RAM međuspremnik fiksne veličine dodijeljen u trenutku konstrukcije. Koristan za propuštanje sličica kroz filtre kojima je potrebno snimanje bez doticanja datotečnog sustava.

class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)

Stvara ImageIO tok.

Ako je path niz znakova, na toj putanji otvara se tok datoteke. mode mora biti jedno od:

  • 'r' – otvara postojeću datoteku za čitanje. Magično zaglavlje se provjerava, a verzija (V1.0 / V1.1 / V2.0) bilježi se za korištenje metodom version().

  • 'w' – skraćuje / stvara datoteku i zapisuje svježe V2.0 magično zaglavlje. Sličice se dodaju pri svakom pozivu write().

Ako je path 3-torka (w, h, pixformat), dodjeljuje se memorijski tok. mode je tada cijeli broj broja utora za sličice koji se unaprijed dodjeljuju. Međuspremnik je dimenzioniran za count sličica veličine (w, h, pixformat) i ne smije rasti nakon stvaranja. pixformat je jedno od image.BINARY, image.GRAYSCALE, image.RGB565, image.BAYER, image.YUV422, image.JPEG ili image.PNG. Za komprimirane formate (image.JPEG, image.PNG) veličina po utoru procjenjuje se na 2 bpp; sličice veće od procjene izazivaju ValueError pri pozivu write().

Pregled

type() int

Vraća pozadinsku pohranu toka: FILE_STREAM za tok datoteke, MEMORY_STREAM za memorijski tok.

is_closed() bool

Vraća True ako je nad ovim objektom pozvana metoda close(). Nakon zatvaranja tok izaziva OSError("Stream closed") pri svakom daljnjem čitanju/zapisivanju/pomicanju.

count() int

Vraća broj sličica koje su trenutno pohranjene u toku. Za tokove datoteka ovo raste kako write() dodaje sličice; za memorijske tokove ovo je fiksno u trenutku konstrukcije.

offset() int

Vraća indeks trenutne sličice. Povećavaju ga read() i write(), a poništava seek().

version() int | None

Vraća verziju formata na disku za tokove datoteka (10 za V1.0, 11 za V1.1, 20 za V2.0). Vraća None za memorijske tokove.

buffer_size() int | None

Vraća veličinu međuspremnika piksela po utoru u bajtovima za memorijske tokove (veličina utora umanjena za interno knjigovodstveno zaglavlje Image). Vraća None za tokove datoteka. Koristite ovo zajedno s count() kako biste provjerili hoće li određena veličina sličice stati.

size() int

Vraća ukupan broj bajtova koje tok troši – veličinu datoteke na disku za tokove datoteka ili punu veličinu RAM međuspremnika (count * per_slot_size uključujući zaglavlje po utoru) za memorijske tokove.

U/I

write(img: Image) ImageIO

Dodaje (tok datoteke) ili pohranjuje na pomaku (memorijski tok) img i povećava offset() za jedan.

Za tokove datoteka datoteka raste kako se dodaju sličice. Zapisivanje na pomaku koji nije kraj skraćuje ostatak datoteke pa se broj može smanjiti.

Za memorijske tokove sličica se zapisuje u trenutni utor; zapisivanje izvan posljednjeg utora izaziva EOFError("End of stream"), a zapisivanje sličice veće od buffer_size() izaziva ValueError("Invalid frame size").

Vraća self kako bi se pozivi mogli ulančati.

read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None

Čita sličicu na trenutnom pomaku offset(), povećava pomak i vraća novu sličicu Image. Zrcali reprodukcijsku polovicu metode write().

copy_to_fb – kada je True (zadano) dekodirana sličica smješta se u međuspremnik slike kamere (isto mjesto na kojem završava csi.CSI.snapshot()), pa je vraćena slika Image iscrtljiva kroz pregled u IDE-u. Kada je False, sličica se umjesto toga dodjeljuje na MicroPython hrpi.

loop (samo tokovi datoteka) – kada je True (zadano) čitanje iza posljednje sličice premata natrag na prvu sličicu i nastavlja. Kada je False, poziv vraća None čim se dosegne kraj datoteke.

pause – kada je True (zadano) poziv blokira dok ne protekne izvorno snimljeni međusličični interval, pa reprodukcija teče izvornom brzinom sličica snimke. Postavite na False za reprodukciju što je brže moguće.

seek(offset: int) ImageIO

Pomiče offset() na sličicu offset. offset mora biti nenegativan; pomaci memorijskog toka moraju također biti manji od count().

Pomaci u toku datoteke prolaze kroz datoteku sličicu po sličicu od početka jer su blokovi sličica promjenjive veličine – za velike skokove očekujte vrijeme O(offset).

Vraća self kako bi se pozivi mogli ulančati.

sync() ImageIO

Ispražnjava neizvršena zapisivanja na disk za tokove datoteka (poziva sync osnovnog datotečnog sustava). Bez učinka za memorijske tokove.

Vraća self kako bi se pozivi mogli ulančati.

close() None

Zatvara tok. Oslobađa memorijski međuspremnik (memorijski tokovi) ili zatvara datoteku (tokovi datoteka). Nakon close() objekt ImageIO ne može se ponovno koristiti; naknadne operacije izazivaju OSError("Stream closed"). Dvostruki poziv close() nema učinka.

Tok ImageIO također se automatski zatvara kada ga sakupljač smeća ukloni (pri konstrukciji registrira finalizator).

Konstante

FILE_STREAM: int

Vrijednost koju vraća type() za tokove podržane datotekom.

MEMORY_STREAM: int

Vrijednost koju vraća type() za tokove u memoriji.