v4.6.0

v4.6.0 to duże wydanie z nowymi funkcjami. Najważniejsze z nich: moduł kamery został przemianowany z sensor na csi (z zachowującym wsteczną zgodność aliasem sensor), nowy moduł ml.postprocessing, obsługa sensora zdarzeniowego Prophesee GenX320, PAG7936 oraz kamer termowizyjnych FLIR Boson, nowy bootloader DFU oparty na TinyUSB, akceleracja Nema GPU oraz MicroPython 1.24. Wydanie zmienia też zakres alpha przy rysowaniu, więc zapoznaj się z opisem zmian niezgodnych poniżej.

Najważniejsze zmiany

  • sensor jest teraz także csi — moduł kamery został przemianowany na csi; sensor pozostaje jako alias zachowujący wsteczną zgodność (nie są jeszcze wymagane żadne zmiany w kodzie).

  • Nowy moduł ml.postprocessingfomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess.

  • Nowe sensory — kamera zdarzeniowa Prophesee GenX320, PAG7936 oraz termowizyjne FLIR Boson 320/640.

  • Nowy bootloader DFU — bootloader standardowego DFU oparty na TinyUSB zastępuje starszy bootloader CDC na wszystkich płytkach.

  • Nema GPU — przyspieszona grafika 2D/wektorowa na STM32.

  • MicroPython zaktualizowany do 1.24.0.

  • Zmiana niezgodna: zakres alpha przy rysowaniu zmienił się z 0–256 na 0–255 (zobacz zmianę zakresu alpha).

Nowe funkcje

  • ml.postprocessing — nowy moduł dekodujący wyjście modelu: dekoder FOMO (fomo_postprocess, find_blobs + NMS, konfigurowalny threshold) oraz yolo_v2_postprocess / yolo_v5_postprocess (z parametrami threshold, anchors, nms_threshold, nms_sigma).

  • Wizualizacja kamery zdarzeniowej — nowe metody Image.to_evt_dark() / Image.to_evt_light() oraz palety kolorów PALETTE_EVT_DARK / PALETTE_EVT_LIGHT.

  • Wizualizacja głębi — nowa metoda Image.to_depth() oraz paleta kolorów PALETTE_DEPTH (płytki z obsługą ToF).

  • Introspekcja sensora — nowy ioctl IOCTL_GET_RGB_STATS zwracający krotkę statystyk kanałów (R, Gb, Gr, B).

  • Gotowe ustawienia biasów GenX320 — nowy ioctl IOCTL_GENX320_SET_BIASES z gotowymi ustawieniami GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED.

  • omv.debug_mode() — nowa funkcja sprawdzająca, czy interfejs debugowania USB jest aktywny.

  • Nema GPU — integracja sterownika NemaGFX/NemaVG dla Cortex-M55 na STM32, z bezpośrednim przepływem GPU w miejscu dla draw_image.

  • PAG7936 — dodano wyjście kolorowych pasków, automatyczną ekspozycję / automatyczne wzmocnienie, tryb uśpienia oraz tryb MIPI.

Pozostałe zmiany i usprawnienia

  • MicroPython zaktualizowany do 1.24.0; ulab zaktualizowany do 6.7.3 (dodaje keepdims).

  • Wspólny skrypt rozruchowy — STM32 / i.MX RT / RP2 współdzielą teraz plik _boot.py, który automatycznie tworzy system plików flash/SD z domyślnymi plikami main.py i README.txt oraz zwalnia tymczasowe zmienne globalne uruchamiania.

  • Podstawy STM32N6 — podstawowa obsługa STM32N6, sterownik XSPI, wspólny sterownik MPU oraz podpisywanie oprogramowania układowego/bootloadera na STM32.

  • VM z computed-goto — włączona na STM32 i nRF dla przyspieszenia interpretera.

Poprawki błędów

Kamera i sensory:

  • Naprawiono obliczanie PCLK/ekspozycji dla OV5640 (dwie linie MIPI, skorygowana tabela dzielników).

  • Wariant MT9V0xx z Bayer-CFA przyjmuje teraz RGB565/BAYER/GRAYSCALE i wyprowadza poprawne surowe dane Bayer zamiast zgłaszać błąd.

  • Włączono korekcję winietowania obiektywu dla PAG7936 i naprawiono przesunięcie obrazu HD; set_framerate() jest teraz ograniczany w zależności od rozdzielczości.

  • Naprawiono przechwytywanie termowizyjne FLIR Lepton na i.MX RT1060 (skorygowano VoSPI CPOL/CPHA), a zrzuty obrazu z Lepton zwracają teraz konkretne kody błędów.

  • Naprawiono zaokrąglanie częstotliwości GenX320.

Przetwarzanie obrazu:

  • Naprawiono uszkodzenie pamięci w to_ndarray() na obrazach w skali szarości.

  • Naprawiono przewidywanie granic debayeringu w konwersji Bayer→RGB/skala szarości.

  • Naprawiono transpose w draw_image() na płytkach bez SDRAM (bufor dzielony na fragmenty).

  • Naprawiono obsługę argumentów logicznych w Image.binary() oraz fladze load_to_fb klasy ml.Model.

System:

  • Naprawiono konfigurację pinów SPI tylko do odbioru / tylko do nadawania na STM32 i i.MX RT.

  • Przeniesiono bufory DMA Ethernet płytki Portenta H7 do SRAM3, dzięki czemu Ethernet działa.

  • Naprawiono gubienie znaku w tekstowym wyjściu kanału debugowania przez USB; zaokrąglono w górę rozmiary dynamicznych alokacji ML, aby uniknąć zbyt małych buforów modelu.

Obsługa sprzętu i płytek

  • Prophesee GenX320 — sensor wizyjny oparty na zdarzeniach (STM32F7 + i.MX RT1060).

  • PAG7936 — sensor (z trybem MIPI).

  • FLIR Boson 320/640 — kamery termowizyjne (sterownik IDD 4).

  • Nema GPU — akceleracja na STM32.

  • STM32N6 — podstawy bootloadera/XSPI.

  • VL53L5CX — dodano obsługę pinu włączania zasilania.

Niezgodne zmiany API

Widoczne dla użytkownika niezgodności API między v4.5.9 a v4.6.0. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona swoim wpływem:

  • major — większość skryptów, które jej używały, wymaga edycji.

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

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

  • tooling — dotyczy tylko narzędzi do wgrywania / narzędzi hosta / dostępności płytek.

Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz tylko przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy hash commita prowadzi do jego diffa na GitHub. Uwaga: zmiana nazwy modułu sensorcsi w tym wydaniu nie jest niezgodna — sensor nadal działa jako alias.

Zakres alpha przy rysowaniu wynosi teraz 0–255 (major)

Argument alpha w draw_image() oraz w każdej nakładce, która go przyjmuje (FIR, ToF, wyświetlacz, TV, MJPEG, tabele alpha), używa teraz zakresu 0–255 zamiast 0–256. Skrypty, które przekazywały 256 dla pełnej nieprzezroczystości lub obliczały alpha względem 256, muszą zostać przeskalowane do 0–255.

Commit: 1f87b5bb6

Zmieniono nazwy stałych ioctl FLIR Lepton (minor)

Skrócono trzy stałe ioctl Lepton: IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP. Dołączone przykłady zostały zaktualizowane.

Commit: 12582d54d

Zmiany w API przetwarzania końcowego ML (minor)

ml.postprocessing jest nowy w tym wydaniu i jego API zmieniło się w jego trakcie: słowo kluczowe konstruktora yolo_v2_postprocess score_threshold zostało przemianowane na threshold, a puste wyniki przetwarzania końcowego zwracają teraz () zamiast []. Dołączony model yolov5_rgb_person został przemianowany na yolo_v5_224_nano. ml.apps.MicroSpeech przekazuje teraz dowolne **kwargs do audio.init() zamiast stałego gain_db=24.

Commits: d67bd1ad7, 979b4e8ee, b89b815b2, 6671d9df5, 5c2f4388c

AGAST jest domyślnym detektorem narożników (behavior)

find_keypoints() używa teraz AGAST zamiast FAST jako domyślnego detektora narożników na wszystkich płytkach. Zbiory punktów kluczowych (a co za tym idzie dopasowania deskryptorów) różnią się od poprzednich wydań — sprawdź ponownie dostrojone potoki punktów kluczowych. Strumieniowanie bufora ramki do IDE jest teraz również ograniczone do 20 Hz, aby zmniejszyć obciążenie USB.

Commits: da6bf6910, bc4e39246

Bootloader, usunięte płytki i funkcje (tooling)

Starszy bootloader CDC został zastąpiony nowym bootloaderem standardowego DFU opartym na TinyUSB na wszystkich płytkach — mechanizm aktualizacji oprogramowania układowego się zmienił; odpowiednio zaktualizuj swój przepływ pracy/narzędzia do wgrywania. Płytka OpenMV Pro, samodzielna kompilacja Raspberry Pi Pico oraz funkcja zdalnego IDE przez WiFi-debug (wifidbg) zostały usunięte.

Commits: a03fc90d8, c2e616aae, af3ea774b, f8bca9799, 59a38a0d3, 7edeb4fbe, d58d77fa2

Lista kontrolna migracji

Dla czystego przeniesienia do v4.6.0 typowa praca to:

  1. Przeskaluj każdą wartość alpha rysowania/nakładki z zakresu 0–256 do 0–255 (zmiana zakresu alpha).

  2. Zmień nazwy wszelkich stałych ioctl FLIR Lepton na ich skrócone formy (zmiana nazw ioctl Lepton).

  3. Jeśli używałeś nowych procesorów końcowych ML, przełącz score_threshold na threshold, obsłuż pusty wynik () i zaktualizuj nazwę modelu yolo_v5_224_nano (zmiany w ML).

  4. Sprawdź ponownie potoki oparte na find_keypoints() pod kątem zmiany detektora AGAST (zmiana detektora narożników).

  5. Zaktualizuj swój przepływ pracy wgrywania oprogramowania układowego dla nowego bootloadera DFU (zmiany bootloadera/płytek).