v4.5.3#

v4.5.3 to duże wydanie: autofokus OV5640, rysowanie linii z antyaliasingiem, zintegrowany z głównym drzewem sprzętowy dekoder JPEG, znaczne rozszerzenie możliwości i.MX RT (RT1060) oraz szeroki zestaw poprawek kamery/ISP. Kilka rzadko używanych metod obrazu zostało usuniętych, a niektóre API ISP/wyświetlacza uległy zmianie — zapoznaj się z przełomowymi zmianami poniżej.

Najważniejsze zmiany#

  • Autofokus OV5640 — włączony na OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), wraz z przykładem.

  • Rysowanie draw_line() z antyaliasingiem oraz zintegrowany z głównym drzewem sprzętowy dekoder JPEG STM32 (szybsza dekompresja JPEG).

  • OpenMV RT1060 zyskał ulab, operacje ISP, set_framerate() / set_frame_callback(), znacznie większy bufor ramki oraz sterownik CAN.

  • Zmiana przełomowa: metody Image.div() / cartoon() / mul() zostały usunięte, a niektóre API ISP/wyświetlacza uległy zmianie — zobacz przełomowe zmiany.

Nowe funkcje#

  • Autofokus OV5640 — oprogramowanie układowe autofokusa jest włączone na OPENMV4, OPENMV4P oraz OPENMV RT1060; wyzwól je za pomocą sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Dodano nowy przykład 07-Sensor-Control/autofocus.py.

  • Rysowanie linii z antyaliasingiemdraw_line() zyskało antyaliasing.

  • Niestandardowe kontrolery wyświetlaczy SPISPIDisplay przyjmuje teraz słowo kluczowe controller= i udostępnia hak bus_write do niestandardowych sekwencji inicjalizacji/poleceń.

  • Ulepszenie Image.ccm() — przyjmuje teraz zagnieżdżone macierze 3x3 / 4x3 / 3x4 / 4x4 oraz tablice ulab (z opcjonalnym wierszem przesunięcia dla każdego kanału); dodano przykład korekcji kolorów.

  • Przechwytywanie JPEG na i.MX RT — przechwytywanie sensor.JPEG na Arduino Portenta/Nicla Vision/Giga, a także set_framerate() i set_frame_callback() na porcie mimxrt.

  • Walidacja modeli TFLite — modele zawierają teraz skrót porządku operatorów oraz rozmiar zbioru operatorów.

  • WiFi — dodano stałe trybów zabezpieczeń CYW43; nowe przykładowe skrypty sterowania płytą i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

Inne zmiany i ulepszenia#

  • MicroPython zaktualizowany do 1.22; CMSIS zaktualizowany do 5.9.0.

  • Zintegrowany z głównym drzewem sprzętowy dekoder JPEG STM32 — szybsza dekompresja JPEG na wbudowanym kodeku.

  • Zoptymalizowano Image.invert() / negate() oraz binarne/matematyczne operacje na obrazach (intrinsics CMSIS).

  • Biblioteki rpc i vl53l1x zostały uprzenośnione (używają machine / time zamiast pyb), dzięki czemu działają na portach innych niż STM32.

  • Przyspieszany przez DMA memcpy bufora ramki na OpenMV H7 / H7 Plus / Pro / Pure Thermal oraz Arduino Giga / Nicla Vision / Portenta H7; STM32 skanuje teraz urządzenia I2C raz na skanowanie, co przyspiesza rozruch.

Poprawki błędów#

Kamera i sensory:

  • Naprawiono XCLK kamery STM32, zapewniając prawdziwy 50% cykl pracy, oraz błąd występujący przy ustawieniu częstotliwości zegara kamery na zero; naprawiono kadrowanie+transpozycję Bayer, przesunięcie kolorów YUV422 oraz set_windowing() na porcie mimxrt.

  • Naprawiono sondowanie identyfikatora układu GC2145 oraz hmirror/vflip na obróconych montażach; naprawiono PAJ6100 na RT1062 oraz przepełnienie bufora SPI PixArt PAJ7620/PAW3902.

Przetwarzanie obrazu:

  • Naprawiono przycinanie roi w find_rects(), obcinanie ułamkowego przesunięcia w morph(), domyślne wartości kontrastu/jasności w image.gamma(), przesunięcia A/B w get_threshold() na RGB565 oraz dekodowanie JPEG wymiarów niebędących wielokrotnością 8.

System i biblioteki:

  • machine.LED.value() bez argumentu zwraca teraz stan diody LED zamiast go czyścić; naprawiono deinicjalizację SPI SSEL na współdzielonej magistrali, machine.deepsleep() na RT1062, awarię TF przy brakujących operatorach oraz automatyczną aktywację karty sieciowej WINC1500/ninaw10 przy connect().

Obsługa sprzętu i płyt#

  • OpenMV RT1060 — włączono ulab i operacje ISP, większy bufor ramki (10M→20M) / fb_alloc (2M→11M), przywrócono sterownik CAN, więcej sterty.

  • Arduino GIGA — obsługa kamery GC2145, z automatycznym wykrywaniem GC2145/OV5640 (współdzielą adres I2C).

  • i.MX RT — obsługa przechwytywania sensor.JPEG.

Przełomowe zmiany w API#

Widoczne dla użytkownika zmiany przełomowe w API między v4.5.2 a v4.5.3. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona swoim wpływem:

  • minor — wąskie API; dotyczy tylko skryptów, które go używały.

  • behavior — to samo API, inne wyniki; ponownie sprawdź dostrojone skrypty.

Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz po prostu przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy skrót commita prowadzi do jego diffa na GitHubie.

Usunięte metody obrazu (minor)#

Metody Image.div(), Image.cartoon() (oraz jej przykład) i Image.mul() zostały usunięte.

Commity: 7c932602e, 055a468b8, 4fe7fb63b

API modułu wyświetlacza (minor)#

Usunięto starszy zamiennik nazwy modułu udisplay — moduł jest rejestrowany wyłącznie jako display. Metody dsi_write() / dsi_read() dostępne tylko dla DSI zostały zastąpione przez bus_write() / bus_read(), które są teraz dostępne na wszystkich kontrolerach wyświetlaczy.

Commity: 7df6694c3, 7d1f378a0

Zmiany API MQTT i tf.regression (minor)#

Klasa MQTTClient biblioteki mqtt została przebudowana: port jest teraz wymagany, dodano nowe słowa kluczowe konstruktora ssl_params / callback oraz argument timeout w connect(), usunięto stare domyślne wartości ssl= / port=0, a check_msg() jest teraz nieblokujące. tf.regression() zostało przepisane — jego sygnatura to teraz regression(model, array) i obsługuje modele 1D/2D/3D oraz skwantyzowane (int8).

Commity: d12874c63, c5ec576c1

Zmiany zachowania ISP / sensora (behavior)#

Image.awb() zostało przebudowane — tryb gray-world (domyślny) kontra white-patch (max=True) jest teraz jawny, a argument max oraz argumenty gamma / contrast / brightness metody Image.gamma() są teraz wyłącznie słowami kluczowymi (wywołania pozycyjne muszą zostać zaktualizowane). Transpozycja obrazu jest teraz wyłączona dla YUV422 (wcześniej dawała nieprawidłowy wynik), a przesunięcie kolorów YUV422 zostało skorygowane tak, by odpowiadało Bayer. Ścieżka JPEG STM32 zgłasza teraz błąd przy niezgodności geometrii JPEG zamiast tworzyć uszkodzony obraz, a tryb AP WiFi stosuje teraz domyślny tryb zabezpieczeń na portach STM32 oraz i.MX RT.

Commity: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Lista kontrolna migracji#

Dla czystego przeniesienia do v4.5.3 typowa praca to:

  1. Zaprzestań używania Image.div() / cartoon() / mul() (usunięte metody).

  2. Importuj moduł wyświetlacza jako display i przełącz dsi_write/ dsi_read na bus_write/bus_read (zmiana API wyświetlacza).

  3. Zaktualizuj konstruowanie MQTTClient (port jest wymagany; ssl_params/callback) oraz wszelkie wywołania tf.regression() (zmiany API bibliotek).

  4. Przekazuj argumenty max w awb() oraz gamma/contrast/ brightness w gamma() jako argumenty słów kluczowych i ponownie sprawdź założenia dotyczące YUV422/transpozycji oraz zabezpieczeń trybu AP (zmiany ISP/sensora).