v4.5.1

v4.5.1 aggiunge suggerimenti di disegno per l’orientamento/le proporzioni delle immagini, il caricamento delle immagini direttamente da un percorso file, un ioctl per il campo visivo ampio del GC2145 e una nuova API per il controllo della retroilluminazione. Rielabora inoltre il costruttore Image(), le API display e il parsing degli argomenti dei moduli — leggi le modifiche non retrocompatibili di seguito.

In evidenza

  • Suggerimenti di disegnodraw_image() ha acquisito suggerimenti di orientamento (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) e di ridimensionamento delle proporzioni (SCALE_ASPECT_KEEP/EXPAND/IGNORE).

  • Caricamento delle immagini da discodraw_image() / display.write() accettano una stringa di percorso file.

  • Controllo della retroilluminazione — nuove classi DACBacklight / PWMBacklight e un argomento backlight= per il display.

  • Modifica non retrocompatibile: il costruttore Image(), le API display e il parsing degli argomenti dei moduli sono cambiati — vedi le modifiche non retrocompatibili.

Nuove funzionalità

  • Suggerimenti di orientamento per draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE, oltre alle comode image.ROTATE_90 / ROTATE_180 / ROTATE_270.

  • Suggerimenti di proporzioni per draw_image()image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE per adattare / espandere / allungare.

  • Costanti di paletteimage.PALETTE_RAINBOW e image.PALETTE_IRONBOW (spostate nel modulo image).

  • Campo visivo ampio — nuovi ioctl sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE (sul GC2145, fino a 5x di scaling del sensore).

  • Caricamento da discodraw_image() e display.write() accettano una stringa di percorso file dell’immagine sorgente, caricandola direttamente dallo storage.

  • Controller della retroilluminazione — nuove classi DACBacklight e PWMBacklight (importabili da display) e un argomento solo-keyword backlight= nei costruttori dei display SPI/paralleli.

Altre modifiche e miglioramenti

  • Il driver del display DSI ST7701 è stato spostato nel proprio modulo st7701.py (ancora importabile tramite from display import *) ed è frozen su Arduino Giga; il driver IMU lsm9ds1 è stato frozen sull’Arduino Nano 33 BLE Sense.

  • Le camere MT9V022 / MT9V034 (global-shutter) ora applicano la correzione del rumore di riga per una migliore qualità dell’immagine.

  • Il volume di archiviazione di massa USB dell’i.MX RT è ora etichettato come disco OpenMV.

Correzioni di bug

Camera e sensori:

  • Corretto il rilevamento degli angoli (find_keypoints() FAST/AGAST) su immagini più alte di 480 righe — il buffer per riga è ora dimensionato in base all’altezza dell’immagine.

  • Aggiunto il supporto del pin FSYNC per snapshot() sincronizzato per frame su i.MX RT (OpenMV RT1060) e corretti i pin MOSI/MISO SPI4 scambiati sull’RT1060.

Display e video:

  • Corretto l’ordine degli argomenti del costruttore SPIDisplay (bgr, byte_swap, triple_buffer venivano applicati ai parametri sbagliati).

  • Corretta la corruzione dell’immagine dello shield TV durante il disegno di un’immagine con un rettangolo specificato e i limiti errati dei frame MJPEG durante la registrazione di frame ridimensionati.

Networking:

  • La modalità AP WiFi WINC non impone più l’obsoleta restrizione solo-WEP — le modalità AP open e WPA funzionano con una corretta gestione della PSK.

Hardware e supporto schede

  • OpenMV RT1060 — pin FSYNC e pin SPI4 corretti.

  • Arduino GIGA — soluzione alternativa per l’affidabilità QSPI; display ST7701 frozen.

  • Arduino Nano 33 BLE Sense — driver IMU lsm9ds1 frozen.

Modifiche API non retrocompatibili

Modifiche API visibili all’utente tra la v4.5.0 e la v4.5.1. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Ogni modifica è contrassegnata in base al suo impatto:

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

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

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

Costruttore Image() e API display (minor)

Il costruttore image.Image è stato rielaborato per usare argomenti keyword (height, pixformat, buffer=, copy_to_fb=); ora può costruire un’immagine a partire da un bytearray/buffer esistente, e per i formati compressi è richiesto un buffer. display.write() è stato rielaborato: x_scale/y_scale ora accettano un float (rapporto di scala) o un int (dimensione target in pixel) e i keyword separati x_size/y_size sono stati rimossi. Il primo argomento posizionale di WINC.connect() è stato rinominato essidssid e i risultati della scansione WiFi WINC sono cambiati in (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID ora sono bytes; il BSSID non è più una stringa MAC formattata).

Commit: 6752c95ac, 161737092, 8178c237c, b6cdf8de1

Intervallo della retroilluminazione, scaling e argomenti solo-keyword (behavior)

Display.backlight() ora accetta un’intensità 0–100 (0 = spento, 100 = massimo) invece di 0–255, sollevando ValueError se fuori intervallo. I valori interi x_scale/y_scale sono ora trattati come un fattore di scala moltiplicativo (come i float) anziché come una dimensione target in pixel — questo interessa fir.snapshot()/draw_ir(), tof.snapshot()/ draw_depth(), display e lo scaling tv. Il parsing degli argomenti nei moduli sensor, fir, tof, tv, mjpeg, gif, imageio, tf e audio è stato unificato, rendendo solo-keyword diverse opzioni precedentemente posizionali (nomi, valori predefiniti e comportamento restano per il resto invariati).

Commit: 391ec443f, 8bd25d6cd, 477312656, 08bf62a32, a4c0f20bf, 9b411a66d, 3d679f5a6, d15fc6b8d, 555e67ecd

Checklist di migrazione

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

  1. Aggiornare la costruzione di Image() alla nuova forma keyword, abbandonare x_size/y_size in display.write() e rinominare essidssid di WINC.connect() (gestendo le nuove tuple di scansione basate su bytes) (le modifiche al costruttore/display/WINC).

  2. Riscalare le chiamate a Display.backlight() a 0–100, ricontrollare qualsiasi uso intero di x_scale/y_scale e passare come keyword le opzioni dei moduli un tempo posizionali (le modifiche di comportamento).