v1.2.0

v1.2.0 è una release fondamentale e molto ampia che sviluppa gran parte della classica API di imaging di OpenMV: i metodi di disegno, le operazioni binarie / morfologiche, i descrittori di keypoint (FAST / FREAK / LBP), le conversioni di colore e image.statistics, l’I/O su file BMP / PPM / JPEG, i moduli lcd, mjpeg, gif e il modulo termico mlx, la camera OV7725 e molti controlli sensor. Alcuni comportamenti fondamentali di sensor sono cambiati — leggi le modifiche incompatibili più sotto.

In evidenza

  • API di disegnodraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Operazioni binarie / morfologichebinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Keypoint — descrittori FAST / FREAK / LBP con match_descriptor() / save_descriptor() / load_descriptor().

  • Nuovi modulilcd, mjpeg, gif (a colori) e il modulo termico mlx.

  • Supporto per la camera OV7725; image.statistics; I/O su file BMP/PPM/JPEG.

  • Incompatibile: il comportamento di sensor.reset(), sensor.snapshot() e sensor.set_pixformat() è cambiato — vedi le modifiche incompatibili.

Nuove funzionalità

  • Disegno — aggiunti image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() con argomenti keyword (colore, spessore, …).

  • Operazioni binarie / morfologiche — aggiunti image.binary(), invert(), and() / nand() / or() / nor() / xor() / xnor(), erode() / dilate() / morph(), negate() / difference(), pixels(), centroid(), orientation_radians() / orientation_degrees() e width() / height() / format().

  • Keypoint / descrittori — estrazione dei keypoint FAST tramite find_keypoints(), un match_descriptor() unificato e save_descriptor() / load_descriptor() per FREAK / LBP, oltre a una cascata Haar/LBP per volti di profilo.

  • Colore / statisticheimage.statistics e funzioni di conversione del colore (rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb).

  • I/O su file — caricamento e salvataggio BMP / PPM (P2/P3/P5/P6) / JPEG (incluso il JPEG in scala di grigi e il sottocampionamento della crominanza 4:2:0 / 4:2:2).

  • Moduli — i nuovi moduli lcd (shield LCD), mjpeg (registrazione video), gif a colori (con Gif.loop()) e il modulo per camera termica mlx, ciascuno con script di esempio.

  • Sensore — aggiunti sensor.get_id() (+ costanti PID OV9650/OV2640/OV7725), sensor.set_special_effect() (costanti SDE_*), sensor.set_image_filter() (FILTER_BW / FILTER_SKIN), la framesize HQVGA e image.set_pixel(x, y, …).

  • WiFi — aggiunti il driver WiFi ATWINC1500 e le basi del BSP per OpenMV 1/2, oltre a un esempio BLE.

Altre modifiche e miglioramenti

  • Il framebuffer viene ora compresso in JPEG prima dello streaming verso OpenMV IDE (banda inferiore); la compressione JPEG viene eseguita in place; lo zoom H/V dell’OV7725 abilita scalature arbitrarie; rilevamento dei volti Haar migliorato (più veloce) che gira a QVGA.

Correzioni di bug

Imaging:

  • Corretti il calcolo dell’immagine integrale, la corruzione del filtro median(), il calcolo del centroide, i filtri RGB skin / bianco-e-nero su input RGB e la lettura/scrittura più veloce di BMP/PPM in scala di grigi.

Sensore e sistema:

  • Corretti i timer di pyb.Servo (Servo ora funziona), la risoluzione HQVGA, l’affidabilità dell’inizializzazione della scheda SD, la re-inizializzazione dello storage dopo un soft-reset e la riesecuzione della REPL quando non è presente alcuno script.

Hardware e supporto schede

  • Sensore camera OV7725.

  • Shield LCD (modulo lcd), camera termica mlx e basi WiFi ATWINC1500.

Modifiche API incompatibili

Rotture dell’API visibili all’utente tra v1.1.0 e v1.2.0. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Tutte e tre le modifiche incompatibili sono cambiamenti di comportamento nelle funzioni core di sensor (stessa API, comportamento diverso) — ricontrolla gli script interessati. Ogni hash di commit rimanda al relativo diff su GitHub. (La stragrande maggioranza di questa release è nuova API sviluppata nell’intervallo v1.1→v1.2 ed è quindi additiva, non incompatibile.)

sensor.reset() non applica più una configurazione di default (comportamento)

sensor.reset() non applica più una configurazione di default integrata (pixformat / framesize / framerate / guadagno / contrasto / luminosità / saturazione). Gli script che facevano affidamento sul fatto che reset() lasciasse un default utilizzabile devono ora chiamare esplicitamente sensor.set_pixformat() e sensor.set_framesize() (e qualsiasi altra impostazione) dopo reset().

Commit: d1e782df3

sensor.snapshot() solleva un’eccezione in caso di timeout (comportamento)

sensor.snapshot() ora solleva RuntimeError("Sensor Timeout!!") quando il sensore va in timeout invece di bloccarsi indefinitamente. Racchiudi snapshot() in try / except RuntimeError se devi tollerare i timeout.

Commit: e3f41d674

sensor.set_pixformat() solleva un’eccezione per formati non supportati (comportamento)

sensor.set_pixformat() ora solleva un’eccezione quando riceve un formato di pixel non supportato invece di restituire False. Il codice che controllava il valore di ritorno False deve ora catturare l’eccezione.

Commit: e0c5822c2

Checklist di migrazione

Per un porting pulito alla v1.2.0 il lavoro tipico è:

  1. Imposta esplicitamente sensor.set_pixformat() / sensor.set_framesize() dopo sensor.reset() (la modifica di reset).

  2. Racchiudi sensor.snapshot() in try / except RuntimeError se devi tollerare i timeout del sensore (la modifica di snapshot).

  3. Cattura l’eccezione di sensor.set_pixformat() invece di controllare False (la modifica di set_pixformat).

Tutti gli altri script funzionano invariati.