v3.6.1¶
v3.6.1 to duże wydanie. Wprowadza moduł imu (LSM6DS3), zestaw nowych getterów API sensor z automatycznym obrotem sterowanym IMU, 4-punktową korekcję perspektywy rotation_corr() oraz uruchamia płytkę Arduino Portenta H7 z kamerami HIMAX HM01B0 i OV7690. Zmieniono kilka API sensor / image, a TensorFlow został usunięty na M7 — przeczytaj poniższe zmiany łamiące zgodność.
Najważniejsze zmiany¶
Moduł
imu— akcelerometr / żyroskop / temperatura / roll / pitch na LSM6DS3 (OpenMV 4 / Portenta).Gettery sensora + automatyczny obrót —
get_pixformat()/get_framesize()/get_hmirror()/get_vflip()/get_windowing(),set_transpose()/set_auto_rotation()oraz obrót zrzutu obrazu sterowany IMU.Korekcja perspektywy —
rotation_corr()zyskuje słowa kluczowefovicorners(4-punktowe).Nowy sprzęt — Arduino Portenta H7, HIMAX HM01B0 oraz kamera OV7690.
Zmiana łamiąca zgodność:
set_pixformat()/set_framesize()zwracają terazNone, funkcjasensor.set_framerate()została usunięta, TensorFlow został usunięty na M7, alens_corr()/linpolar()wymagają teraz parzystych wymiarów — zobacz zmiany łamiące zgodność.
Nowe funkcje¶
imu— nowy moduł IMU:imu.acceleration_mg(),imu.angular_rate_mdps(),imu.temperature_c(),imu.roll(),imu.pitch()orazimu.sleep()(LSM6DS3 na OpenMV 4 / Portenta).Gettery sensora — dodano
sensor.get_pixformat(),get_framesize(),get_hmirror(),get_vflip(),get_windowing(),set_transpose()/get_transpose()orazset_auto_rotation()/get_auto_rotation().Automatyczny obrót —
sensor.snapshot()wykorzystuje IMU do odwracania / lustrzanego odbicia / transpozycji ramek, gdy automatyczny obrót jest włączony.rotation_corr()— dodano słowa kluczowefovicorners(4-punktowa perspektywa) wraz z przykładami korekcji perspektywy.lcd.init()— dodano argument słownybgr.collections.deque— włączone w kompilacji MicroPython.Dodano stałe identyfikatorów
sensor.OV7690isensor.HM01B0oraz przykład filtra obrazu w stylu numpy z użyciemulab.
Pozostałe zmiany i ulepszenia¶
Znacząco zoptymalizowano filtry obrazu (mediana / dominanta / średnia / …) oraz
find_circles()i korekcję obiektywu;alloc_extra_fbmoże teraz przydzielać dowolną liczbę bajtów; model wykrywania osób został przebudowany z nową operacją average-pool.
Poprawki błędów¶
Kamera i sensory:
Naprawiono
sleep()na OV2640 (używa teraz rejestru standby COM2 zamiast pinu power-down), konfigurację pinu FSYNC, polaryzacje HSYNC/VSYNC oraz adres/skanowanie I2C dla HM01B0, GPIO power-down sensora i pin reset kamery na Portenta oraz wyłączono automatyczny obrót, gdy pitch IMU jest bliski 90°/270°.
Obrazowanie i system:
Naprawiono błąd sprawdzania granic w filtrze obrazu, hardfault przy wyłączaniu D-cache, uruchamianie na płytkach bez karty SD, błąd
load_to_fbwtf.load(), przepełnienie stosu wykrywania osób (stos H7 zwiększony do ≥12 KB) oraz przesunięcia deskryptora USB dla trybu high-speed na OpenMV 4 Plus.
Sprzęt i obsługa płytek¶
Arduino Portenta H7 — początkowe uruchomienie płytki (konfiguracja zegara/OSC/HSE STM32H747, nagłówki CMSIS, ADC, SDRAM, Arduino USB PID).
HIMAX HM01B0 — nowy sterownik kamery monochromatycznej (Bayer, zegar z oscylatora zewnętrznego).
OV7690 — nowy sterownik kamery.
LSM6DS3 IMU — OpenMV 4 / Portenta.
Zmiany API łamiące zgodność¶
Widoczne dla użytkownika zmiany API łamiące zgodność między v3.6.0 a v3.6.1. Zakres: moduły C w Pythonie w modules/ oraz biblioteki Pythona w scripts/libraries/.
Każda zmiana jest oznaczona jej wpływem:
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 po prostu przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy hash commita prowadzi do jego diffa na GitHubie.
sensor.set_framerate() usunięto (minor)¶
Pusta zaślepka sensor.set_framerate() została usunięta; jej wywołanie powoduje teraz zgłoszenie AttributeError. Usuń to wywołanie i kontroluj czas trwania ramki za pomocą framesize/ekspozycji. (Działające set_framerate() zostaje ponownie wprowadzone w v4.0.2.)
Commity: 705e98f91
TensorFlow usunięty na OpenMV Cam M7 (minor)¶
TensorFlow (moduł tf) został wyłączony na OpenMV Cam M7 / OpenMV 3 (nie mieści się już). import tf na M7 kończy się niepowodzeniem — użyj kamery klasy H7 dla TensorFlow. (tf zostaje ponownie włączony na F7 w v3.6.3.)
Commity: 2ae875077
set_pixformat() / set_framesize() zwracają None (behavior)¶
sensor.set_pixformat() i sensor.set_framesize() zwracają teraz None zamiast True, a nieobsługiwany format pikseli zgłasza teraz ValueError zamiast asercji. Kod, który sprawdzał wartość zwracaną (np. if sensor.set_pixformat(...):), musi przestać to robić, a kod przechwytujący AssertionError dla nieobsługiwanych formatów musi przechwytywać ValueError.
Commity: f314ac4e7
lens_corr() / linpolar() / logpolar() wymagają parzystych wymiarów (behavior)¶
image.lens_corr() oraz image.linpolar() / image.logpolar() wymagają teraz parzystej szerokości i wysokości obrazu i zgłaszają błąd przy nieparzystych wymiarach. Przed wywołaniem tych metod przytnij lub przeskaluj obraz do parzystych wymiarów.
Lista kontrolna migracji¶
Dla czystego przeniesienia do v3.6.1 typowa praca to:
Usuń wywołania
sensor.set_framerate()(usunięcie set_framerate).Przenieś obciążenia TensorFlow poza OpenMV Cam M7 (zmiana TensorFlow na M7).
Przestań polegać na wartości zwracanej przez
set_pixformat()/set_framesize()i przechwytujValueErrordla nieobsługiwanych formatów pikseli (zmiana wartości zwracanej).Zapewnij parzyste wymiary obrazu przed
lens_corr()/linpolar()/logpolar()(wymóg parzystych wymiarów).
Wszystkie pozostałe skrypty działają bez zmian.