v2.8.0

La v2.8.0 è una release enorme. Mette in funzione l”OpenMV Cam H7 (STM32H7) con un encoder JPEG hardware e ADC/DAC dell’H7, una grande revisione dell’API image (spessore/riempimenti dei disegni, operazioni matematiche/binarie, molti nuovi filtri, sogliatura di Otsu), il threading di MicroPython e il modulo di versione omv. L’ordine di parsing degli argomenti Python è stato bloccato e image.mask_ellipse() è stata rimossa — leggi le modifiche incompatibili qui sotto.

In evidenza

  • OpenMV Cam H7 — nuova scheda STM32H7 con un encoder JPEG hardware e ADC / DAC dell’H7.

  • revisione di image — spessore delle linee, riempimenti delle forme, draw_arrow() / draw_image(), operazioni matematiche/binarie complete e molti nuovi filtri.

  • Sogliatura di Otsuhistogram.get_threshold() e un oggetto Threshold.

  • Threading — supporto a _thread di MicroPython.

  • modulo omv — informazioni su versione / scheda.

  • Incompatibilità: l’ordine degli argomenti posizionali Python ora è rigido e image.mask_ellipse() è stata rimossa — vedi le modifiche incompatibili.

Nuove funzionalità

  • OpenMV Cam H7 — supporto alla scheda STM32H7 con un encoder JPEG hardware, ADC dell’H7 e DAC dell’H7.

  • Disegno — aggiunti lo thickness delle linee, il fill delle forme (rettangolo / cerchio), lo scale / kerning del testo, un argomento mono_space su draw_string(), image.draw_arrow() e image.draw_image() (disegno di sprite / maschere).

  • Operazioni matematiche — aggiunte add(), sub(), mul(), div(), min(), max(), difference(), blend(), replace() (con hmirror / vflip / mask) e remove_shadows(); le operazioni di base ora accettano un valore scalare/colore applicato a tutti i pixel.

  • Binario / morfologia — un nuovo tipo di immagine binaria e binary(); le operazioni sulle linee ed erode() / dilate() accettano maschere; aggiunte open() / close() / top_hat() / black_hat().

  • Filtri — aggiunti cartoon, flood_fill, bilateral, laplacian, gli alias blur / gaussian_blur e l’equalizzazione adattiva dell’istogramma (histeq(adaptive=, clip_limit=, mask=)).

  • Statisticheget_statistics() / get_histogram() accettano una lista di soglie di colore e invert; aggiunte la histogram.get_threshold() di Otsu e un oggetto Threshold.

  • CMSIS CNN — aggiunta image.classify_object() con un esempio cnn.py (sostituita dal modulo nn nella v3.0.0).

  • Threading — abilitato il modulo _thread di MicroPython.

  • modulo omv — aggiunte le informazioni di versione (version_string, arch, board_type, board_id); abilitati il bus I2C4 di machine e le funzioni matematiche speciali (erf, gamma, …); aggiunti esempi di motor-shield e molti nuovi script di esempio.

Altre modifiche e miglioramenti

  • Il clock esterno del sensore dell’H7 è stato abbassato a 48 MHz (migliore qualità dell’immagine, FPS più bassi); la qualità JPEG bassa/alta ora è configurabile per scheda (e ottimizzata per l’H7); aggiunto il gating delle funzionalità tramite imlib_config.h per ogni scheda (tutte le funzioni immagine restano abilitate nel firmware stock); aggiornato il MicroPython incluso.

Correzioni di bug

Imaging:

  • Corretti image.save() senza estensione del file, la mappatura gain_db / gain_db_ceiling per OV2640 / OV7725 / OV9650 / MT9V034, il guadagno eccessivo in sharpen(), il rumore ai bordi morfologico, una divisione per zero in un’operazione su immagine e un crash da stack-smash su una dimensione del kernel del filtro troppo grande (ora un errore pulito).

Sistema:

  • Protetto il buffer USB VCP con una sezione atomica (corruzione seriale, #313), corretta la connettività USB su Windows, il montaggio del filesystem della flash interna se la scheda SD fallisce, il valore PLLP di set_frequency() di cpufreq e un bug di flashing del firmware nel bootloader.

Hardware e supporto schede

  • OpenMV Cam H7 (STM32H7) — nuova scheda con un encoder JPEG hardware e ADC / DAC dell’H7.

  • machine — abilitato il bus I2C4.

Modifiche incompatibili dell’API

Rotture dell’API visibili all’utente tra la v2.7.0 e la v2.8.0. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Entrambe le modifiche incompatibili sono minor e riguardano solo gli script che usavano la funzionalità interessata. Ogni hash di commit rimanda al suo diff su GitHub.

L’ordine degli argomenti posizionali Python ora è rigido (minor)

Il parsing degli argomenti nei moduli C Python (image / sensor / fir / gif / lcd / mjpeg) ora legge gli argomenti posizionali prima delle keyword e blocca l’ordine posizionale. In combinazione con i nuovi argomenti keyword sui metodi di disegno (draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() che hanno guadagnato thickness / fill / scale / size), il codice che passava i parametri fuori ordine in modo posizionale — o che passava un color posizionale dopo uno dei nuovi argomenti — deve usare argomenti keyword o l’ordine posizionale documentato.

Commit: e0e112468, fc74e70c3

image.mask_ellipse() rimossa (minor)

image.mask_ellipse() è stata rimossa. Gli script che la chiamavano devono eliminare la chiamata o usare una ROI / immagine maschera esplicita.

Commit: d7159fba3

Checklist di migrazione

Passa gli argomenti per keyword (o nell’ordine posizionale documentato), in particolare color sui metodi di disegno (la modifica dell’ordine degli argomenti), e rimuovi le chiamate a image.mask_ellipse() (la rimozione di mask_ellipse). Tutti gli altri script funzionano senza modifiche.