v3.9.0¶
v3.9.0 è una release maggiore. Aggiunge il port nRF con l”Arduino Nano 33 BLE Sense (camera, modulo audio PDM, ulab, driver dei sensori congelati), introduce i sensori termici FLIR Lepton più MLX90641 / MLX90621 e un modulo fir profondamente rielaborato, gli ioctl di autofocus OV5640 e il nuovo tipo di streaming image.ImageIO. Il vecchio modulo CMSIS-NN nn e le vecchie classi ImageReader / ImageWriter sono stati rimossi: leggi le modifiche incompatibili qui sotto.
In evidenza¶
Arduino Nano 33 BLE Sense — nuovo port nRF52840 con camera, un modulo
audioPDM,ulabe driver dei sensori congelati.Termico — supporto FLIR Lepton, MLX90641 e MLX90621 con un modulo
firrielaborato (palette, mirroring, scaling, radiometria, FFC).Autofocus OV5640 — nuovi ioctl
sensor.IOCTL_*_AUTO_FOCUS.image.ImageIO— un tipo di stream di immagini unificato (memoria o file; read/write/seek/size/close) che sostituisceImageReader/ImageWriter.Incompatibile: il modulo CMSIS-NN
nneimage.ImageReader/image.ImageWritersono stati rimossi e il comportamento difind_lines()/firè cambiato — vedi le modifiche incompatibili.
Nuove funzionalità¶
Port nRF / Arduino Nano 33 BLE Sense — nuovo port nRF52840 e supporto della scheda, con un nuovo modulo
audio(audio.init(),audio.start_streaming(),audio.stop_streaming()),ulababilitato e driver dei sensoriapds9960/lps22h/lsm9ds1/hts221congelati.image.ImageIO— un nuovo tipo di stream di immagini che supporta sia stream in memoria sia su file conread()/write()/seek()/size()/close(), più esempi ImageIO di lettura/scrittura/memoria.FLIR Lepton — aggiunto il supporto
FIR_LEPTONconfir.radiometric(),fir.trigger_ffc()efir.register_vsync_cb().Sensori termici — aggiunto il supporto MLX90641 (
FIR_MLX90641) e termopila MLX90621 (driver ufficiali Melexis).Palette / orientamento di
fir— aggiunte le costantifir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565efir.read_ir()accetta orahmirror/vflip/transpose.Autofocus OV5640 — aggiunti
sensor.IOCTL_TRIGGER_AUTO_FOCUS/IOCTL_PAUSE_AUTO_FOCUS/IOCTL_RESET_AUTO_FOCUS/IOCTL_WAIT_ON_AUTO_FOCUS(OpenMV 2/3/4/4 Plus/PT/Portenta).Riorganizzati gli esempi Arduino in directory per scheda.
Altre modifiche e miglioramenti¶
Passaggio a messaggi di errore MicroPython compressi (stringhe di eccezione più corte); l’argomento
typedifir.init()viene ora rilevato automaticamente tramite una scansione del bus I2C quando omesso; l’eccezionexallocriporta ora il numero di byte richiesti; UART 8 è stata abilitata sul Portenta; gli esempi FIR sono stati consolidati inthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py. Per rientrare nella flash,image.get_similarity()e la selective search sono state disabilitate nella build dell’OpenMV 4, e la libreria image può ora essere compilata senza un filesystem (per schede prive di filesystem).
Correzioni di bug¶
Camera e sensori:
Corretto il calcolo del PCLK dell’OV5640, aggiunti i gestori IRQ I2C mancanti (correggendo i blocchi dei trasferimenti I2C), rielaborata la lettura/scrittura I2C del cambus per affidabilità, reso selezionabile il bus I2C del Lepton, spostati i pin di recupero del bus cambus alla config per scheda, ripetuta la scansione del cambus una volta prima di fallire e reso funzionante l’OpenMV PT (Lepton + camera con I2C condiviso).
Termico:
Corretto il calcolo del valore massimo in
firget_ir()/draw_ir()eimage.get_similarity()(FLT_MIN→-FLT_MAX), la gestione 12→16-bit dell’AMG8833 e l’accuratezza dell’MLX90621 (driver ufficiale Melexis).
Display, audio e sistema:
Spostati i trasferimenti dell’LCD SPI STM32 ai callback SPI dell’HAL (affidabilità del display), corretto
audio.init()del Nano 33 (oscillatore HF + rapporto PDM affinché il microfono funzioni), lo stato del timer dell’H7 con il nuovo HAL, ilgc_collectdell’nRF e l’init/deinit precoce della scheda, e smesso di stampare lo spurio messaggio «uh oh, no preference for overlapping detection» durantefind_apriltags()/find_rects().
Supporto hardware e schede¶
Arduino Nano 33 BLE Sense — nuova scheda nRF52840 (camera, audio PDM,
ulab, driver dei sensori congelati).Sensori termici FLIR Lepton, MLX90641 e MLX90621.
Autofocus OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 abilitata.
Modifiche incompatibili dell’API¶
Rotture dell’API visibili all’utente tra la v3.8.0 e la v3.9.0. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.
Ogni modifica è contrassegnata dal suo impatto:
major — interessa la maggior parte degli script che usavano la funzionalità; dovrai portare il codice.
minor — API ristretta; interessa solo gli script che la usavano.
behavior — stessa API, risultati diversi; ricontrolla gli script calibrati.
Le modifiche sono raggruppate per impatto in quest’ordine. Se vuoi solo portare il tuo codice, vai direttamente alla checklist di migrazione in fondo. Ogni hash di commit rimanda al suo diff su GitHub.
Modulo CMSIS-NN nn rimosso (major)¶
Il modulo CMSIS-NN nn è stato rimosso, inclusi nn.load(), net.forward(), net.search() e l’helper nn_class. L’inferenza dei modelli passa al modulo TensorFlow Lite (tf). Gli script che caricavano modelli .network con nn devono essere portati a tf con un modello TensorFlow Lite.
Commit: fbc767b36
ImageReader / ImageWriter sostituiti da image.ImageIO (major)¶
image.ImageReader / image.ImageWriter e i loro metodi next_frame() / add_frame() sono stati rimossi e sostituiti con il nuovo tipo image.ImageIO, che supporta sia stream in memoria sia su file tramite read() / write() / seek() / size() / close(). Il codice che usa le vecchie classi reader/writer deve essere portato a image.ImageIO (vedi gli esempi rinominati imageio_read.py / imageio_write.py).
Commit: 783a78754
Keyword scale di fir.draw_ir() rimossa (minor)¶
fir.draw_ir() è stata riscritta sopra la nuova pipeline di disegno delle immagini. La keyword scale=(min, max) è stata rimossa, e sono stati aggiunti hint, x_scale, y_scale, roi e gli argomenti posizionali di offset x/y. Gli script che passavano scale=(min, max) a fir.draw_ir() devono eliminarla e usare i nuovi argomenti.
Commit: 0a29103b1
Approssimazione di find_lines() (behavior)¶
image.find_lines() approssima ora la magnitudo del gradiente come (abs(gx) + abs(gy)) / 2 e salta le magnitudo inferiori a 126. È più veloce ma cambia l’insieme delle linee rilevate e i valori dell’accumulatore, quindi ricontrolla e ricalibra threshold / theta_margin / rho_margin.
Commit: 902ae3c98
fir.snapshot() rielaborata (behavior)¶
fir.snapshot() è stata sostanzialmente rielaborata con una nuova API a keyword (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), e gli esempi inclusi sono stati riscritti. Il precedente comportamento posizionale / solo-pixformat è cambiato; porta gli script FIR alla nuova forma a keyword (vedi gli esempi aggiornati dello shield termopila).
Commit: 53f2248b8
fir.init() solleva un’eccezione in caso di fallimento (behavior)¶
fir.init() solleva ora un’eccezione (e de-inizializza in modo pulito) quando il sensore termico non viene rilevato, invece di proseguire silenziosamente. Avvolgi fir.init() in try / except (o assicurati che il sensore sia connesso) dove prima ti affidavi al fatto che non sollevasse eccezioni.
Commit: 4b2f972f3
Checklist di migrazione¶
Per un porting pulito alla v3.9.0 il lavoro tipico è:
Portare l’inferenza dei modelli CMSIS-NN
nnal modulo TensorFlow Litetf(la rimozione di nn).Sostituire
image.ImageReader/image.ImageWriterconimage.ImageIO(la modifica di ImageIO).Eliminare la keyword
scale=(min, max)dafir.draw_ir()e usare i nuovi argomenti (la modifica di draw_ir).Ricalibrare i parametri di
find_lines()rispetto alla metrica di magnitudo approssimata (la modifica di find_lines).Portare gli script FIR alla nuova API a keyword di
fir.snapshot()(la modifica di fir.snapshot) e gestirefir.init()che solleva un’eccezione in caso di sensore mancante (la modifica di fir.init).
Tutti gli altri script funzionano senza modifiche.