v3.6.1

v3.6.1 este o versiune importantă. Introduce modulul imu (LSM6DS3), o suită de noi API-uri getter pentru sensor cu auto-rotație ghidată de IMU, corecție de perspectivă în 4 puncte rotation_corr() și aduce în funcțiune Arduino Portenta H7 cu camerele HIMAX HM01B0 și OV7690. Mai multe API-uri sensor / image s-au modificat, iar TensorFlow a fost eliminat pe M7 — citiți modificările incompatibile de mai jos.

Puncte importante

  • Modulul imu — accelerometru / giroscop / temperatură / roll / pitch pe LSM6DS3 (OpenMV 4 / Portenta).

  • Gettere pentru senzor + auto-rotațieget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation() și rotirea instantaneelor ghidată de IMU.

  • Corecție de perspectivărotation_corr() primește argumentele fov și corners (4 puncte).

  • Hardware nou — Arduino Portenta H7, HIMAX HM01B0 și camera OV7690.

  • Incompatibil: set_pixformat() / set_framesize() returnează acum None, sensor.set_framerate() a fost eliminat, TensorFlow a fost eliminat pe M7, iar lens_corr() / linpolar() necesită acum dimensiuni pare — consultați modificările incompatibile.

Funcționalități noi

  • imu — un nou modul IMU: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch() și imu.sleep() (LSM6DS3 pe OpenMV 4 / Portenta).

  • Gettere pentru senzor — adăugate sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose() și set_auto_rotation() / get_auto_rotation().

  • Auto-rotațiesensor.snapshot() folosește IMU-ul pentru a întoarce / oglindi / transpune cadrele atunci când auto-rotația este activată.

  • rotation_corr() — adăugate argumentele fov și corners (perspectivă în 4 puncte), cu exemple de corecție de perspectivă.

  • lcd.init() — adăugat argumentul bgr.

  • collections.deque — activat în compilarea MicroPython.

  • Adăugate constantele de id sensor.OV7690 și sensor.HM01B0 și un exemplu de filtru de imagine de tip numpy folosind ulab.

Alte modificări și îmbunătățiri

  • Au fost optimizate semnificativ filtrele de imagine (median / mode / mean / …), find_circles() și corecția de obiectiv; alloc_extra_fb poate aloca acum orice număr de octeți; modelul de detectare a persoanelor a fost reconstruit cu o nouă operație average-pool.

Corecturi de erori

Cameră și senzori:

  • Au fost corectate sleep() pentru OV2640 (acum folosește registrul de standby COM2 în loc de pinul de power-down), configurarea pinului FSYNC, polaritățile HSYNC/VSYNC ale HM01B0 și adresa/scanarea I2C, GPIO-ul de power-down al senzorului Portenta și pinul de reset al camerei, și a fost dezactivată auto-rotația când pitch-ul IMU este aproape de 90°/270°.

Imagistică și sistem:

  • Au fost corectate o eroare de verificare a limitelor într-un filtru de imagine, un hardfault la dezactivarea D-cache, pornirea pe plăci fără card SD, o eroare load_to_fb la tf.load(), depășirea stivei la detectarea persoanelor (stiva H7 mărită la ≥12 KB) și offset-urile descriptorului USB pentru modul high-speed pe OpenMV 4 Plus.

Hardware și suport pentru plăci

  • Arduino Portenta H7 — punere inițială în funcțiune a plăcii (configurare clock/OSC/HSE STM32H747, headere CMSIS, ADC, SDRAM, PID USB Arduino).

  • HIMAX HM01B0 — nou driver de cameră monocromă (Bayer, clock cu oscilator extern).

  • OV7690 — nou driver de cameră.

  • LSM6DS3 IMU — OpenMV 4 / Portenta.

Modificări incompatibile ale API-ului

Modificări incompatibile ale API-ului vizibile pentru utilizator între v3.6.0 și v3.6.1. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

  • minor — API restrâns; afectează doar scripturile care l-au folosit.

  • behavior — același API, rezultate diferite; reverificați scripturile ajustate.

Modificările sunt grupate după impact în această ordine. Dacă doriți doar să vă portați codul, săriți la lista de verificare pentru migrare de la final. Fiecare hash de commit trimite la diff-ul său de pe GitHub.

sensor.set_framerate() eliminat (minor)

Stub-ul fără efect sensor.set_framerate() a fost eliminat; apelarea sa generează acum AttributeError. Eliminați apelul și controlați temporizarea cadrelor prin framesize/expunere în schimb. (Un set_framerate() funcțional este reintrodus în v4.0.2.)

Commit-uri: 705e98f91

TensorFlow eliminat pe OpenMV Cam M7 (minor)

TensorFlow (modulul tf) a fost dezactivat pe OpenMV Cam M7 / OpenMV 3 (nu mai încape). import tf pe M7 eșuează — folosiți o cameră din clasa H7 pentru TensorFlow. (tf este reactivat pe F7 în v3.6.3.)

Commit-uri: 2ae875077

set_pixformat() / set_framesize() returnează None (behavior)

sensor.set_pixformat() și sensor.set_framesize() returnează acum None în loc de True, iar un format de pixel nesuportat generează acum un ValueError în loc de o aserțiune. Codul care verifica valoarea returnată (de ex. if sensor.set_pixformat(...):) nu trebuie să mai facă acest lucru, iar codul care prindea AssertionError pentru formate nesuportate trebuie să prindă ValueError.

Commit-uri: f314ac4e7

lens_corr() / linpolar() / logpolar() necesită dimensiuni pare (behavior)

image.lens_corr() și image.linpolar() / image.logpolar() necesită acum lățime și înălțime pare ale imaginii și generează o eroare pentru dimensiuni impare. Decupați sau redimensionați imaginea la dimensiuni pare înainte de a apela aceste metode.

Commit-uri: b36460a36, 2b26ca17b

Lista de verificare pentru migrare

Pentru o portare curată la v3.6.1, munca tipică este:

  1. Eliminați apelurile sensor.set_framerate() (eliminarea set_framerate).

  2. Mutați sarcinile TensorFlow de pe OpenMV Cam M7 (modificarea TensorFlow pe M7).

  3. Nu vă mai bazați pe valoarea returnată de set_pixformat() / set_framesize() și prindeți ValueError pentru formate de pixel nesuportate (modificarea valorii returnate).

  4. Asigurați-vă că imaginea are dimensiuni pare înainte de lens_corr() / linpolar() / logpolar() (cerința de dimensiuni pare).

Toate celelalte scripturi rulează nemodificate.