v4.8.0

v4.8.0 este o versiune majoră de funcționalități. În prim-plan: un modul de cameră csi complet nou, bazat pe clase, cu suport pentru mai multe camere, placa OpenMV N6 (STM32N6) cu un NPU Neural-ART, un backend de inferență NPU, modul RAW de eveniment pentru camera de evenimente GenX320, un nou modul crc, o bibliotecă reorganizată de post-procesare ML și MicroPython 1.26. De asemenea, elimină câteva API-uri vechi — modulul buzzer și controlul FLIR Lepton din modulul fir — așa că citește modificările cu impact de mai jos.

Aspecte importante

  • Nou modul de cameră csi. Un API csi.CSI bazat pe clase, cu suport pentru mai multe camere simultane, introdus alături de modulul vechi sensor.

  • OpenMV N6. Placa STM32N6, cu un NPU Neural-ART, triplă tamponare, Soft-CSI și un modul ToF.

  • Inferență NPU. Un backend ST Neural-ART (STAI) pentru inferența modelelor accelerată hardware.

  • Mod de eveniment GenX320. Ieșire RAW de evenimente plus draw_event_histogram() pentru randarea camerelor de evenimente.

  • Post-procesare ML reorganizată — subpachete per furnizor (ml.postprocessing.ultralytics, mediapipe, edgeimpulse, darknet) cu noi detectoare BlazeFace / BlazePalm / de puncte de reper pentru mâini și fețe.

  • Nou modul crc** — CRC-16 / CRC-32 accelerat hardware.

  • MicroPython actualizat la 1.26.0.

  • Cu impact: modulul buzzer și controlul Lepton din modulul fir au fost eliminate (Lepton este acum o cameră obișnuită). Vezi modificarea fir/Lepton și eliminarea buzzer.

Funcționalități noi

  • Noul modul de cameră csi** — un obiect csi.CSI bazat pe clase, cu mai multe camere simultane (până la trei pe N6), instantaneu neblocant, dimensiuni de cadru (w, h) personalizate și un print() / repr informativ. Este introdus alături de modulul vechi sensor (nu este un înlocuitor direct).

  • crccrc.crc16() și crc.crc32(), accelerate hardware cu o variantă software de rezervă, pe OpenMV N6 și AE3.

  • image.Image.draw_image() a primit un cuvânt-cheie transform= (o matrice ndarray 2-D de tip float pentru transformări afine/de perspectivă, accelerate GPU pe STM32 și Alif); aceeași transformare este disponibilă în conversia imaginilor.

  • draw_event_histogram() — randează histograme de la camere de evenimente.

  • Mod RAW de eveniment GenX320csi.IOCTL_GENX320_SET_MODE cu csi.GENX320_MODE_HISTO / csi.GENX320_MODE_EVENT, csi.IOCTL_GENX320_READ_EVENTS, csi.IOCTL_GENX320_CALIBRATE, constante pentru tipuri de evenimente și noi scripturi exemplu.

  • ML — un backend de inferență NPU ST Neural-ART (STAI); ml.Model a primit un cuvânt-cheie postprocess= (post-procesorul rulează acum automat în interiorul predict() chiar și fără un callback); ml.postprocessing a fost reorganizat în subpachete per furnizor — ml.postprocessing.ultralytics (YoloV5, YoloV8), ml.postprocessing.darknet (YoloV2, YoloLC), ml.postprocessing.edgeimpulse (Fomo) și ml.postprocessing.mediapipe (BlazeFace, BlazePalm, HandLandmarks, FaceLandmarks) — vechile nume în snake_case rămân ca alias-uri; au fost adăugate ml.utils.draw_keypoints() și ml.utils.draw_skeleton(); modelele ROMFS incluse au crescut (BlazeFace, YOLO-LC, YOLOv8n, puncte de reper pentru palmă/mână/față).

  • audio — intrare de microfon digital MDF pe STM32N6.

  • Afișaj — un driver OLED SSD1351 și un exemplu; controlerele SPIDisplay își pot suprascrie comenzile de inițializare; constructorul afișajului SPI a primit cuvintele-cheie hmirror / vflip.

  • Profiler pe dispozitiv — contoare de cicluri/evenimente SysTick + Armv8.1-M PMU cu instrumentare la nivel de funcție, care pot fi citite prin legătura de depanare (pyopenmv a primit suport pentru profilare și simboluri ELF).

  • Suport pentru senzori noi — PixArt PS5520; FLIR BOSON pe OpenMV H7 Plus; detectare automată GenX320.

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

  • MicroPython actualizat la 1.26.0.

  • Pornirea camerei — ceasul senzorului a fost decuplat de starea CSI, detectarea camerei la pornire este mai rapidă (cea mai frecventă configurație este încercată prima), iar ceasul implicit OV7725 al OpenMV 3 a fost corectat.

  • Calitatea imaginii — corecția gamma ISP software (Alif și STM32) și corecția pixelilor defecți (STM32) sunt activate implicit; senzorii PAG7936 și PS5520 au primit controale de balans automat de alb.

  • Performanțăimage.Image.to_ndarray() este accelerat cu Helium SIMD, iar post-procesorul FOMO a fost vectorizat cu ulab.

  • Driverul FLIR Lepton rescris pentru a primi cadre asincron în fundal — rotirea/transpose funcționează acum, desenarea face supraeșantionare biliniară, iar resetarea este mai rapidă.

  • Debit de captură — CSI-ul i.MX RT1062 folosește acum descărcarea DMA completă, iar STM32 N6 are un draw_image() cu GPU hardware.

Remedieri de erori

Cameră și senzori:

  • S-au remediat modurile RGB565 / GRAYSCALE / BAYER / YUV422 pe senzorii STM32, PAJ6100 pe OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 și configurația CSI mono / RGB-YUV a N6; camera de test software se resetează acum în mod determinist.

  • Balansul automat de alb nu mai face imaginea verde la rate de cadre scăzute sau variabile (o medie mobilă pe 250 ms înlocuiește eșantionarea la fiecare 100 de cadre), iar pâlpâirea luminanței PS5520 a fost remediată.

Procesarea imaginilor:

  • S-a remediat o anomalie de randare la desenarea liniilor; image.Image.flush() golește acum tamponul JPEG al imaginii pe care a fost apelat; Normalization aplică acum media/deviația standard la intrările de tip float; alocarea image-from-file a fost remediată.

Captura camerei:

  • S-au remediat coruperea severă a imaginii la transferurile non-JPEG (întreruperea de cadru este acum activată doar în modul JPEG), suportul JPEG mode-3, precum și blocările legate de dimensiunea liniei DMA și de tampoanele mici pe STM32; sincronizarea VOSPI / Lepton este mai fiabilă, în special pe N6.

Diverse:

  • omv.board_id() returnează UID-ul corect pe RT1060; YoloV2 nu mai cedează atunci când este construit fără ancore explicite.

Suport pentru hardware și plăci

  • OpenMV N6 — STM32N6 cu un NPU Neural-ART, triplă tamponare, ieșire LCD/TV prin SPI, Soft-CSI, modulul tof și modele ROMFS incluse.

  • Arduino GIGA — ieșire de afișaj MIPI DSI.

  • Senzori noi — PixArt PS5520; FLIR BOSON pe OpenMV H7 Plus; detectare automată GenX320.

  • OpenMV Pure Thermal — FLIR Lepton este acum un senzor de cameră obișnuit (secundar).

  • Alif AE3 — corecție gamma ISP software, modulul crc și remedieri SPI.

Modificări de API cu impact

Modificări de API vizibile pentru utilizator între v4.7.0 și v4.8.0. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul ei:

  • major — majoritatea scripturilor care l-au folosit necesită modificări.

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

  • comportament — același API, rezultate diferite; reverifică scripturile reglate fin.

  • instrumentar — afectează doar uneltele de pe gazdă / compilarea din sursă.

Modificările sunt grupate după impact în această ordine — mai întâi major, apoi minor, comportament și instrumentar. Dacă vrei doar să-ți portezi codul, sari la lista de verificare pentru migrare de la final pentru o listă condensată de sarcini. Fiecare hash de commit trimite la diferența sa pe GitHub.

FLIR Lepton mutat în afara modulului fir (major)

FLIR Lepton este acum controlat ca un senzor de cameră obișnuit în loc de prin modulul fir. Controlul Lepton a fost eliminat din fir: tipul FIR_LEPTON și metodele radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() și trigger_ffc() au dispărut. Capturează Lepton ca pe orice altă cameră (apare ca senzor secundar pe OpenMV Pure Thermal); exemplul Pure Thermal a fost rescris pentru noul API. Senzorii fir non-Lepton (Grid-EYE, MLX, AMG8833) sunt neschimbați.

Commit-uri: bacfb7aeb, 117710566, 592a22902, 1a614202e

Modulul buzzer eliminat (minor)

Modulul buzzer a fost eliminat din porturile STM32 și i.MX RT. Controlează buzzer-ul cu machine.PWM în schimb; a fost adăugat un exemplu de buzzer Pure Thermal folosind PWM.

Commit-uri: ccb947924, 444120f2d

omv.disable_fb() eliminat (minor)

Funcția omv.disable_fb() a fost eliminată; redarea în flux a tamponului de cadre este controlată acum prin API-ul camerei. Scripturile RPC vechi pentru desktop care se bazau pe ea au fost de asemenea eliminate.

Commit-uri: 84c3db58a, 6fe99051c

csi este nou — API-ul său nu este încă înghețat (minor)

Modulul csi este introdus în v4.8.0 și API-ul său a evoluat în timpul lansării: csi.fb() a fost eliminat, iar csi.CSI.snapshot() (image=...) necesită acum o imagine mutabilă și desenează/scalează cadrul capturat în ea în loc să facă o copie profundă brută. Cei care adoptă timpuriu noul modul ar trebui să retesteze; API-ul vechi sensor nu este afectat.

Commit-uri: 0bc0385eb, 8cd7a309f

Modul de flux image.ImageIO și close() (minor)

image.ImageIO — argumentul mode acceptă acum doar 'r' / 'w' cu litere mici (literele mari sunt respinse cu un mesaj de eroare actualizat), iar deschiderea cu 'w' trunchiază/recreează întotdeauna fișierul în loc să păstreze un flux existent. ImageIO.close() este acum idempotent (închiderea unui flux deja închis nu mai generează o eroare) și returnează None în loc de obiectul flux.

Commit-uri: 715c4cbba, 21ceec422

Valoarea returnată de BlazeFace / BlazePalm (minor)

Post-procesoarele BlazeFace și BlazePalm (noi în această lansare) returnează acum o singură listă de casete de încadrare în loc de lista completă per clasă — apelanții indexează rezultatul direct în loc de [0].

Commit: 75e16b573

Callback-ul de post-procesare ML primește tensori bruți (comportament)

Un callback de post-procesare predict() al ml.Model primește acum referințele brute (cuantizate) ale tensorilor de ieșire în loc de ndarray-uri float deja convertite — acest lucru evită epuizarea memoriei pe modelele mari. Dacă nu este furnizat niciun callback, se returnează în continuare ndarray-ul float. Callback-urile personalizate trebuie să decuantizeze ele însele tensorii (post-procesoarele integrate o fac deja).

Commit: 84e6ee650

Ceasul camerei decuplat de starea CSI (comportament)

Ceasul senzorului este acum independent de starea CSI. set_clock / set_frequency reconfigurează ceasul doar atunci când frecvența cerută diferă cu mai mult decât o toleranță, iar get_clk_frequency acceptă un boolean pentru a returna frecvența exactă (în loc de cea nominală). Ceasul implicit este de 24 MHz pe OpenMV N6 și AE3, așa că nu este nevoie de un set_clock() explicit la pornire. Scripturile care comutau ceasul pentru capturi sensibile la temporizare ar trebui să-și reverifice presupunerile.

Commit-uri: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca

Protocolul de depanare USB și țintele de firmware (instrumentar)

Niciuna dintre acestea nu afectează scripturile MicroPython. Comenzile USBDBG învechite (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) au fost eliminate, iar comenzile neacceptate din IDE-urile mai vechi sunt acum golite în loc să blocheze plăcile TinyUSB la conectare; ținta de firmware UVC STM32 veche a fost eliminată. Uneltele vechi de pe gazdă ar trebui actualizate; vezi istoricul depozitului de firmware pentru detalii.

Commit-uri: 90bd11e93, 657c9a632, 35182f035

Lista de verificare pentru migrare

Pentru o portare curată la v4.8.0, munca tipică este:

  1. Dacă ai folosit FLIR Lepton prin fir, treci la capturarea lui ca senzor de cameră (modificarea fir/Lepton).

  2. Înlocuiește orice utilizare a buzzer cu machine.PWM (eliminarea buzzer).

  3. Elimină apelurile omv.disable_fb() (eliminarea omv.disable_fb()).

  4. Pentru image.ImageIO: folosește 'r'/'w' cu litere mici și așteaptă-te ca 'w' să trunchieze (modificarea ImageIO).

  5. Pentru callback-urile personalizate de post-procesare ML: decuantizează tu însuți referințele brute ale tensorilor sau bazează-te pe calea implicită cu float (modificarea callback-ului).

  6. Reverifică orice script care comuta ceasul senzorului pentru capturi sensibile la temporizare (modificarea ceasului).