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).