v3.6.1

v3.6.1 è una versione importante. Introduce il modulo imu (LSM6DS3), una serie di nuove API getter per sensor con rotazione automatica guidata dall’IMU, la correzione prospettica a 4 punti rotation_corr() e avvia l”Arduino Portenta H7 con le camere HIMAX HM01B0 e OV7690. Diverse API di sensor / image sono cambiate e TensorFlow è stato rimosso sull’M7 — leggi le modifiche incompatibili più sotto.

In evidenza

  • imu — accelerometro / giroscopio / temperatura / roll / pitch sull’LSM6DS3 (OpenMV 4 / Portenta).

  • Getter del sensore + rotazione automaticaget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation() e rotazione degli snapshot guidata dall’IMU.

  • Correzione prospetticarotation_corr() acquisisce le keyword fov e corners (4 punti).

  • Nuovo hardware — Arduino Portenta H7, HIMAX HM01B0 e camera OV7690.

  • Incompatibile: set_pixformat() / set_framesize() ora restituiscono None, sensor.set_framerate() è stata rimossa, TensorFlow è stato rimosso sull’M7 e lens_corr() / linpolar() ora richiedono dimensioni pari — vedi le modifiche incompatibili.

Nuove funzionalità

  • imu — un nuovo modulo IMU: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch() e imu.sleep() (LSM6DS3 su OpenMV 4 / Portenta).

  • Getter del sensore — aggiunte sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose() e set_auto_rotation() / get_auto_rotation().

  • Rotazione automaticasensor.snapshot() usa l’IMU per ribaltare / specchiare / trasporre i frame quando la rotazione automatica è abilitata.

  • rotation_corr() — aggiunte le keyword fov e corners (prospettiva a 4 punti), con esempi di correzione prospettica.

  • lcd.init() — aggiunto l’argomento keyword bgr.

  • collections.deque — abilitata nella build di MicroPython.

  • Aggiunte le costanti id sensor.OV7690 e sensor.HM01B0 e un esempio di filtro immagine in stile numpy con ulab.

Altre modifiche e miglioramenti

  • Ottimizzati in modo significativo i filtri immagine (mediana / moda / media / …), find_circles() e la correzione della lente; alloc_extra_fb può ora allocare un numero qualsiasi di byte; il modello di rilevamento persone è stato ricostruito con una nuova operazione di average-pool.

Correzioni di bug

Camera e sensori:

  • Corretti il sleep() dell’OV2640 (ora usa il registro standby COM2 invece del pin di power-down), la configurazione del pin FSYNC, le polarità HSYNC/VSYNC e l’indirizzo/scansione I2C dell’HM01B0, la GPIO di power-down del sensore e il pin di reset della camera sul Portenta, e disabilitata la rotazione automatica quando il pitch dell’IMU è vicino a 90°/270°.

Imaging e sistema:

  • Corretti un bug di controllo dei limiti in un filtro immagine, un hardfault durante la disabilitazione della D-cache, l’avvio su schede senza scheda SD, un bug load_to_fb di tf.load(), lo stack overflow del rilevamento persone (stack H7 portato a ≥12 KB) e gli offset dei descrittori USB per la modalità high-speed sull’OpenMV 4 Plus.

Hardware e supporto schede

  • Arduino Portenta H7 — avvio iniziale della scheda (configurazione clock/OSC/HSE dell’STM32H747, header CMSIS, ADC, SDRAM, PID USB Arduino).

  • HIMAX HM01B0 — nuovo driver per camera monocromatica (Bayer, clock con oscillatore esterno).

  • OV7690 — nuovo driver per camera.

  • IMU LSM6DS3 — OpenMV 4 / Portenta.

Modifiche incompatibili delle API

Modifiche incompatibili visibili all’utente tra la v3.6.0 e la v3.6.1. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Ogni modifica è contrassegnata dal suo impatto:

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

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

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

sensor.set_framerate() rimossa (minor)

Lo stub no-op sensor.set_framerate() è stato rimosso; chiamarlo ora solleva AttributeError. Rimuovi la chiamata e controlla la temporizzazione dei frame tramite framesize/esposizione. (Una set_framerate() funzionante è reintrodotta nella v4.0.2.)

Commit: 705e98f91

TensorFlow rimosso sull’OpenMV Cam M7 (minor)

TensorFlow (il modulo tf) è stato disabilitato sull’OpenMV Cam M7 / OpenMV 3 (non ci sta più). import tf sull’M7 fallisce — usa una camera di classe H7 per TensorFlow. (tf è riabilitato sull’F7 nella v3.6.3.)

Commit: 2ae875077

set_pixformat() / set_framesize() restituiscono None (behavior)

sensor.set_pixformat() e sensor.set_framesize() ora restituiscono None invece di True e un formato pixel non supportato ora solleva un ValueError invece di un’asserzione. Il codice che controllava il valore di ritorno (ad es. if sensor.set_pixformat(...):) deve smettere di farlo, e il codice che catturava AssertionError per i formati non supportati deve catturare ValueError.

Commit: f314ac4e7

lens_corr() / linpolar() / logpolar() richiedono dimensioni pari (behavior)

image.lens_corr() e image.linpolar() / image.logpolar() ora richiedono larghezza e altezza pari dell’immagine e sollevano un errore con dimensioni dispari. Ritaglia o ridimensiona l’immagine a dimensioni pari prima di chiamare questi metodi.

Commit: b36460a36, 2b26ca17b

Checklist di migrazione

Per un porting pulito alla v3.6.1 il lavoro tipico è:

  1. Rimuovi le chiamate a sensor.set_framerate() (la rimozione di set_framerate).

  2. Sposta i carichi di lavoro TensorFlow fuori dall’OpenMV Cam M7 (la modifica a TensorFlow sull’M7).

  3. Smetti di affidarti al valore di ritorno di set_pixformat() / set_framesize() e cattura ValueError per i formati pixel non supportati (la modifica al valore di ritorno).

  4. Garantisci dimensioni dell’immagine pari prima di lens_corr() / linpolar() / logpolar() (il requisito delle dimensioni pari).

Tutti gli altri script funzionano senza modifiche.