v4.7.0#
v4.7.0 este o lansare majoră de funcționalități. În prim-plan: noua placă OpenMV AE3 (Alif Ensemble, Cortex-M55 + NPU Ethos-U55) cu un model de programare dual-core openamp, un sistem de fișiere ROMFS (/rom) doar-citire cu modele și cascade incluse, suport time-of-flight VL53L8CX 8x8, noi post-procesoare YOLOv8 / YOLO-LC și MicroPython 1.25. De asemenea, modifică modul în care se încarcă modelele integrate și cascadele Haar, așa că citiți modificările incompatibile de mai jos.
Repere#
Placa OpenMV AE3 — placa Alif Ensemble (Cortex-M55 + NPU Ethos-U55), cu un port complet, bootloader și ROMFS.
Modul
openampdual-core — descarcă sarcini către al doilea nucleu Alif prin RPMsg (decoratorul@async_remote,Endpoint/EndpointIO).ROMFS — un sistem de fișiere
/romdoar-citire cu modele TFLite integrate și cascade Haar, plus un nou constructor gazdătools/mkromfs.py.Suport senzor time-of-flight multi-zonă VL53L8CX 8x8.
Noi post-procesoare ML —
yolo_v8_postprocessșiyolo_lc_postprocess.MicroPython actualizat la 1.25.0.
Incompatibil: modelele integrate și cascadele Haar se încarcă acum din
/romdupă cale (vedeți modificarea ml.Model și modificarea cascadei Haar).
Funcționalități noi#
OpenMV AE3 — nouă placă Alif Ensemble (nucleu de aplicație Cortex-M55 + NPU Ethos-U55), cu port, bootloader, configurație de placă, LED RGB și suport ROMFS.
openamp— un nou modul pentru modelul RPC dual-core Alif (Open-AMP / RPMsg):Endpoint,EndpointIO,new_service_callbackși decoratorul@async_remotepentru a descărca funcții serializate către al doilea nucleu. Nucleele HE/HP includ un task runner_boot.pyimplicit bazat pe asyncio.audio— portul Alif adaugă modulul audio (microfon PDM) cu un API de streaming bazat pe funcții de retroapelare (callback) (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) pe AE3.ROMFS — un sistem de fișiere
/romdoar-citire cu resurse integrate (modele TFLite, cascade Haar, …) împachetate pentru fiecare placă, un nou instrument gazdătools/mkromfs.py(tflite, tflite+vela, cascadă Haar, text, binar) și un ajutorscripts/libraries/romfs.pycare expunels_romfs().Post-procesare ML — noile clase
yolo_v8_postprocess(YOLOv8) șiyolo_lc_postprocess(variantă ușoară tiny-YOLOv2 cu anchors implicite optimizate pentru sisteme embedded), fiecare acceptândthreshold,nms_thresholdșinms_sigma.Anti-flicker GenX320 — un nou ioctl
IOCTL_GENX320_SET_AFKpentru a activa și configura filtrul anti-flicker al senzorului de evenimente (frecvența minimă/maximă de pâlpâire în Hz), cu un exemplugenx320_grayscale_set_afk.py.VL53L8CX — suport pentru senzorul time-of-flight multi-zonă 8x8 prin modulul
tof(detectat automat, 8x8 la 15 Hz).
Alte modificări și îmbunătățiri#
MicroPython actualizat la 1.25.0 (porturile STM32 și i.MX RT), cu portul Alif din upstream adăugat și vechile drivere BT-HCI eliminate din porturile STM32 / i.MX RT.
GenX320 — o nouă secvență ISSD dublează frecvența internă de ceas a pixelilor (24 → 48 MHz) pentru rate de cadre mai mari.
STM32N6 / ST Edge AI — bazele pentru implementarea modelelor Neural-ART pe STM32N6 (instrumente ST Edge AI și suport ROMFS).
PAG7936 — bitrate-ul CSI PHY este acum setat, îmbunătățind funcționarea acestui senzor.
Corectări de erori#
Camera și senzorii:
S-a corectat IMU-ul prin I2C — plăcile care conectează IMU-ul LSM6DSx pe I2C se inițializează și citesc acum corect (calea I2C folosea anterior o cale de citire defectă și constante greșite).
Inițializarea FLIR Boson reîncearcă acum de până la 10 ori pentru senzorii mai vechi (< IDD 4.x) care au nevoie de ~10 s pentru a porni, iar setările implicite din fabrică sunt restaurate la resetare, astfel încât setările încărcate extern să nu poată întrerupe ieșirea video.
S-a corectat
psee_ehc_activate_overridedin GenX320 care scria un timp de acumulare greșit (zero).Pe plăcile STM32 fără hardware FastMode+, solicitarea modului rapid I2C este acum protejată corespunzător în loc să configureze greșit magistrala în mod silențios.
Învățare automată:
S-au corectat colectarea casetelor de încadrare și gestionarea
np.nonzeroîn post-procesoarele YOLOv2 / YOLOv5, îmbunătățind fiabilitatea detectării.
Suport hardware și plăci#
OpenMV AE3 — nouă placă Alif Ensemble (Cortex-M55 + NPU Ethos-U55).
VL53L8CX — senzor time-of-flight multi-zonă 8x8; senzorul ToF al AE3 a fost comutat de la VL53L5CX la VL53L8CX.
STM32N6 — bazele pentru implementarea modelelor ST Edge AI (Neural-ART).
Modificări incompatibile de API#
Incompatibilități de API vizibile pentru utilizator între v4.6.20 și v4.7.0. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.
Fiecare modificare este etichetată cu impactul său:
major — majoritatea scripturilor care îl utilizau necesită modificări.
minor — API restrâns; afectează doar scripturile care îl utilizau.
comportament — același API, rezultate diferite; reverificați scripturile reglate.
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 pentru o listă de sarcini condensată. Fiecare hash de commit duce la diff-ul său de pe GitHub.
Modelele integrate se încarcă după cale, nu după nume (major)#
ml.Model nu mai încarcă un model integrat dintr-un șir simplu cu numele. Modelele se încarcă acum din sistemul de fișiere / ROMFS după cale:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
Atributul model.labels din partea C a fost eliminat; etichetele se încarcă acum de către wrapper-ul Python ml.Model dintr-un fișier auxiliar <model>.txt (None dacă lipsește). Toate exemplele incluse și ml/apps.py au fost actualizate la căi /rom/*.tflite.
Cascadele Haar se încarcă din ROMFS (minor)#
image.HaarCascade() încarcă acum cascadele integrate prin VFS / ROMFS. Fișierul cascadei frontale de față implicit a fost redenumit din haarcascade_frontalface_default.xml în haarcascade_frontalface.xml, iar un eșec de încărcare generează acum RuntimeError („Failed to load Haar cascade”) în loc de OSError.
Commit: 9de1220d8
Semantica tof.reset() / tof.deinit() (comportament)#
În modulul tof, reset() era anterior un alias pentru init() și nu exista un deinit real. tof.reset() efectuează acum o resetare reală a senzorului, iar tof.deinit() oprește corect senzorul (cu suport de oprire VL53L5CX). Codul care se baza pe reset() pentru reinițializarea senzorului trebuie reverificat.
Constrângeri de temporizare și mod-eveniment GenX320 (comportament)#
Noua secvență ISSD GenX320 modifică baza de timp a senzorului: argumentele de rată de cadre și de expunere sunt acum exprimate în unități de 1 MHz în loc să fie scalate după ceas, iar blanking-ul HSYNC este ajustat dinamic la rata de cadre solicitată. Scripturile care au valori de temporizare GenX320 codate fix trebuie reglate din nou. Capturarea în mod-eveniment generează acum o eroare atunci când transpunerea imaginii este activată (nu este acceptată în această configurație).
Lista de verificare pentru migrare#
Pentru o portare curată la v4.7.0, lucrul tipic este:
Schimbați încărcarea modelelor integrate dintr-un șir cu numele într-o cale
/rom/<name>.tfliteși furnizați etichetele printr-un fișier auxiliar<name>.txt(modificarea ml.Model).Actualizați
haarcascade_frontalface_default.xmllahaarcascade_frontalface.xmlși prindețiRuntimeError(nuOSError) la eșecul de încărcare a cascadei (modificarea cascadei Haar).Eliminați codul care se baza pe
tof.reset()pentru reinițializarea senzorului (modificarea tof).Reglați din nou orice valoare de rată de cadre / expunere GenX320 codată fix la unități de 1 MHz și nu activați transpunerea în modul eveniment (modificarea GenX320).