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 APIcsi.CSIbazat pe clase, cu suport pentru mai multe camere simultane, introdus alături de modulul vechisensor.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 modululfirau 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 obiectcsi.CSIbazat pe clase, cu mai multe camere simultane (până la trei pe N6), instantaneu neblocant, dimensiuni de cadru(w, h)personalizate și unprint()/ repr informativ. Este introdus alături de modulul vechisensor(nu este un înlocuitor direct).crc—crc.crc16()șicrc.crc32(), accelerate hardware cu o variantă software de rezervă, pe OpenMV N6 și AE3.image.Image.draw_image()a primit un cuvânt-cheietransform=(o matricendarray2-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 GenX320 —
csi.IOCTL_GENX320_SET_MODEcucsi.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.Modela primit un cuvânt-cheiepostprocess=(post-procesorul rulează acum automat în interiorulpredict()chiar și fără un callback);ml.postprocessinga fost reorganizat în subpachete per furnizor —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) șiml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — vechile nume în snake_case rămân ca alias-uri; au fost adăugateml.utils.draw_keypoints()șiml.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-cheiehmirror/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 (
pyopenmva 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/
transposefuncț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;Normalizationaplică 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;YoloV2nu 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.
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.
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.
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.
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.
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.
Lista de verificare pentru migrare¶
Pentru o portare curată la v4.8.0, munca tipică este:
Dacă ai folosit FLIR Lepton prin
fir, treci la capturarea lui ca senzor de cameră (modificarea fir/Lepton).Înlocuiește orice utilizare a
buzzercumachine.PWM(eliminarea buzzer).Elimină apelurile
omv.disable_fb()(eliminarea omv.disable_fb()).Pentru
image.ImageIO: folosește'r'/'w'cu litere mici și așteaptă-te ca'w'să trunchieze (modificarea ImageIO).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).
Reverifică orice script care comuta ceasul senzorului pentru capturi sensibile la temporizare (modificarea ceasului).