v4.5.3

La v4.5.3 è una release di ampia portata: autofocus per OV5640, disegno di linee con anti-aliasing, un decodificatore JPEG hardware integrato nel mainline, importanti miglioramenti per i.MX RT (RT1060) e un’ampia serie di correzioni per camera/ISP. Alcuni metodi immagine raramente usati sono stati rimossi e alcune API ISP/display sono cambiate — leggi le modifiche incompatibili qui sotto.

In evidenza

  • Autofocus OV5640 — abilitato su OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), con un esempio.

  • draw_line() con anti-aliasing e un decodificatore JPEG hardware STM32 integrato nel mainline (decompressione JPEG più veloce).

  • OpenMV RT1060 ha ottenuto ulab, le operazioni ISP, set_framerate() / set_frame_callback(), un frame buffer molto più grande e il driver CAN.

  • Modifica incompatibile: Image.div() / cartoon() / mul() sono stati rimossi e alcune API ISP/display sono cambiate — vedi le modifiche incompatibili.

Nuove funzionalità

  • Autofocus OV5640 — il firmware di autofocus è abilitato su OPENMV4, OPENMV4P e OPENMV RT1060; attivalo con sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). È stato aggiunto un nuovo esempio 07-Sensor-Control/autofocus.py.

  • Disegno di linee con anti-aliasingdraw_line() ha ottenuto l’anti-aliasing.

  • Controller di display SPI personalizzatiSPIDisplay ora accetta una parola chiave controller= ed espone un hook bus_write per sequenze di init/comando personalizzate.

  • Aggiornamento di Image.ccm() — ora accetta matrici annidate 3x3 / 4x3 / 3x4 / 4x4 e array ulab (con una riga di offset opzionale per canale); aggiunto un esempio di correzione del colore.

  • Acquisizione JPEG i.MX RT — acquisizione sensor.JPEG su Arduino Portenta/Nicla Vision/Giga, oltre a set_framerate() e set_frame_callback() sul port mimxrt.

  • Validazione dei modelli TFLite — i modelli ora contengono un hash dell’ordine degli operatori e la dimensione del set di operatori.

  • WiFi — aggiunte le costanti di modalità di sicurezza CYW43; nuovi script di esempio per il controllo della scheda i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

Altre modifiche e miglioramenti

  • MicroPython aggiornato alla 1.22; CMSIS aggiornato alla 5.9.0.

  • Decodificatore JPEG hardware STM32 integrato nel mainline — decompressione JPEG più veloce sul codec on-chip.

  • Ottimizzati Image.invert() / negate() e le operazioni immagine binarie/matematiche (intrinseche CMSIS).

  • Le librerie rpc e vl53l1x sono state rese portabili (usano machine / time invece di pyb), così funzionano su port non STM32.

  • Memcpy del frame buffer accelerato via DMA su OpenMV H7 / H7 Plus / Pro / Pure Thermal e Arduino Giga / Nicla Vision / Portenta H7; STM32 ora scansiona i dispositivi I2C una sola volta per scansione per un avvio più veloce.

Correzioni di bug

Camera e sensori:

  • Corretto il clock XCLK della camera STM32 a un duty cycle reale del 50% e un bug quando la frequenza di clock della camera è impostata a zero; corretti il crop+transpose Bayer, lo shift di colore YUV422 e set_windowing() sul port mimxrt.

  • Corretti il probe del chip-ID GC2145 e hmirror/vflip su montaggi ruotati; corretti il PAJ6100 sul RT1062 e un overflow del buffer SPI PixArt PAJ7620/PAW3902.

Elaborazione delle immagini:

  • Corretti il clipping della roi di find_rects(), il troncamento dell’offset frazionario di morph(), i valori predefiniti di contrasto/luminosità di image.gamma(), gli offset A/B di get_threshold() su RGB565 e la decodifica JPEG di dimensioni non multiple di 8.

Sistema e librerie:

  • machine.LED.value() senza argomenti ora restituisce lo stato del LED invece di azzerarlo; corretti il deinit del SSEL SPI su un bus condiviso, machine.deepsleep() sul RT1062, un crash TF in caso di operatori mancanti e l’auto-attivazione della NIC WINC1500/ninaw10 su connect().

Hardware e supporto schede

  • OpenMV RT1060 — abilitati ulab e le operazioni ISP, frame buffer più grande (10M→20M) / fb_alloc (2M→11M), driver CAN ripristinato, più heap.

  • Arduino GIGA — supporto della camera GC2145, con rilevamento automatico GC2145/OV5640 (condividono un indirizzo I2C).

  • i.MX RT — supporto dell’acquisizione sensor.JPEG.

Modifiche incompatibili dell’API

Interruzioni dell’API visibili all’utente tra la v4.5.2 e la v4.5.3. Ambito: i C-module Python in modules/ e le librerie Python in scripts/libraries/.

Ogni modifica è contrassegnata con il suo impatto:

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

  • comportamento — stessa API, risultati diversi; ricontrolla gli script ottimizzati.

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.

Metodi immagine rimossi (minore)

Image.div(), Image.cartoon() (e il suo esempio) e Image.mul() sono stati rimossi.

Commit: 7c932602e, 055a468b8, 4fe7fb63b

API del modulo display (minore)

Il fallback legacy del nome di modulo udisplay è stato rimosso — il modulo è registrato solo come display. I metodi dsi_write() / dsi_read() riservati al DSI sono stati sostituiti da bus_write() / bus_read(), che ora sono disponibili su tutti i controller di display.

Commit: 7df6694c3, 7d1f378a0

Modifiche all’API di MQTT e tf.regression (minore)

Il MQTTClient della libreria mqtt è stato rielaborato: port è ora obbligatorio, sono state aggiunte le nuove parole chiave del costruttore ssl_params / callback e un argomento timeout su connect(), i vecchi valori predefiniti ssl= / port=0 sono stati rimossi e check_msg() è ora non bloccante. tf.regression() è stato riscritto — la sua firma è ora regression(model, array) e gestisce modelli 1D/2D/3D e quantizzati (int8).

Commit: d12874c63, c5ec576c1

Modifiche al comportamento di ISP / sensore (comportamento)

Image.awb() è stato rielaborato — gray-world (predefinito) vs white-patch (max=True) è ora esplicito, e l’argomento max più gli argomenti gamma / contrast / brightness di Image.gamma() sono ora solo per parola chiave (le chiamate posizionali devono essere aggiornate). La trasposizione dell’immagine è ora disabilitata per YUV422 (in precedenza produceva un output errato) e lo shift di colore YUV422 è stato corretto per corrispondere a Bayer. Il percorso JPEG STM32 ora solleva un errore in caso di mancata corrispondenza della geometria JPEG invece di produrre un’immagine corrotta, e la modalità AP WiFi ora applica una modalità di sicurezza predefinita sui port STM32 e i.MX RT.

Commit: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Checklist di migrazione

Per un porting pulito alla v4.5.3 il lavoro tipico è:

  1. Smetti di usare Image.div() / cartoon() / mul() (i metodi rimossi).

  2. Importa il modulo display come display e passa da dsi_write/ dsi_read a bus_write/bus_read (la modifica dell’API del display).

  3. Aggiorna la costruzione di MQTTClient (port è obbligatorio; ssl_params/callback) e tutte le chiamate tf.regression() (le modifiche dell’API delle librerie).

  4. Passa max di awb() e gamma/contrast/ brightness di gamma() come argomenti per parola chiave, e ricontrolla le assunzioni su YUV422/trasposizione e sulla sicurezza in modalità AP (le modifiche a ISP/sensore).