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).