v4.8.0¶
v4.8.0 è una release importante ricca di nuove funzionalità. In primo piano: un nuovissimo modulo camera csi basato su classi con supporto multi-camera, la scheda OpenMV N6 (STM32N6) con NPU Neural-ART, un backend di inferenza NPU, la modalità evento RAW della event-camera GenX320, un nuovo modulo crc, una libreria di post-elaborazione ML riorganizzata e MicroPython 1.26. Rimuove inoltre alcune API legacy — il modulo buzzer e il controllo del FLIR Lepton del modulo fir — quindi leggi le modifiche con rottura di compatibilità qui sotto.
In evidenza¶
Nuovo modulo camera
csi. Un’APIcsi.CSIbasata su classi con supporto per più camere simultanee, introdotta accanto al modulo legacysensor.OpenMV N6. La scheda STM32N6, con NPU Neural-ART, triple buffering, Soft-CSI e un modulo ToF.
Inferenza NPU. Un backend ST Neural-ART (STAI) per l’inferenza dei modelli accelerata via hardware.
Modalità evento GenX320. Output di eventi RAW più
draw_event_histogram()per il rendering della event-camera.Post-elaborazione ML riorganizzata — sottopacchetti per fornitore (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) con nuovi rilevatori BlazeFace / BlazePalm e di landmark di mani e volti.Nuovo modulo
crc— CRC-16 / CRC-32 accelerati via hardware.MicroPython aggiornato alla 1.26.0.
Rottura di compatibilità: il modulo
buzzere il controllo del Lepton del modulofirsono stati rimossi (il Lepton è ora una camera normale). Vedi la modifica fir/Lepton e la rimozione del buzzer.
Nuove funzionalità¶
Il nuovo modulo camera
csi— un oggettocsi.CSIbasato su classi con più camere simultanee (fino a tre sull’N6), snapshot non bloccante, dimensioni del frame(w, h)personalizzate e unprint()/ repr informativo. È introdotto accanto al modulo legacysensor(non è un sostituto immediato).crc—crc.crc16()ecrc.crc32(), accelerati via hardware con un fallback software, su OpenMV N6 e AE3.image.Image.draw_image()ha acquisito una parola chiavetransform=(una matricendarrayfloat bidimensionale per deformazioni affini/prospettiche, accelerata via GPU su STM32 e Alif); la stessa trasformazione è disponibile nella conversione delle immagini.draw_event_histogram()— esegue il rendering degli istogrammi della event-camera.Modalità evento RAW GenX320 —
csi.IOCTL_GENX320_SET_MODEconcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, costanti per il tipo di evento e nuovi script di esempio.ML — un backend di inferenza NPU ST Neural-ART (STAI);
ml.Modelha acquisito una parola chiavepostprocess=(il post-processore ora viene eseguito automaticamente all’interno dipredict()anche senza una callback);ml.postprocessingè stato riorganizzato in sottopacchetti per fornitore —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) eml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — i vecchi nomi in snake_case rimangono come alias; sono stati aggiuntiml.utils.draw_keypoints()eml.utils.draw_skeleton(); i modelli ROMFS inclusi sono aumentati (BlazeFace, YOLO-LC, YOLOv8n, landmark di palmo/mano/volto).audio— ingresso microfono digitale MDF su STM32N6.Display — un driver e un esempio per OLED SSD1351; i controller
SPIDisplaypossono sovrascrivere i propri comandi di inizializzazione; il costruttore del display SPI ha acquisito le parole chiavehmirror/vflip.Profiler su dispositivo — contatori di cicli/eventi SysTick + PMU Armv8.1-M con strumentazione a livello di funzione, leggibili tramite il debug link (
pyopenmvha acquisito il supporto al profiling e ai simboli ELF).Supporto a nuovi sensori — PixArt PS5520; FLIR BOSON su OpenMV H7 Plus; rilevamento automatico del GenX320.
Altre modifiche e miglioramenti¶
MicroPython aggiornato alla 1.26.0.
Avvio della camera — il clock del sensore è stato disaccoppiato dallo stato CSI, il rilevamento della camera all’avvio è più veloce (viene provata per prima la configurazione più comune) ed è stato corretto il clock predefinito dell’OV7725 di OpenMV 3.
Qualità dell’immagine — la correzione gamma dell’ISP software (Alif e STM32) e la correzione dei pixel difettosi (STM32) sono attive per impostazione predefinita; i sensori PAG7936 e PS5520 hanno acquisito controlli di bilanciamento automatico del bianco.
Prestazioni —
image.Image.to_ndarray()è accelerato con Helium SIMD e il post-processore FOMO è stato vettorizzato con ulab.Driver del FLIR Lepton riscritto per ricevere i frame in modo asincrono in background — la rotazione/
transposeora funziona, il disegno esegue l’upscaling in modo bilineare e il reset è più veloce.Throughput di acquisizione — il CSI dell’i.MX RT1062 ora usa l’offload DMA completo e lo STM32 N6 dispone di un
draw_image()con GPU hardware.
Correzioni di bug¶
Camera e sensori:
Corrette le modalità RGB565 / GRAYSCALE / BAYER / YUV422 sui sensori STM32, il PAJ6100 su OpenMV H7 / H7 Plus, l’RGB565 QVGA di OpenMV 2 e la configurazione mono / RGB-YUV del CSI dell’N6; la camera di test software ora si resetta in modo deterministico.
Il bilanciamento automatico del bianco non rende più l’immagine verde a frame rate bassi o variabili (una media mobile di 250 ms sostituisce il campionamento ogni 100 frame) ed è stato corretto lo sfarfallio della luminanza del PS5520.
Elaborazione delle immagini:
Corretto un difetto di rendering nel disegno delle linee;
image.Image.flush()ora svuota il buffer JPEG dell’immagine su cui è stato chiamato;Normalizationora applica media/deviazione standard agli input float; corretta l’allocazione dell’immagine da file.
Acquisizione della camera:
Corretta una grave corruzione dell’immagine nei trasferimenti non JPEG (l’interrupt di frame ora è abilitato solo in modalità JPEG), il supporto alla modalità JPEG 3 e i blocchi su STM32 dovuti alla dimensione delle linee DMA e ai buffer piccoli; la sincronizzazione VOSPI / Lepton è più affidabile, in particolare sull’N6.
Varie:
omv.board_id()restituisce l’UID corretto su RT1060;YoloV2non va più in crash quando viene costruito senza anchor esplicite.
Hardware e supporto schede¶
OpenMV N6 — STM32N6 con NPU Neural-ART, triple buffering, uscita LCD/TV SPI, Soft-CSI, il modulo
tofe modelli ROMFS inclusi.Arduino GIGA — uscita display MIPI DSI.
Nuovi sensori — PixArt PS5520; FLIR BOSON su OpenMV H7 Plus; rilevamento automatico del GenX320.
OpenMV Pure Thermal — il FLIR Lepton è ora un sensore camera normale (secondario).
Alif AE3 — correzione gamma dell’ISP software, il modulo
crce correzioni SPI.
Modifiche API con rottura di compatibilità¶
Rotture di compatibilità delle API visibili all’utente tra la v4.7.0 e la v4.8.0. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.
Ogni modifica è contrassegnata dal suo impatto:
major — la maggior parte degli script che la usavano necessita di modifiche.
minor — API ristretta; interessa solo gli script che la usavano.
behavior — stessa API, risultati diversi; ricontrolla gli script ottimizzati.
tooling — interessa solo gli strumenti host / la compilazione dai sorgenti.
Le modifiche sono raggruppate per impatto in quest’ordine — prima major, poi minor, behavior e tooling. Se vuoi solo portare il tuo codice, vai alla checklist di migrazione in fondo per un elenco di cose da fare condensato. Ogni hash di commit rimanda al suo diff su GitHub.
Il FLIR Lepton è stato spostato fuori dal modulo fir (major)¶
Il FLIR Lepton ora è gestito come un normale sensore camera invece che tramite il modulo fir. Il controllo del Lepton è stato rimosso da fir: il tipo FIR_LEPTON e i metodi radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() e trigger_ffc() non esistono più. Acquisisci il Lepton come qualsiasi altra camera (appare come sensore secondario su OpenMV Pure Thermal); l’esempio Pure Thermal è stato riscritto con la nuova API. I sensori fir non Lepton (Grid-EYE, MLX, AMG8833) restano invariati.
Modulo buzzer rimosso (minor)¶
Il modulo buzzer è stato rimosso dai port STM32 e i.MX RT. Pilota il buzzer con machine.PWM; è stato aggiunto un esempio di buzzer Pure Thermal che usa il PWM.
omv.disable_fb() rimosso (minor)¶
La funzione omv.disable_fb() è stata rimossa; lo streaming del frame buffer ora è controllato tramite l’API della camera. Sono stati rimossi anche i vecchi script RPC desktop che vi facevano affidamento.
csi è nuovo — la sua API non è ancora congelata (minor)¶
Il modulo csi è introdotto nella v4.8.0 e la sua API si è evoluta durante la release: csi.fb() è stato rimosso e csi.CSI.snapshot() (image=...) ora richiede un’immagine mutabile e disegna/scala il frame acquisito al suo interno invece di eseguire una copia profonda grezza. Chi adotta in anticipo il nuovo modulo dovrebbe rifare i test; l’API legacy sensor non è interessata.
Modalità stream di image.ImageIO e close() (minor)¶
image.ImageIO — l’argomento mode ora accetta solo le minuscole 'r' / 'w' (le maiuscole vengono rifiutate con un messaggio di errore aggiornato) e l’apertura con 'w' tronca/ricrea sempre il file invece di preservare uno stream esistente. ImageIO.close() ora è idempotente (chiudere uno stream già chiuso non solleva più un’eccezione) e restituisce None invece dell’oggetto stream.
Valore di ritorno di BlazeFace / BlazePalm (minor)¶
I post-processori BlazeFace e BlazePalm (nuovi in questa release) ora restituiscono una singola lista di bounding box invece dell’intera lista per classe — chi li chiama indicizza il risultato direttamente anziché con [0].
Commit: 75e16b573
La callback del post-processore ML riceve i tensori grezzi (behavior)¶
Una callback di post-elaborazione di predict() di ml.Model ora riceve i riferimenti al tensore di output grezzo (quantizzato) invece di ndarray float pre-convertiti — questo evita l’esaurimento della memoria sui modelli grandi. Se non viene fornita alcuna callback, l”ndarray float viene comunque restituito. Le callback personalizzate devono dequantizzare i tensori da sole (i post-processori integrati lo fanno già).
Commit: 84e6ee650
Clock della camera disaccoppiato dallo stato CSI (behavior)¶
Il clock del sensore ora è indipendente dallo stato CSI. set_clock / set_frequency riconfigura il clock solo quando la frequenza richiesta differisce di più di una tolleranza, e get_clk_frequency accetta un booleano per restituire la frequenza esatta (anziché nominale). Il clock predefinito è 24 MHz su OpenMV N6 e AE3, quindi all’avvio non è necessario alcun set_clock() esplicito. Gli script che commutavano il clock per acquisizioni sensibili al tempo dovrebbero ricontrollare le proprie assunzioni.
Commit: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
Protocollo di debug USB e target del firmware (tooling)¶
Nulla di tutto questo interessa gli script MicroPython. I comandi USBDBG obsoleti (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) sono stati rimossi e i comandi non supportati provenienti da IDE più vecchi ora vengono scartati invece di mandare in crash le schede TinyUSB alla connessione; il vecchio target del firmware UVC STM32 è stato rimosso. I vecchi strumenti host dovrebbero aggiornarsi; vedi la cronologia del repository del firmware per i dettagli.
Checklist di migrazione¶
Per un porting pulito alla v4.8.0 il lavoro tipico è:
Se usavi il FLIR Lepton tramite
fir, passa ad acquisirlo come sensore camera (la modifica fir/Lepton).Sostituisci qualsiasi uso del
buzzerconmachine.PWM(la rimozione del buzzer).Rimuovi le chiamate a
omv.disable_fb()(la rimozione di omv.disable_fb()).Per
image.ImageIO: usa le minuscole'r'/'w'e aspettati che'w'tronchi (la modifica di ImageIO).Per le callback di post-elaborazione ML personalizzate: dequantizza tu stesso i riferimenti al tensore grezzo, oppure affidati al percorso float predefinito (la modifica della callback).
Ricontrolla qualsiasi script che pilotava il clock del sensore per acquisizioni sensibili al tempo (la modifica del clock).