v3.0.0¶
v3.0.0 è la versione principale del passaggio v2 → v3. Introduce la OpenMV Cam M7 (STM32F7) e il nuovo modulo di reti neurali nn basato su CMSIS-NN (che sostituisce i vecchi metodi cablati find_number() / classify_object()), aggiunge il supporto per i sensori MT9V034 a global shutter e FLIR Lepton, le risoluzioni sensor.WVGA e aggiorna il core a MicroPython 1.9.4. Diversi comportamenti di image / sensor / WiFi sono cambiati — leggi le modifiche incompatibili qui sotto.
In evidenza¶
OpenMV Cam M7 — nuova scheda STM32F7.
Modulo
nn— inferenza CMSIS-NN:nn.load(),Net.forward(),Net.search(), con un convertitore di modelli ed esempi.Nuovi sensori — MT9V034 a global shutter (attivato da FSIN) e FLIR Lepton.
Aggiornamento del core a MicroPython 1.9.4.
Incompatibile: i metodi cablati
image.find_number()/image.classify_object()sono stati rimossi,sensor.sleep()ora solleva un’eccezione, i socket WINC restituiscono i conteggi reali dei byte,image.binary()restituisce una nuova immagine efind_apriltags()è limitato a 64K pixel — vedi le modifiche incompatibili.
Nuove funzionalità¶
nn— un nuovo modulo di reti neurali CMSIS-NN:nn.load(path),Net.forward(img, roi=, softmax=, dry_run=)(restituisce float tra 0.0 e 1.0),Net.search()per il rilevamento multi-scala/posizione eNet.test(), oltre a un convertitore di modelli CMSIS-NN (nn_convert.py/nn_quantizer.py), modelli CIFAR-10 / LeNet / smile inclusi e script di esempio NN / NN-search.Sensori — supporto MT9V034 a global shutter (snapshot attivato da FSIN) sulla OpenMV 4, un driver FLIR Lepton aggiornato con snapshot Lepton e le nuove risoluzioni
sensor.WVGA(720x480) /sensor.WVGA2(752x480).Imaging —
image.find_circles()ha ottenuto i parametrir_min/r_max/r_step(Hough più veloce),find_keypoints()efind_features()Haar ora accettano immagini RGB eimage.compress()/ la codifica JPEG ora supportano le immagini binarie (bitmap).Boot —
boot.pyora viene eseguito prima dell’inizializzazione USB, così da poter sovrascrivere la modalità USB (ad esempio HID).Esempi — aggiunti esempi AprilTag in piccola/alta risoluzione, un esempio I2C LIDAR-Lite V3 e strumenti per i dataset (
augment_images.py/make_patches.py).
Altre modifiche e miglioramenti¶
Aggiornato il MicroPython incluso alla 1.9.4 (con un ripristino di pyexec parse/compile/exec e una correzione PendSV); messaggi di errore di esaurimento memoria
fb_alloc/xallocpiù chiari; soppresso il rumore di printf dinndurante il caricamento della rete; riorganizzato il repository (esempi →scripts/, strumenti →tools/, cascate Haar →ml/). Il modulonnnon è disponibile sulla OpenMV 2 (flash insufficiente).
Correzioni di bug¶
Imaging:
Corretto
fast_atan2fper x≤0 (in precedenza sempre 0 — ricontrolla gli angoli di blob / linee / keypoint), la gestione della memoria difind_apriltags()(contenuti persi e una realloc errata in caso di OOM), i puntatori di riga per bpp binari/bitmap (risultati binari corrotti),find_edges(EDGE_CANNY)con una ROI, la macroTO_GS_PIXEL(integrale / morph), lo streaming bitmap/JPEG per frame in scala di grigi (bpp==0), ilpop_frontdelle liste di keypoint/blob e i risultati dimatch_descriptor.
Sistema e camera:
Corretti i numeri di interfaccia/endpoint dell’HID USB, la modifica dinamica a runtime della frequenza XCLK,
Net.forward()che restituisce il numero corretto di output e un hardfault durante l’interruzione del parsing dello script.
Hardware e supporto delle schede¶
OpenMV Cam M7 (STM32F7) — nuova scheda.
Sensore MT9V034 a global shutter (OpenMV 4, attivato da FSIN).
FLIR Lepton — driver aggiornato con supporto snapshot.
Modifiche API incompatibili¶
Modifiche API visibili all’utente tra la v2.9.0 e la v3.0.0. Ambito: i moduli C Python in modules/ e le librerie Python in scripts/libraries/.
Ogni modifica è contrassegnata con il suo impatto:
major — riguarda la maggior parte degli script che usavano la funzionalità; sarà necessario adattare il codice.
minore — API ristretta; riguarda solo gli script che la usavano.
comportamento — stessa API, risultati diversi; ricontrolla gli script messi a punto.
Le modifiche sono raggruppate per impatto in quest’ordine. Se vuoi solo adattare il tuo codice, vai direttamente alla checklist di migrazione alla fine. Ogni hash di commit rimanda al relativo diff su GitHub.
image.find_number() / image.classify_object() rimossi (major)¶
I metodi cablati image.find_number() (LeNet) e image.classify_object() (CMSIS CNN) sono stati rimossi in favore del nuovo modulo nn. Sostituiscili con net = nn.load('/model.network'); out = net.forward(img).
Commit: d151f7e38
sensor.sleep() / sensor.reset() sollevano un’eccezione in caso di errore (minore)¶
sensor.sleep() e sensor.reset() ora sollevano un’eccezione in caso di errore invece di restituire True / False. Il codice che controllava il valore booleano restituito da sensor.sleep() deve invece racchiudere la chiamata in try / except.
Commit: 7d16d008f
I socket WINC restituiscono il conteggio reale dei byte (comportamento)¶
I metodi send / recv / sendto / recvfrom dei socket WINC1500 in precedenza restituivano sempre 0; ora restituiscono il numero effettivo di byte trasferiti. Il codice che presupponeva un valore di ritorno 0 (o vi entrava in loop/bloccava) deve gestire i conteggi reali.
Commit: a07fb2f60
image.binary() restituisce una nuova immagine (comportamento)¶
image.binary() ha ottenuto i parametri to_bitmap / copy e ora restituisce un nuovo oggetto immagine invece di restituire/modificare in loco l’immagine sorgente. Il codice che si basava su binary() per modificare l’immagine originale dovrebbe usare l’oggetto restituito (e passare copy=True per un comportamento non in loco).
Commit: 8a44f0cd9
Checklist di migrazione¶
Per un adattamento pulito alla v3.0.0 il lavoro tipico è:
Sostituisci
image.find_number()/image.classify_object()con il modulonn(la migrazione a nn).Racchiudi
sensor.sleep()/sensor.reset()intry/exceptinvece di controllare un valore booleano restituito (la modifica di sensor.sleep).Gestisci i conteggi reali dei byte da
send/recvdei socket WINC (la modifica dei socket WINC).Usa l’immagine restituita da
image.binary()invece di aspettarti una modifica in loco (la modifica di binary).Riduci le immagini prima di
find_apriltags()per restare sotto i 64K pixel (il limite di find_apriltags).
Tutti gli altri script vengono eseguiti senza modifiche.