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 disegno —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Operazioni binarie / morfologiche —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Keypoint — descrittori FAST / FREAK / LBP con
match_descriptor()/save_descriptor()/load_descriptor().Nuovi moduli —
lcd,mjpeg,gif(a colori) e il modulo termicomlx.Supporto per la camera OV7725;
image.statistics; I/O su file BMP/PPM/JPEG.Incompatibile: il comportamento di
sensor.reset(),sensor.snapshot()esensor.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()ewidth()/height()/format().Keypoint / descrittori — estrazione dei keypoint FAST tramite
find_keypoints(), unmatch_descriptor()unificato esave_descriptor()/load_descriptor()per FREAK / LBP, oltre a una cascata Haar/LBP per volti di profilo.Colore / statistiche —
image.statisticse 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),gifa colori (conGif.loop()) e il modulo per camera termicamlx, 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 framesizeHQVGAeimage.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 termicamlxe 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 è:
Imposta esplicitamente
sensor.set_pixformat()/sensor.set_framesize()doposensor.reset()(la modifica di reset).Racchiudi
sensor.snapshot()intry/except RuntimeErrorse devi tollerare i timeout del sensore (la modifica di snapshot).Cattura l’eccezione di
sensor.set_pixformat()invece di controllareFalse(la modifica di set_pixformat).
Tutti gli altri script funzionano invariati.