v3.3.0

v3.3.0 è una release enorme. Aggiunge il supporto completo alla camera termica FLIR Lepton con una nuova interfaccia sensor.ioctl() e palette di colori, un modulo di uscita video SPI tv, la modalità triggered con global shutter, un grande insieme di nuovi metodi di disegno/analisi del modulo image (gamma_corr(), draw_ellipse(), draw_edges(), molte proprietà dei blob) e nuove librerie ToF / motori / linalg. L’API cpufreq è stata rielaborata e sensor.set_framesize() ora solleva un’eccezione — leggi le modifiche incompatibili più sotto.

In evidenza

  • FLIR Lepton — supporto completo alla camera termica tramite la nuova interfaccia sensor.ioctl(), palette di colori e image.to_rainbow().

  • Modulo tv — uscita video composito / TV via SPI.

  • Modalità triggered con global shutter — cattura triggered MT9V034 tramite sensor.ioctl().

  • Imaginggamma_corr(), draw_ellipse(), draw_edges(), alpha blending in draw_image() e molte nuove proprietà dei blob.

  • Nuove librerie — sensore di distanza ToF VL53L1X, driver motore TB6612, micro-linalg.

  • Incompatibile: l’API cpufreq è stata rielaborata, sensor.set_framesize() ora solleva un’eccezione in caso di errore, sensor.alloc_extra_fb() ha rimosso il supporto a Bayer/JPEG e gli argomenti posizionali di image.replace() sono slittati — vedi le modifiche incompatibili.

Nuove funzionalità

  • FLIR Lepton — aggiunto sensor.ioctl() per il controllo specifico del sensore e un set completo di ioctl per Lepton (radiometria, refresh/risoluzione, esecuzione comandi, set/get attributo, temperatura FPA/AUX in °C, modalità/intervallo di misurazione, larghezza/altezza), sensor.set_color_palette() / sensor.get_color_palette() con sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow() e script di esempio Lepton (27-Lepton).

  • Modalità triggeredIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE per la cattura triggered con global shutter del MT9V034, con esempi ad alto FPS e in modalità triggered.

  • Modulo tv — aggiunti i binding per l’uscita video composito / TV via SPI.

  • Imaging — aggiunti image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), alpha blending in draw_image(), un keyword mask= su clear(), reintrodotti mask_rectangle() / mask_circle() / mask_ellipse(), keyword di rotazione / hmirror / vflip su draw_string() / draw_text(), un keyword transpose (e gli alias assign / set) su replace(), x_scale / y_scale su copy() più crop() / scale(), un costruttore Image() a partire dalle dimensioni, il pixformat sensor.BINARY, l’esportazione delle funzioni di conversione tra spazi colore e molte nuove proprietà dei blob (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, rotazione).

  • Librerie — aggiunti il driver del sensore di distanza ToF vl53l1x, il driver motore tb6612 (con esempi Motor-Shield per motori DC e stepper) e una libreria micro-linalg (ulinalg / umatrix).

  • Aggiornato FatFS a FF13C (con supporto a exFAT).

Altre modifiche e miglioramenti

  • Migliorata la qualità JPEG di default (valore intermedio tra basso e alto invece di un valore fisso); le operazioni in-place sulle immagini non richiedono più di ripetere l’immagine come primo argomento; draw_string() accetta valori di scala non interi.

Correzioni di bug

Camera e sensori:

  • Corretti il blocco all’avvio del Lepton 3.5 (timeout + recovery) e l’affidabilità del reset, set_framesize() prima di set_pixformat() sul MT9V034 (l’ordine delle chiamate non conta più), la WVGA del MT9V034 sull’STM32H7, l’intervallo di auto-esposizione del MT9V034 e gli aggiornamenti dei registri shadow, e il bug dell’ADC dell’H7.

Imaging:

  • Corretti un accesso a memoria non valido in find_apriltags(), copy() quando si copia un’immagine scalata nel frame buffer principale, l’allocazione del frame buffer in to_grayscale() / to_rgb565(), il len() dell’oggetto keypoint, la gestione dei confini delle MCU JPEG, il parsing della lista di soglie in binary() e l’accettazione di tuple di keypoint da parte di draw_keypoints().

Sistema:

  • Corretti i leak da squilibrio mark/free di fb_alloc nei metodi di image / fir / lcd / tv / nn, fatto in modo che py_assert liberi la memoria del frame buffer sulle eccezioni catturate (#417), azzerato il flag di overrun (ORE) della UART affinché gli overrun non blocchino più le letture UART, corretto il gestore dell’IRQ della RTC e corretto lo strumento cascade_convert.py su Windows.

Hardware e supporto schede

  • Camera termica FLIR Lepton.

  • TV shield — uscita video composito / TV via SPI.

  • Modalità triggered con global shutter (MT9V034).

Modifiche incompatibili dell’API

Modifiche incompatibili dell’API visibili all’utente tra v3.2.0 e v3.3.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à; sarà necessario adattare il codice.

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

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

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

API cpufreq rielaborata (major)

Il modulo cpufreq è stato rielaborato per il supporto all’H7. Le costanti cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ e cpufreq.get_frequency() sono state rimosse. cpufreq.set_frequency() ora accetta un intero semplice in MHz (es. cpufreq.set_frequency(120)), e sono state aggiunte cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies().

Commit: 6babf84a1

Gli argomenti posizionali di image.replace() sono slittati (minor)

image.replace() ha guadagnato un argomento transpose, spostando l’argomento posizionale mask dalla posizione 4 alla posizione 5. Il codice che passava mask posizionalmente (es. img.replace(src, hmirror, vflip, mask)) deve passare alla forma con keyword img.replace(src, mask=mask).

Commit: dbe7bf059

sensor.alloc_extra_fb() non accetta più Bayer/JPEG (minor)

sensor.alloc_extra_fb() non accetta più sensor.BAYER o sensor.JPEG (ora supporta anche sensor.BINARY). Il codice che allocava frame buffer extra in formato Bayer o JPEG deve usare GRAYSCALE / RGB565 (oppure allocare il buffer in altro modo).

Commit: f9e6b3fe0

sensor.set_framesize() solleva un’eccezione in caso di errore (behavior)

sensor.set_framesize() ora solleva un ValueError quando la framesize non è supportata invece di restituire False. Il codice che controllava il valore di ritorno False deve invece catturare l’eccezione ValueError.

Commit: b0442633e

Checklist di migrazione

Per un porting pulito a v3.3.0 il lavoro tipico è:

  1. Adattare il codice cpufreq a set_frequency() con intero in MHz e a get_current_frequencies() / get_supported_frequencies() (la rielaborazione di cpufreq).

  2. Passare mask a image.replace() come keyword (la modifica di replace).

  3. Allocare i frame buffer extra come GRAYSCALE / RGB565 invece di Bayer/JPEG (la modifica di alloc_extra_fb).

  4. Catturare ValueError intorno a sensor.set_framesize() invece di controllare False (la modifica di set_framesize).

Tutti gli altri script funzionano senza modifiche.