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 e find_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 e Net.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).

  • Imagingimage.find_circles() ha ottenuto i parametri r_min / r_max / r_step (Hough più veloce), find_keypoints() e find_features() Haar ora accettano immagini RGB e image.compress() / la codifica JPEG ora supportano le immagini binarie (bitmap).

  • Bootboot.py ora 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 / xalloc più chiari; soppresso il rumore di printf di nn durante il caricamento della rete; riorganizzato il repository (esempi → scripts/, strumenti → tools/, cascate Haar → ml/). Il modulo nn non è disponibile sulla OpenMV 2 (flash insufficiente).

Correzioni di bug

Imaging:

  • Corretto fast_atan2f per x≤0 (in precedenza sempre 0 — ricontrolla gli angoli di blob / linee / keypoint), la gestione della memoria di find_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 macro TO_GS_PIXEL (integrale / morph), lo streaming bitmap/JPEG per frame in scala di grigi (bpp==0), il pop_front delle liste di keypoint/blob e i risultati di match_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

find_apriltags() limitato a 64K pixel (comportamento)

image.find_apriltags() ora solleva un’eccezione se l’immagine (o la ROI) supera i 64K pixel e restituisce una lista vuota per immagini più piccole di 4x4. Riduci le immagini grandi (usa un framesize più piccolo o passa una roi esplicita) prima di chiamare find_apriltags().

Commit: bd77afbc0

Checklist di migrazione

Per un adattamento pulito alla v3.0.0 il lavoro tipico è:

  1. Sostituisci image.find_number() / image.classify_object() con il modulo nn (la migrazione a nn).

  2. Racchiudi sensor.sleep() / sensor.reset() in try / except invece di controllare un valore booleano restituito (la modifica di sensor.sleep).

  3. Gestisci i conteggi reali dei byte da send / recv dei socket WINC (la modifica dei socket WINC).

  4. Usa l’immagine restituita da image.binary() invece di aspettarti una modifica in loco (la modifica di binary).

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