v3.9.0

v3.9.0 este o versiune majoră. Adaugă portul nRF cu Arduino Nano 33 BLE Sense (cameră, modul audio PDM, ulab, drivere de senzori integrate), aduce senzorii termici FLIR Lepton plus MLX90641 / MLX90621 și un modul fir puternic reproiectat, ioctl-uri de autofocalizare OV5640 și noul tip de streaming image.ImageIO. Modulul vechi CMSIS-NN nn și clasele vechi ImageReader / ImageWriter au fost eliminate — citiți modificările incompatibile de mai jos.

Aspecte importante

  • Arduino Nano 33 BLE Sense — un nou port nRF52840 cu cameră, un modul audio PDM, ulab și drivere de senzori integrate.

  • Termic — suport FLIR Lepton, MLX90641 și MLX90621 cu un modul fir reproiectat (palete, oglindire, scalare, radiometrie, FFC).

  • Autofocalizare OV5640 — noi ioctl-uri sensor.IOCTL_*_AUTO_FOCUS.

  • image.ImageIO — un tip unificat de flux de imagine (memorie sau fișier; read/write/seek/size/close) care înlocuiește ImageReader / ImageWriter.

  • Incompatibil: modulul CMSIS-NN nn și image.ImageReader / image.ImageWriter au fost eliminate, iar comportamentul find_lines() / fir s-a modificat — consultați modificările incompatibile.

Funcționalități noi

  • Portul nRF / Arduino Nano 33 BLE Sense — un nou port nRF52840 și suport pentru placă, cu un nou modul audio (audio.init(), audio.start_streaming(), audio.stop_streaming()), ulab activat și drivere de senzori integrate apds9960 / lps22h / lsm9ds1 / hts221.

  • image.ImageIO — un nou tip de flux de imagine care acceptă atât fluxuri de memorie, cât și de fișier prin read() / write() / seek() / size() / close(), plus exemple ImageIO de citire/scriere/memorie.

  • FLIR Lepton — adăugat suport FIR_LEPTON cu fir.radiometric(), fir.trigger_ffc() și fir.register_vsync_cb().

  • Senzori termici — adăugat suport pentru MLX90641 (FIR_MLX90641) și termopilă MLX90621 (drivere oficiale Melexis).

  • fir palete / orientare — adăugate constantele fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565, iar fir.read_ir() acceptă acum hmirror / vflip / transpose.

  • Autofocalizare OV5640 — adăugate sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • Reorganizate exemplele Arduino în directoare separate pe fiecare placă.

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

  • S-a trecut la mesaje de eroare MicroPython comprimate (șiruri de excepție mai scurte); argumentul type al fir.init() detectează acum automat printr-o scanare a magistralei I2C atunci când este omis; excepția xalloc raportează acum numărul de octeți solicitați; UART 8 a fost activat pe Portenta; exemplele FIR au fost consolidate în thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. Pentru a încăpea în memoria flash, image.get_similarity() și căutarea selectivă au fost dezactivate în compilarea OpenMV 4, iar biblioteca de imagini poate fi acum compilată fără sistem de fișiere (pentru plăcile fără sistem de fișiere).

Remedieri de erori

Cameră și senzori:

  • S-a remediat calculul PCLK pentru OV5640, s-au adăugat handlere IRQ I2C lipsă (remediind blocajele transferurilor I2C), s-a reproiectat citirea/scrierea I2C a cambus pentru fiabilitate, s-a făcut selectabilă magistrala I2C a Lepton, s-au mutat pinii de recuperare a magistralei cambus în configurația per placă, se reîncearcă scanarea cambus o dată înainte de eșuare și s-a făcut să funcționeze OpenMV PT (Lepton + cameră cu I2C partajat).

Termic:

  • S-au remediat calculul valorii maxime din fir get_ir() / draw_ir() și image.get_similarity() (FLT_MIN-FLT_MAX), gestionarea pe 12→16 biți a AMG8833 și acuratețea MLX90621 (driver oficial Melexis).

Afișaj, audio și sistem:

  • S-au mutat transferurile LCD SPI STM32 pe funcțiile de retroapelare HAL SPI (fiabilitatea afișajului), s-a remediat audio.init() pe Nano 33 (oscilatorul HF + raportul PDM astfel încât microfonul să funcționeze), starea temporizatorului H7 cu noul HAL, gc_collect pe nRF și inițializarea/dezinițializarea timpurie a plăcii și s-a oprit afișarea mesajului eronat „uh oh, no preference for overlapping detection” în timpul find_apriltags() / find_rects().

Hardware și suport pentru plăci

  • Arduino Nano 33 BLE Sense — o nouă placă nRF52840 (cameră, audio PDM, ulab, drivere de senzori integrate).

  • FLIR Lepton, MLX90641 și MLX90621 senzori termici.

  • Autofocalizare OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — UART 8 activat.

Modificări incompatibile ale API-ului

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

Fiecare modificare este etichetată cu impactul său:

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

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

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

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

Modulul CMSIS-NN nn eliminat (major)

Modulul CMSIS-NN nn a fost eliminat, inclusiv nn.load(), net.forward(), net.search() și helperul nn_class. Inferența modelelor trece la modulul TensorFlow Lite (tf). Scripturile care încărcau modele .network cu nn trebuie portate la tf cu un model TensorFlow Lite.

Commit-uri: fbc767b36

ImageReader / ImageWriter înlocuite cu image.ImageIO (major)

image.ImageReader / image.ImageWriter și metodele lor next_frame() / add_frame() au fost eliminate și înlocuite cu noul tip image.ImageIO, care acceptă atât fluxuri de memorie, cât și de fișier prin read() / write() / seek() / size() / close(). Codul care folosește vechile clase reader/writer trebuie portat la image.ImageIO (consultați exemplele redenumite imageio_read.py / imageio_write.py).

Commit-uri: 783a78754

Cuvântul-cheie scale al fir.draw_ir() eliminat (minor)

fir.draw_ir() a fost rescrisă peste noua conductă de desenare a imaginilor. Cuvântul-cheie scale=(min, max) a fost eliminat, iar argumentele hint, x_scale, y_scale, roi și offset-urile poziționale x/y au fost adăugate. Scripturile care transmiteau scale=(min, max) către fir.draw_ir() trebuie să-l renunțe și să folosească noile argumente.

Commit-uri: 0a29103b1

Aproximarea find_lines() (comportament)

image.find_lines() aproximează acum magnitudinea gradientului ca (abs(gx) + abs(gy)) / 2 și ignoră magnitudinile sub 126. Acest lucru este mai rapid, dar modifică setul de linii detectate și valorile acumulatorului, așa că reverificați și reglați din nou threshold / theta_margin / rho_margin.

Commit-uri: 902ae3c98

fir.snapshot() reproiectată (comportament)

fir.snapshot() a fost reproiectată substanțial cu un nou API bazat pe cuvinte-cheie (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), iar exemplele incluse au fost rescrise. Comportamentul anterior, poziţional / doar cu pixformat, s-a modificat; portați scripturile FIR la noua formă cu cuvinte-cheie (consultați exemplele actualizate pentru shield-ul termopilă).

Commit-uri: 53f2248b8

fir.init() ridică excepție la eșec (comportament)

fir.init() ridică acum o excepție (și se dezinițializează curat) atunci când senzorul termic nu este detectat, în loc să continue silențios. Încadrați fir.init() într-un try / except (sau asigurați-vă că senzorul este conectat) acolo unde anterior vă bazați pe faptul că nu ridica excepție.

Commit-uri: 4b2f972f3

Lista de verificare pentru migrare

Pentru o portare curată la v3.9.0, lucrul tipic este:

  1. Portați inferența modelelor CMSIS-NN nn la modulul TensorFlow Lite tf (eliminarea nn).

  2. Înlocuiți image.ImageReader / image.ImageWriter cu image.ImageIO (modificarea ImageIO).

  3. Renunțați la cuvântul-cheie scale=(min, max) din fir.draw_ir() și folosiți noile argumente (modificarea draw_ir).

  4. Reglați din nou parametrii find_lines() față de metrica aproximativă a magnitudinii (modificarea find_lines).

  5. Portați scripturile FIR la noul API cu cuvinte-cheie fir.snapshot() (modificarea fir.snapshot) și tratați ridicarea excepției de către fir.init() la un senzor lipsă (modificarea fir.init).

Toate celelalte scripturi rulează neschimbate.