v4.7.0¶
v4.7.0 to duże wydanie z nowymi funkcjami. Najważniejsze z nich: nowa płytka OpenMV AE3 (Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) z dwurdzeniowym modelem programowania openamp, system plików tylko do odczytu ROMFS (/rom) z dołączonymi modelami i kaskadami, obsługa VL53L8CX 8x8 time-of-flight, nowe procesory końcowe YOLOv8 / YOLO-LC oraz MicroPython 1.25. Wydanie zmienia też sposób ładowania wbudowanych modeli i kaskad Haara, więc zapoznaj się z opisem zmian niezgodnych poniżej.
Najważniejsze zmiany¶
Płytka OpenMV AE3 — płytka Alif Ensemble (Cortex-M55 + Ethos-U55 NPU), z pełnym portem, bootloaderem i ROMFS.
Dwurdzeniowy moduł
openamp— przenoszenie pracy na drugi rdzeń Alif przez RPMsg (dekorator@async_remote,Endpoint/EndpointIO).ROMFS — system plików tylko do odczytu
/romz wbudowanymi modelami TFLite i kaskadami Haara oraz nowy kreator hostatools/mkromfs.py.Obsługa wielostrefowego sensora VL53L8CX 8x8 time-of-flight.
Nowe procesory końcowe ML —
yolo_v8_postprocessorazyolo_lc_postprocess.MicroPython zaktualizowany do 1.25.0.
Zmiana niezgodna: wbudowane modele i kaskady Haara ładują się teraz z
/rompo ścieżce (zobacz zmianę ml.Model i zmianę kaskad Haara).
Nowe funkcje¶
OpenMV AE3 — nowa płytka Alif Ensemble (rdzeń aplikacyjny Cortex-M55 + Ethos-U55 NPU), z portem, bootloaderem, konfiguracją płytki, diodą RGB LED oraz obsługą ROMFS.
openamp— nowy moduł dla modelu RPC dwurdzeniowego Alif (Open-AMP / RPMsg):Endpoint,EndpointIO,new_service_callbackoraz dekorator@async_remotedo przenoszenia zserializowanych funkcji na drugi rdzeń. Rdzenie HE/HP dostarczają domyślny moduł uruchamiający zadania_boot.pyoparty na asyncio.audio— port Alif dodaje moduł audio (mikrofon PDM) ze strumieniowym API opartym na wywołaniach zwrotnych (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) na AE3.ROMFS — system plików tylko do odczytu
/romz wbudowanymi zasobami (modele TFLite, kaskady Haara, …) pakowanymi osobno dla każdej płytki, nowe narzędzie hostatools/mkromfs.py(tflite, tflite+vela, kaskada Haara, tekst, plik binarny) oraz pomocnikscripts/libraries/romfs.pyudostępniającyls_romfs().Przetwarzanie końcowe ML — nowe klasy
yolo_v8_postprocess(YOLOv8) iyolo_lc_postprocess(lekki wariant tiny-YOLOv2 z domyślnymi anchorami zoptymalizowanymi pod systemy wbudowane), każda przyjmującathreshold,nms_thresholdoraznms_sigma.Anti-flicker GenX320 — nowy ioctl
IOCTL_GENX320_SET_AFKdo włączania i konfigurowania filtra anti-flicker sensora zdarzeniowego (min./maks. częstotliwość migotania w Hz), z przykłademgenx320_grayscale_set_afk.py.VL53L8CX — obsługa wielostrefowego sensora 8x8 time-of-flight przez moduł
tof(automatycznie wykrywany, 8x8 przy 15 Hz).
Pozostałe zmiany i usprawnienia¶
MicroPython zaktualizowany do 1.25.0 (porty STM32 i i.MX RT), z dodanym portem Alif z upstream oraz usuniętymi starszymi sterownikami BT-HCI z portów STM32 / i.MX RT.
GenX320 — nowa sekwencja ISSD podwaja wewnętrzny zegar pikseli (24 → 48 MHz) dla wyższych liczb klatek.
STM32N6 / ST Edge AI — podstawy wdrażania modeli Neural-ART na STM32N6 (narzędzia ST Edge AI oraz obsługa ROMFS).
PAG7936 — ustawiana jest teraz przepływność bitowa CSI PHY, poprawiając działanie tego sensora.
Poprawki błędów¶
Kamera i sensory:
Naprawiono IMU przez I2C — płytki podłączające IMU LSM6DSx przez I2C inicjalizują się teraz i odczytują poprawnie (ścieżka I2C wcześniej używała wadliwej ścieżki odczytu i błędnych stałych).
Inicjalizacja FLIR Boson ponawia teraz próbę do 10 razy dla starszych sensorów (< IDD 4.x), których uruchomienie trwa ~10 s, a fabryczne ustawienia domyślne są przywracane przy resecie, dzięki czemu zewnętrznie wczytane ustawienia nie mogą zepsuć wyjścia wideo.
Naprawiono
psee_ehc_activate_overrideGenX320, które zapisywało błędny (zerowy) czas akumulacji.Na płytkach STM32 bez sprzętu FastMode+ żądanie trybu fast I2C jest teraz właściwie zabezpieczone zamiast po cichu błędnie konfigurować magistralę.
Uczenie maszynowe:
Naprawiono zbieranie ramek ograniczających oraz obsługę
np.nonzerow procesorach końcowych YOLOv2 / YOLOv5, poprawiając niezawodność wykrywania.
Obsługa sprzętu i płytek¶
OpenMV AE3 — nowa płytka Alif Ensemble (Cortex-M55 + Ethos-U55 NPU).
VL53L8CX — wielostrefowy sensor 8x8 time-of-flight; sensor ToF w AE3 został zmieniony z VL53L5CX na VL53L8CX.
STM32N6 — podstawy wdrażania modeli ST Edge AI (Neural-ART).
Niezgodne zmiany API¶
Widoczne dla użytkownika niezgodności API między v4.6.20 a v4.7.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.
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, aby uzyskać skróconą listę zadań. Każdy hash commita prowadzi do jego diffa na GitHub.
Wbudowane modele ładują się po ścieżce, a nie po nazwie (major)¶
ml.Model nie ładuje już wbudowanego modelu z samego ciągu nazwy. Modele są teraz ładowane z systemu plików / ROMFS po ścieżce:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
Atrybut model.labels po stronie C został usunięty; etykiety są teraz ładowane przez wrapper Pythona ml.Model z towarzyszącego pliku <model>.txt (None, jeśli nie istnieje). Wszystkie dołączone przykłady oraz ml/apps.py zostały zaktualizowane do ścieżek /rom/*.tflite.
Kaskady Haara ładują się z ROMFS (minor)¶
image.HaarCascade() ładuje teraz wbudowane kaskady przez VFS / ROMFS. Domyślny plik kaskady frontalnej twarzy został przemianowany z haarcascade_frontalface_default.xml na haarcascade_frontalface.xml, a niepowodzenie ładowania zgłasza teraz RuntimeError („Failed to load Haar cascade”) zamiast OSError.
Commit: 9de1220d8
Semantyka tof.reset() / tof.deinit() (behavior)¶
W module tof reset() było wcześniej aliasem init() i nie istniał prawdziwy deinit. tof.reset() wykonuje teraz rzeczywisty reset sensora, a tof.deinit() poprawnie wyłącza sensor (z obsługą wyłączania VL53L5CX). Kod, który polegał na tym, że reset() ponownie inicjalizuje sensor, powinien zostać sprawdzony.
Ograniczenia czasowe i trybu zdarzeniowego GenX320 (behavior)¶
Nowa sekwencja ISSD GenX320 zmienia podstawę czasu sensora: argumenty liczby klatek i ekspozycji są teraz wyrażane w jednostkach 1 MHz zamiast być skalowane zegarem, a wygaszanie HSYNC jest dynamicznie dostosowywane do żądanej liczby klatek. Skrypty, które na sztywno zakodowały wartości czasowe GenX320, muszą zostać ponownie dostrojone. Przechwytywanie w trybie zdarzeniowym zgłasza teraz błąd, gdy włączona jest transpozycja obrazu (jest ona nieobsługiwana w tej konfiguracji).
Lista kontrolna migracji¶
Dla czystego przeniesienia do v4.7.0 typowa praca to:
Zmień ładowanie wbudowanego modelu z ciągu nazwy na ścieżkę
/rom/<name>.tflitei dostarcz etykiety przez towarzyszący plik<name>.txt(zmiana ml.Model).Zaktualizuj
haarcascade_frontalface_default.xmlnahaarcascade_frontalface.xmli przechwytujRuntimeError(a nieOSError) przy niepowodzeniu ładowania kaskady (zmiana kaskad Haara).Usuń kod, który polegał na tym, że
tof.reset()ponownie inicjalizuje sensor (zmiana tof).Dostrój ponownie wszelkie na sztywno zakodowane wartości liczby klatek / ekspozycji GenX320 do jednostek 1 MHz i nie włączaj transpozycji w trybie zdarzeniowym (zmiana GenX320).