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 eimage.to_rainbow().Modulo
tv— uscita video composito / TV via SPI.Modalità triggered con global shutter — cattura triggered MT9V034 tramite
sensor.ioctl().Imaging —
gamma_corr(),draw_ellipse(),draw_edges(), alpha blending indraw_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 diimage.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()consensor.PALETTE_RAINBOW/PALETTE_IRONBOW,image.to_rainbow()e script di esempio Lepton (27-Lepton).Modalità triggered —
IOCTL_SET_TRIGGERED_MODE/IOCTL_GET_TRIGGERED_MODEper 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 indraw_image(), un keywordmask=suclear(), reintrodottimask_rectangle()/mask_circle()/mask_ellipse(), keyword di rotazione / hmirror / vflip sudraw_string()/draw_text(), un keywordtranspose(e gli aliasassign/set) sureplace(),x_scale/y_scalesucopy()piùcrop()/scale(), un costruttoreImage()a partire dalle dimensioni, il pixformatsensor.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 motoretb6612(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 diset_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 into_grayscale()/to_rgb565(), illen()dell’oggetto keypoint, la gestione dei confini delle MCU JPEG, il parsing della lista di soglie inbinary()e l’accettazione di tuple di keypoint da parte didraw_keypoints().
Sistema:
Corretti i leak da squilibrio mark/free di
fb_allocnei metodi diimage/fir/lcd/tv/nn, fatto in modo chepy_assertliberi 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 strumentocascade_convert.pysu 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 è:
Adattare il codice
cpufreqaset_frequency()con intero in MHz e aget_current_frequencies()/get_supported_frequencies()(la rielaborazione di cpufreq).Passare
maskaimage.replace()come keyword (la modifica di replace).Allocare i frame buffer extra come
GRAYSCALE/RGB565invece di Bayer/JPEG (la modifica di alloc_extra_fb).Catturare
ValueErrorintorno asensor.set_framesize()invece di controllareFalse(la modifica di set_framesize).
Tutti gli altri script funzionano senza modifiche.