v3.6.1

v3.6.1 je velké vydání. Zavádí modul imu (LSM6DS3), sadu nových getter API modulu sensor s automatickým otáčením řízeným IMU, 4bodovou perspektivní korekci rotation_corr() a zprovozňuje Arduino Portenta H7 s kamerami HIMAX HM01B0 a OV7690. Některá API modulů sensor / image se změnila a na M7 byl odstraněn TensorFlow — přečtěte si přelomové změny níže.

Hlavní novinky

  • Modul imu — akcelerometr / gyroskop / teplota / náklon (roll) / sklon (pitch) na LSM6DS3 (OpenMV 4 / Portenta).

  • Sensor gettery + automatické otáčeníget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation() a otáčení snímků řízené IMU.

  • Perspektivní korekcerotation_corr() získává klíčová slova fov a corners (4 body).

  • Nový hardware — Arduino Portenta H7, HIMAX HM01B0 a kamera OV7690.

  • Přelomová změna: set_pixformat() / set_framesize() nyní vrací None, sensor.set_framerate() byla odstraněna, na M7 byl odstraněn TensorFlow a lens_corr() / linpolar() nyní vyžadují sudé rozměry — viz přelomové změny.

Nové funkce

  • imu — nový modul IMU: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch() a imu.sleep() (LSM6DS3 na OpenMV 4 / Portenta).

  • Sensor gettery — přidány sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose() a set_auto_rotation() / get_auto_rotation().

  • Automatické otáčenísensor.snapshot() používá IMU k překlopení / zrcadlení / transponování snímků, když je automatické otáčení povoleno.

  • rotation_corr() — přidána klíčová slova fov a corners (4bodová perspektiva) spolu s příklady perspektivní korekce.

  • lcd.init() — přidán klíčový argument bgr.

  • collections.deque — povoleno v sestavení MicroPython.

  • Přidány id konstanty sensor.OV7690 a sensor.HM01B0 a příklad obrazového filtru ve stylu numpy s ulab.

Další změny a vylepšení

  • Výrazně optimalizovány obrazové filtry (median / mode / mean / …), find_circles() a korekce objektivu; alloc_extra_fb nyní dokáže alokovat libovolný počet bajtů; model detekce osob byl přestavěn s novou operací average-pool.

Opravy chyb

Kamera a senzory:

  • Opraveno sleep() u OV2640 (nyní používá standby registr COM2 namísto power-down pinu), konfigurace pinu FSYNC, polarity HSYNC/VSYNC u HM01B0 a jeho I2C adresa/skenování, GPIO power-down senzoru Portenta a reset pin kamery a vypnuto automatické otáčení, když je sklon (pitch) IMU blízko 90°/270°.

Zpracování obrazu a systém:

  • Opravena chyba kontroly hranic v obrazovém filtru, hardfault při vypínání D-cache, bootování na deskách bez SD karty, chyba load_to_fb u tf.load(), přetečení zásobníku u detekce osob (zásobník H7 zvýšen na ≥12 KB) a offsety USB deskriptorů pro high-speed režim na OpenMV 4 Plus.

Hardware a podpora desek

  • Arduino Portenta H7 — počáteční zprovoznění desky (konfigurace hodin/OSC/HSE STM32H747, hlavičky CMSIS, ADC, SDRAM, Arduino USB PID).

  • HIMAX HM01B0 — nový ovladač monochromatické kamery (Bayer, hodiny z externího oscilátoru).

  • OV7690 — nový ovladač kamery.

  • LSM6DS3 IMU — OpenMV 4 / Portenta.

Přelomové změny API

Uživatelsky viditelné přelomové změny API mezi v3.6.0 a v3.6.1. Rozsah: Python C-moduly v modules/ a Python knihovny v scripts/libraries/.

Každá změna je označena svým dopadem:

  • minor — úzké API; ovlivní pouze skripty, které jej používaly.

  • behavior — stejné API, jiné výsledky; znovu zkontrolujte vyladěné skripty.

Změny jsou seskupeny podle dopadu v tomto pořadí. Pokud chcete jen přenést svůj kód, přejděte na kontrolní seznam migrace na konci. Každý hash commitu odkazuje na svůj diff na GitHubu.

sensor.set_framerate() odstraněna (minor)

Prázdná zástupná funkce sensor.set_framerate() byla odstraněna; její volání nyní vyvolá AttributeError. Volání odstraňte a časování snímků řiďte místo toho pomocí framesize/expozice. (Funkční set_framerate() je znovu zavedena v v4.0.2.)

Commity: 705e98f91

TensorFlow odstraněn na OpenMV Cam M7 (minor)

TensorFlow (modul tf) byl zakázán na OpenMV Cam M7 / OpenMV 3 (již se nevejde). import tf na M7 selže — pro TensorFlow použijte kameru třídy H7. (tf je znovu povolen na F7 v v3.6.3.)

Commity: 2ae875077

set_pixformat() / set_framesize() vrací None (behavior)

sensor.set_pixformat() a sensor.set_framesize() nyní vrací None místo True a nepodporovaný formát pixelů nyní vyvolá ValueError místo assertion. Kód, který kontroloval návratovou hodnotu (např. if sensor.set_pixformat(...):), to musí přestat dělat, a kód, který zachytával AssertionError pro nepodporované formáty, musí zachytávat ValueError.

Commity: f314ac4e7

lens_corr() / linpolar() / logpolar() vyžadují sudé rozměry (behavior)

image.lens_corr() a image.linpolar() / image.logpolar() nyní vyžadují sudou šířku a výšku obrazu a při lichých rozměrech vyvolají chybu. Před voláním těchto metod obraz ořízněte nebo změňte jeho velikost na sudé rozměry.

Commity: b36460a36, 2b26ca17b

Kontrolní seznam migrace

Pro čistý přenos na v3.6.1 je typická práce následující:

  1. Odstraňte volání sensor.set_framerate() (odstranění set_framerate).

  2. Přesuňte úlohy TensorFlow z OpenMV Cam M7 (změna TensorFlow na M7).

  3. Přestaňte se spoléhat na návratovou hodnotu set_pixformat() / set_framesize() a zachytávejte ValueError pro nepodporované formáty pixelů (změna návratové hodnoty).

  4. Zajistěte sudé rozměry obrazu před voláním lens_corr() / linpolar() / logpolar() (požadavek na sudé rozměry).

Všechny ostatní skripty běží beze změny.