klasa ImageIO – obiekt ImageIO¶
Klasa ImageIO zapisuje i odtwarza strumienie ramek Image w natywnym, dyskowym formacie OpenMV. Pojedynczy strumień może przechowywać heterogeniczne ramki (o różnych formatach pikseli / rozmiarach) i zapisuje dla każdej z nich odstęp między ramkami, dzięki czemu odtwarzanie odtwarza oryginalną liczbę klatek na sekundę.
Istnieją dwa magazyny zaplecza:
Strumień plikowy – ramki są odczytywane z pliku w systemie plików / dopisywane do niego. Plik zaczyna się od 16-bajtowego nagłówka magicznego
OMV IMG STR Vx.y, po którym następują fragmenty poszczególnych ramek. Bieżący moduł zapisujący generujeV2.0; starsze plikiV1.0iV1.1są nadal odczytywalne.Strumień pamięciowy – ramki są odczytywane z bufora RAM o stałym rozmiarze, przydzielonego w czasie konstrukcji / do niego zapisywane. Przydatne do przepuszczania ramek przez filtry, które wymagają nagrania, bez naruszania systemu plików.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Tworzy strumień
ImageIO.Jeśli
pathjest łańcuchem znaków, otwierany jest strumień plikowy pod tą ścieżką.modemusi być jednym z:Jeśli
pathjest 3-elementową krotką(w, h, pixformat), przydzielany jest strumień pamięciowy.modejest wtedy całkowitą liczbą gniazd ramek do wstępnego przydzielenia. Bufor ma rozmiar dlacountramek o(w, h, pixformat)i nie może rosnąć po utworzeniu.pixformatjest jednym zimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGlubimage.PNG. Dla formatów skompresowanych (image.JPEG,image.PNG) rozmiar na gniazdo szacowany jest na 2 bpp; ramki większe niż oszacowanie zgłaszająValueErrorw czasie wywołaniawrite().Inspekcja¶
- type() int¶
Zwraca magazyn zaplecza strumienia:
FILE_STREAMdla strumienia plikowego,MEMORY_STREAMdla strumienia pamięciowego.
- is_closed() bool¶
Zwraca
True, jeśli na tym obiekcie wywołanoclose(). Po zamknięciu strumień zgłaszaOSError("Stream closed")przy każdej dalszej operacji odczytu/zapisu/przewijania.
- count() int¶
Zwraca liczbę ramek aktualnie przechowywanych w strumieniu. Dla strumieni plikowych rośnie ona w miarę dopisywania ramek przez
write(); dla strumieni pamięciowych jest stała w czasie konstrukcji.
- offset() int¶
Zwraca bieżący indeks ramki. Zwiększany przez
read()iwrite(), zerowany przezseek().
- version() int | None¶
Zwraca wersję formatu dyskowego dla strumieni plikowych (
10dlaV1.0,11dlaV1.1,20dlaV2.0). ZwracaNonedla strumieni pamięciowych.
Wejście/wyjście¶
- write(img: Image) ImageIO¶
Dopisuje (strumień plikowy) lub zapisuje pod przesunięciem (strumień pamięciowy)
imgi zwiększaoffset()o jeden.Dla strumieni plikowych plik rośnie w miarę dopisywania ramek. Zapis pod przesunięciem innym niż koniec obcina resztę pliku, dzięki czemu liczba ramek może się zmniejszyć.
Dla strumieni pamięciowych ramka jest zapisywana do bieżącego gniazda; zapis poza ostatnim gniazdem zgłasza
EOFError("End of stream"), a zapis ramki większej niżbuffer_size()zgłaszaValueError("Invalid frame size").Zwraca
self, dzięki czemu wywołania można łączyć w łańcuch.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Odczytuje ramkę spod bieżącego
offset(), zwiększa przesunięcie i zwraca nowyImage. Odzwierciedla odtwarzającą połowęwrite().copy_to_fb– gdyTrue(domyślnie), zdekodowana ramka jest umieszczana w buforze ramki kamery (w tym samym miejscu, gdzie trafiacsi.CSI.snapshot()), dzięki czemu zwracanyImagemożna rysować w podglądzie IDE. GdyFalse, ramka jest zamiast tego przydzielana na stercie MicroPython.loop(tylko strumienie plikowe) – gdyTrue(domyślnie), odczyt poza ostatnią ramką przewija z powrotem do pierwszej ramki i kontynuuje. GdyFalse, wywołanie zwracaNonepo osiągnięciu końca pliku.pause– gdyTrue(domyślnie), wywołanie blokuje do upłynięcia pierwotnie zarejestrowanego odstępu między ramkami, dzięki czemu odtwarzanie przebiega z natywną liczbą klatek na sekundę nagrania. Ustaw naFalse, aby odtwarzać tak szybko, jak to możliwe.
- seek(offset: int) ImageIO¶
Przesuwa
offset()do ramkioffset.offsetmusi być nieujemne; przesunięcia strumienia pamięciowego muszą być także mniejsze niżcount().Przewijanie w strumieniu plikowym przechodzi przez plik ramka po ramce od początku, ponieważ fragmenty ramek mają zmienny rozmiar – przy dużych skokach należy oczekiwać czasu O(offset).
Zwraca
self, dzięki czemu wywołania można łączyć w łańcuch.
- sync() ImageIO¶
Opróżnia oczekujące zapisy na dysk dla strumieni plikowych (wywołuje
syncna poziomie systemu plików). Brak operacji dla strumieni pamięciowych.Zwraca
self, dzięki czemu wywołania można łączyć w łańcuch.
- close() None¶
Zamyka strumień. Zwalnia bufor pamięci (strumienie pamięciowe) lub zamyka plik (strumienie plikowe). Po
close()obiektuImageIOnie można ponownie użyć; kolejne operacje zgłaszająOSError("Stream closed"). Dwukrotne wywołanieclose()jest operacją pustą.ImageIOjest także zamykany automatycznie, gdy zostaje usunięty przez odśmiecacz pamięci (rejestruje finalizator w czasie konstrukcji).
Stałe¶