v2.7.0

La v2.7.0 modernizza l’API del sensor per guadagno automatico / esposizione automatica / bilanciamento del bianco passando a unità fisiche (dB / microsecondi), revisiona la correlazione di fase find_displacement() (aggiungendo rotazione/scala) e aggiunge get_similarity() (SSIM), chrominvar() / illuminvar(), framebuffer aggiuntivi e una libreria MQTT. È una grande release con incompatibilità — leggi le modifiche incompatibili qui sotto.

In evidenza

  • API sensore modernaset_auto_gain() / set_auto_exposure() / set_auto_whitebal() ora usano dB / microsecondi, con i corrispondenti get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Correlazione di fasefind_displacement() rielaborata con rotazione / scala e find_rotscale() / linpolar() / logpolar().

  • SSIM — similarità strutturale image.get_similarity().

  • Framebuffer aggiuntivisensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — una nuova libreria MQTT.

  • Incompatibilità: l’API del sensore per guadagno/esposizione/bilanciamento del bianco, i framesize di find_displacement() / FFT, find_number(), gli strumenti del firmware WINC e z_rotation() di AprilTag sono tutti cambiati — vedi le modifiche incompatibili.

Nuove funzionalità

  • Sensore — aggiunti sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), un argomento gain_db_ceiling su set_auto_gain(), il supporto hmirror / vflip per l’MT9V034 e sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() per framebuffer aggiuntivi in RAM.

  • Immagine — aggiunti remove_shadows(), min() / max() (differenza tra frame), get_similarity() (SSIM) con un esempio di similarità strutturale, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), gli argomenti threshold / offset / invert sui filtri adattivi mean() / mode() / median() / midpoint(), len() / l’indicizzazione sull’oggetto keypoints e un accessor .match() sull’oggetto di corrispondenza keypoint.

  • Librerie / rete — aggiunta una libreria MQTT (con un esempio MQTT su WiFi) e una modalità network.WINC.MODE_BSP per programmare il firmware WINC tramite la UART di debug.

  • Esempi — aggiunti gli script a basso consumo deep_sleep.py / stop_mode.py, flusso ottico avanzato ed esempi lineari/log-polari; il firmware ora analizza uart.ini all’avvio per abilitare una UART REPL.

Altre modifiche e miglioramenti

  • get_regression() ha guadagnato gli argomenti area_threshold / pixels_threshold e una regressione robusta più veloce (per line-following / racing); get_pixel() ora supporta le immagini Bayer; aggiunte le fondamenta per STM32H7 (header CMSIS / HAL / bootloader — la scheda H7 non è ancora utilizzabile); aggiornato il firmware WINC1500 incluso (19.4.4 / 19.5.2).

Correzioni di bug

Imaging:

  • Corretti il bug di accesso fuori dai limiti nella ricerca a diamante di find_template(), la corruzione di logpolar / linpolar e illuminvar() che impazziva su valori di colore prossimi allo zero.

Sensore e sistema:

  • Corretti i bug del controllo automatico del guadagno, ripristinata la dimensione di MAIN_FB su snapshot() (così che copy_to_fb a una risoluzione diversa, il ridimensionamento del FB e il pooling del flusso ottico funzionino di nuovo), il timeout di gethostbyname del WINC, il clear-status di pydfu sul bootloader H7 e le modalità a basso consumo stop/standby.

Hardware e supporto schede

  • STM32H7 — fondamenta (CMSIS / HAL / bootloader); la scheda OpenMV H7 non è ancora utilizzabile in questa release.

  • WINC1500 — firmware incluso aggiornato.

Modifiche incompatibili dell’API

Rotture dell’API visibili all’utente tra la v2.6.0 e la v2.7.0. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Ogni modifica è contrassegnata dal suo impatto:

  • major — riguarda la maggior parte degli script che usavano la funzionalità; dovrai adattare il codice.

  • minor — API ristretta; riguarda solo gli script che la usavano.

  • behavior — stessa API, risultati diversi; ricontrolla gli script messi a punto.

Le modifiche sono raggruppate per impatto in quell’ordine. Se vuoi solo adattare il tuo codice, salta alla checklist di migrazione in fondo. Ogni hash di commit rimanda al suo diff su GitHub.

sensor.set_auto_gain() rielaborata in dB (major)

sensor.set_auto_gain() non accetta più l’argomento intero value= e non restituisce più True / False. Usa sensor.set_auto_gain(False, gain_db=...) (un valore float in dB), rileggilo con il nuovo sensor.get_gain_db() e racchiudi la chiamata in try / except poiché ora il fallimento solleva ValueError.

Commit: b906c5f19

sensor.set_auto_exposure() rielaborata in microsecondi (major)

sensor.set_auto_exposure() non accetta più l’argomento intero value= e non restituisce più True / False. Usa sensor.set_auto_exposure(False, exposure_us=...), rileggilo con il nuovo sensor.get_exposure_us() e gestisci il ValueError sollevato in caso di fallimento.

Commit: 7be0a7a18

find_displacement() / framesize FFT revisionati (major)

La correlazione di fase è stata revisionata. image.find_displacement() ora restituisce un oggetto di spostamento (con x_translation() / y_translation() — prima x_offset / y_offset — più rotation() / scale() e i nuovi argomenti logpolar / fix_rotation_scale); il separato oggetto rot-scale è stato rimosso ed è stato aggiunto find_rotscale(). Le costanti framesize FFT sono state rinominate/rimosse: sensor.B40x30 è stata rimossa del tutto, e sensor.B64x32 / B64x64 sono state rinominate in maiuscolo sensor.B64X32 / B64X64 (con le nuove B128X64 / B128X128).

Commit: c78f91b42, 213396d09

sensor.set_auto_whitebal() rielaborata in dB (minor)

sensor.set_auto_whitebal() ha sostituito il suo argomento intero value=[r, g, b] con rgb_gain_db=[r, g, b] (float in dB) e ora restituisce None (sollevando ValueError in caso di fallimento) invece di True / False. Usa il nuovo sensor.get_rgb_gain_db() per rileggere i guadagni.

Commit: 30ecbdc4f

set_hmirror() / set_vflip() restituiscono None (minor)

sensor.set_hmirror() e sensor.set_vflip() ora restituiscono None e sollevano ValueError in caso di fallimento invece di restituire uno stato True / False. Rimuovi qualsiasi codice che si dirama in base al loro valore di ritorno.

Commit: aeb023804

Gli strumenti del firmware WINC richiedono un percorso di file (minor)

Gli strumenti per il firmware di network.WINC sono cambiati: wlan.fw_dump() / wlan.fw_update() ora richiedono un argomento obbligatorio con il percorso del file firmware e il WINC viene aperto in una modalità di programmazione (network.WINC(mode=...)). Aggiorna le chiamate senza argomenti per passare un percorso (es. wlan.fw_update("/winc_19_5_2.bin")).

Commit: fcc3b0b9c

image.find_number() richiede una ROI 28x28 (behavior)

image.find_number() (LeNet) ora richiede una ROI esattamente di 28x28 che rientri nell’immagine e altrimenti solleva un errore (invece di operare su una ROI arbitraria/sull’intera immagine). Passa una roi=(x, y, 28, 28) esplicita.

Commit: 4d09a13f3

Il segno di z_rotation() di AprilTag è invertito (behavior)

La z_rotation() di AprilTag (e la relativa rotation()) ora usa una convenzione di coordinate destrorsa, quindi l’angolo restituito è negato rispetto alle release precedenti. Gli script che dipendono dal vecchio segno devono invertire il valore o adeguare i loro calcoli sull’angolo.

Commit: 7673aaf74

Checklist di migrazione

Per un porting pulito alla v2.7.0 il lavoro tipico è:

  1. Adattare set_auto_gain() a gain_db= + get_gain_db() e gestire ValueError (la rielaborazione del guadagno automatico).

  2. Adattare set_auto_exposure() a exposure_us= + get_exposure_us() (la rielaborazione dell’esposizione automatica).

  3. Aggiornare find_displacement() all’oggetto di spostamento e rinominare le costanti framesize FFT (la revisione di find_displacement).

  4. Adattare set_auto_whitebal() a rgb_gain_db= + get_rgb_gain_db() (la rielaborazione del bilanciamento del bianco) e smettere di controllare il ritorno di set_hmirror() / set_vflip() (la modifica di mirror/flip).

  5. Passare un percorso del firmware agli strumenti WINC fw_* (la modifica degli strumenti WINC).

  6. Passare una roi 28x28 a find_number() (la modifica di find_number) e adeguare i calcoli sull’angolo di AprilTag per il segno invertito di z_rotation() (la modifica di z_rotation).

Tutti gli altri script funzionano senza modifiche.