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ótget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation() oraz obrót zrzutu obrazu sterowany IMU.

  • Korekcja perspektywyrotation_corr() zyskuje słowa kluczowe fov i corners (4-punktowe).

  • Nowy sprzęt — Arduino Portenta H7, HIMAX HM01B0 oraz kamera OV7690.

  • Zmiana łamiąca zgodność: set_pixformat() / set_framesize() zwracają teraz None, funkcja sensor.set_framerate() została usunięta, TensorFlow został usunięty na M7, a lens_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() oraz imu.sleep() (LSM6DS3 na OpenMV 4 / Portenta).

  • Gettery sensora — dodano sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose() oraz set_auto_rotation() / get_auto_rotation().

  • Automatyczny obrótsensor.snapshot() wykorzystuje IMU do odwracania / lustrzanego odbicia / transpozycji ramek, gdy automatyczny obrót jest włączony.

  • rotation_corr() — dodano słowa kluczowe fov i corners (4-punktowa perspektywa) wraz z przykładami korekcji perspektywy.

  • lcd.init() — dodano argument słowny bgr.

  • collections.deque — włączone w kompilacji MicroPython.

  • Dodano stałe identyfikatorów sensor.OV7690 i sensor.HM01B0 oraz przykład filtra obrazu w stylu numpy z użyciem ulab.

Pozostałe zmiany i ulepszenia

  • Znacząco zoptymalizowano filtry obrazu (mediana / dominanta / średnia / …) oraz find_circles() i korekcję obiektywu; alloc_extra_fb moż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_fb w tf.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.

Commity: b36460a36, 2b26ca17b

Lista kontrolna migracji

Dla czystego przeniesienia do v3.6.1 typowa praca to:

  1. Usuń wywołania sensor.set_framerate() (usunięcie set_framerate).

  2. Przenieś obciążenia TensorFlow poza OpenMV Cam M7 (zmiana TensorFlow na M7).

  3. Przestań polegać na wartości zwracanej przez set_pixformat() / set_framesize() i przechwytuj ValueError dla nieobsługiwanych formatów pikseli (zmiana wartości zwracanej).

  4. Zapewnij parzyste wymiary obrazu przed lens_corr() / linpolar() / logpolar() (wymóg parzystych wymiarów).

Wszystkie pozostałe skrypty działają bez zmian.