v2.7.0

v2.7.0 modernizează API-ul sensor de amplificare automată / expunere automată / balans de alb folosind unități fizice (dB / microsecunde), revizuiește corelația de fază find_displacement() (adăugând rotație/scalare) și adaugă get_similarity() (SSIM), chrominvar() / illuminvar(), tampoane de cadre suplimentare și o bibliotecă MQTT. Este o versiune mare cu modificări incompatibile — citiți modificările incompatibile de mai jos.

Aspecte importante

  • API senzor modernset_auto_gain() / set_auto_exposure() / set_auto_whitebal() folosesc acum dB / microsecunde, cu funcțiile corespunzătoare get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Corelație de fazăfind_displacement() refăcut cu rotație / scalare și find_rotscale() / linpolar() / logpolar().

  • SSIM — similaritate structurală image.get_similarity().

  • Tampoane de cadre suplimentaresensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — o nouă bibliotecă MQTT.

  • Incompatibil: API-ul senzorului pentru amplificare/expunere/balans de alb, find_displacement() / dimensiunile de cadru FFT, find_number(), instrumentele de firmware WINC și z_rotation() pentru AprilTag s-au modificat toate — consultați modificările incompatibile.

Funcționalități noi

  • Senzor — s-au adăugat sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), un argument gain_db_ceiling la set_auto_gain(), suport hmirror / vflip pentru MT9V034 și sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() pentru tampoane de cadre suplimentare în RAM.

  • Imagine — s-au adăugat remove_shadows(), min() / max() (diferențiere de cadre), get_similarity() (SSIM) cu un exemplu de similaritate structurală, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), argumentele threshold / offset / invert la filtrele adaptive mean() / mode() / median() / midpoint(), len() / indexare pe obiectul keypoints și un accesor .match() pe obiectul de potrivire a punctelor-cheie.

  • Biblioteci / rețea — s-au adăugat o bibliotecă MQTT (cu un exemplu MQTT prin WiFi) și un mod network.WINC.MODE_BSP pentru programarea firmware-ului WINC prin UART-ul de depanare.

  • Exemple — s-au adăugat exemplele de consum redus deep_sleep.py / stop_mode.py, flux optic avansat și scripturi exemplu liniar/log-polar; firmware-ul analizează acum uart.ini la pornire pentru a activa un REPL UART.

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

  • get_regression() a câștigat argumentele area_threshold / pixels_threshold și o regresie robustă mai rapidă (pentru urmărirea liniei / curse); get_pixel() acceptă acum imagini Bayer; s-au adăugat bazele pentru STM32H7 (anteturi CMSIS / HAL / bootloader — placa H7 nu este încă utilizabilă); s-a actualizat firmware-ul WINC1500 inclus (19.4.4 / 19.5.2).

Remedieri de erori

Imagistică:

  • S-au remediat eroarea de depășire a limitelor în căutarea diamant din find_template(), coruperea logpolar / linpolar și illuminvar() care o lua razna la valori de culoare apropiate de zero.

Senzor și sistem:

  • S-au remediat erorile de control automat al amplificării, s-a restaurat dimensiunea MAIN_FB la snapshot() (astfel încât copy_to_fb la o rezoluție diferită, redimensionarea FB și gruparea fluxului optic funcționează din nou), timeout-ul gethostbyname al WINC, ștergerea stării pydfu pe bootloader-ul H7 și modurile de consum redus stop/standby.

Suport pentru hardware și plăci

  • STM32H7 — baze (CMSIS / HAL / bootloader); placa OpenMV H7 nu este încă utilizabilă în această versiune.

  • WINC1500 — firmware inclus actualizat.

Modificări incompatibile ale API-ului

Modificări incompatibile ale API-ului vizibile pentru utilizator între v2.6.0 și v2.7.0. Domeniu: modulele C Python din modules/ și bibliotecile Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

  • major — afectează majoritatea scripturilor care au folosit funcționalitatea; va trebui să adaptați codul.

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

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

Modificările sunt grupate după impact în această ordine. Dacă vreți doar să adaptați codul, treceți la lista de verificare pentru migrare de la final. Fiecare hash de commit duce la diff-ul său pe GitHub.

sensor.set_auto_gain() refăcut pentru dB (major)

sensor.set_auto_gain() nu mai acceptă argumentul întreg value= și nu mai returnează True / False. Folosiți sensor.set_auto_gain(False, gain_db=...) (o valoare dB în virgulă mobilă), citiți-o înapoi cu noua sensor.get_gain_db() și încadrați apelul într-un try / except, deoarece eșecul generează acum ValueError.

Commits: b906c5f19

sensor.set_auto_exposure() refăcut pentru microsecunde (major)

sensor.set_auto_exposure() nu mai acceptă argumentul întreg value= și nu mai returnează True / False. Folosiți sensor.set_auto_exposure(False, exposure_us=...), citiți-o înapoi cu noua sensor.get_exposure_us() și tratați ValueError generat la eșec.

Commits: 7be0a7a18

find_displacement() / dimensiunile de cadru FFT revizuite (major)

Corelația de fază a fost revizuită. image.find_displacement() returnează acum un obiect de deplasare (cu x_translation() / y_translation() — fostele x_offset / y_offset — plus rotation() / scale() și noile argumente logpolar / fix_rotation_scale); obiectul separat de rotație-scalare a fost eliminat și s-a adăugat find_rotscale(). Constantele de dimensiune a cadrului FFT au fost redenumite/eliminate: sensor.B40x30 a fost eliminat complet, iar sensor.B64x32 / B64x64 au fost redenumite în majuscule sensor.B64X32 / B64X64 (cu noile B128X64 / B128X128).

Commits: c78f91b42, 213396d09

sensor.set_auto_whitebal() refăcut pentru dB (minor)

sensor.set_auto_whitebal() și-a înlocuit argumentul întreg value=[r, g, b] cu rgb_gain_db=[r, g, b] (dB în virgulă mobilă) și returnează acum None (generând ValueError la eșec) în loc de True / False. Folosiți noua sensor.get_rgb_gain_db() pentru a citi înapoi amplificările.

Commits: 30ecbdc4f

set_hmirror() / set_vflip() returnează None (minor)

sensor.set_hmirror() și sensor.set_vflip() returnează acum None și generează ValueError la eșec în loc să returneze o stare True / False. Eliminați orice cod care se ramifică în funcție de valoarea lor de retur.

Commits: aeb023804

Instrumentele de firmware WINC necesită o cale de fișier (minor)

Instrumentele de firmware network.WINC s-au modificat: wlan.fw_dump() / wlan.fw_update() primesc acum un argument obligatoriu cu calea fișierului de firmware, iar WINC este deschis într-un mod de programare (network.WINC(mode=...)). Actualizați apelurile fără argumente pentru a transmite o cale (de ex. wlan.fw_update("/winc_19_5_2.bin")).

Commits: fcc3b0b9c

image.find_number() necesită o regiune de interes (ROI) de 28x28 (behavior)

image.find_number() (LeNet) necesită acum o regiune de interes (ROI) de exact 28x28 care încape în interiorul imaginii și generează o eroare în caz contrar (în loc să ruleze pe o ROI arbitrară/de imagine completă). Transmiteți o valoare explicită roi=(x, y, 28, 28).

Commits: 4d09a13f3

Semnul z_rotation() pentru AprilTag a fost inversat (behavior)

z_rotation() pentru AprilTag (și rotation() aferent) folosește acum o convenție de coordonate dreptaci, deci unghiul returnat este negat față de versiunile anterioare. Scripturile care depind de vechiul semn trebuie să inverseze valoarea sau să-și ajusteze calculele de unghi.

Commits: 7673aaf74

Lista de verificare pentru migrare

Pentru o adaptare curată la v2.7.0, munca tipică este:

  1. Adaptați set_auto_gain() la gain_db= + get_gain_db() și tratați ValueError (refacerea amplificării automate).

  2. Adaptați set_auto_exposure() la exposure_us= + get_exposure_us() (refacerea expunerii automate).

  3. Actualizați find_displacement() la obiectul de deplasare și redenumiți constantele de dimensiune a cadrului FFT (revizuirea find_displacement).

  4. Adaptați set_auto_whitebal() la rgb_gain_db= + get_rgb_gain_db() (refacerea balansului de alb) și nu mai verificați valoarea de retur a set_hmirror() / set_vflip() (modificarea mirror/flip).

  5. Transmiteți o cale de firmware instrumentelor fw_* ale WINC (modificarea instrumentelor WINC).

  6. Transmiteți o roi de 28x28 către find_number() (modificarea find_number) și ajustați calculele de unghi pentru AprilTag pentru semnul inversat z_rotation() (modificarea z_rotation).

Toate celelalte scripturi rulează nemodificate.