v1.2.0#
v1.2.0 este o versiune fundamentală, foarte mare, care construiește cea mai mare parte a API-ului clasic de imagistică OpenMV: metodele de desenare, operațiile binare / de morfologie, descriptorii de puncte-cheie (FAST / FREAK / LBP), conversiile de culoare și image.statistics, intrările/ieșirile de fișiere BMP / PPM / JPEG, modulele lcd, mjpeg, gif și modulul termic mlx, camera OV7725 și numeroase controale sensor. Unele comportamente de bază ale sensor s-au schimbat — citiți modificările incompatibile de mai jos.
Aspecte importante#
API de desenare —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Binar / morfologie —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Puncte-cheie — descriptori FAST / FREAK / LBP cu
match_descriptor()/save_descriptor()/load_descriptor().Suport pentru camera OV7725;
image.statistics; intrări/ieșiri de fișiere BMP/PPM/JPEG.Incompatibil: comportamentul
sensor.reset(),sensor.snapshot()șisensor.set_pixformat()s-a schimbat — consultați modificările incompatibile.
Caracteristici noi#
Desenare — s-au adăugat
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()cu argumente de tip cuvânt-cheie (culoare, grosime, …).Binar / morfologie — s-au adăugat
image.binary(),invert(),and()/nand()/or()/nor()/xor()/xnor(),erode()/dilate()/morph(),negate()/difference(),pixels(),centroid(),orientation_radians()/orientation_degrees()șiwidth()/height()/format().Puncte-cheie / descriptori — extragere de puncte-cheie FAST prin
find_keypoints(), unmatch_descriptor()unificat șisave_descriptor()/load_descriptor()pentru FREAK / LBP, plus o cascadă Haar/LBP pentru fețe din profil.Culoare / statistici —
image.statisticsși funcții de conversie a culorilor (rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb).Intrări/ieșiri de fișiere — încărcare și salvare BMP / PPM (P2/P3/P5/P6) / JPEG (inclusiv JPEG în tonuri de gri și subeșantionare cromatică 4:2:0 / 4:2:2).
Module — noul modul
lcd(shield LCD),mjpeg(înregistrare video),gifcolor (cuGif.loop()) și modulele de cameră termicămlx, fiecare cu scripturi de exemplu.Senzor — s-au adăugat
sensor.get_id()(+ constantele PID OV9650/OV2640/OV7725),sensor.set_special_effect()(constantele SDE_*),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), dimensiunea de cadruHQVGAșiimage.set_pixel(x, y, …).WiFi — s-a adăugat driverul WiFi ATWINC1500 și bazele BSP pentru OpenMV 1/2, plus un exemplu BLE.
Alte modificări și îmbunătățiri#
Tamponul de cadre (frame buffer) este acum comprimat JPEG înainte de transmiterea către OpenMV IDE (lățime de bandă mai mică); compresia JPEG se face pe loc; zoom-ul H/V al OV7725 permite scalare arbitrară; detectare îmbunătățită (mai rapidă) a fețelor Haar care rulează la QVGA.
Corectări de erori#
Imagistică:
S-au corectat calculul imaginii integrale, coruperea filtrului
median(), calculul centroidului, filtrele RGB de piele / alb-negru pe intrare RGB și citirea/scrierea mai rapidă a BMP/PPM în tonuri de gri.
Senzor și sistem:
S-au corectat temporizatoarele
pyb.Servo(Servo funcționează acum), rezoluția HQVGA, fiabilitatea inițializării cardului SD, reinițializarea stocării după o resetare software și relansarea REPL atunci când nu există niciun script.
Suport hardware și plăci#
Senzorul de cameră OV7725.
Shield LCD (modulul
lcd), camera termicămlxși bazele WiFi ATWINC1500.
Modificări incompatibile ale API-ului#
Modificări ale API-ului vizibile pentru utilizatori între v1.1.0 și v1.2.0. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.
Toate cele trei modificări incompatibile sunt modificări de comportament ale funcțiilor de bază sensor (același API, comportament diferit) — reverificați scripturile afectate. Fiecare hash de commit trimite către diff-ul său pe GitHub. (Marea majoritate a acestei versiuni constă în API nou construit în intervalul v1.1→v1.2 și este, prin urmare, aditivă, nu incompatibilă.)
sensor.reset() nu mai aplică o configurație implicită (comportament)#
sensor.reset() nu mai aplică o configurație implicită încorporată (pixformat / framesize / framerate / gain / contrast / brightness / saturation). Scripturile care se bazau pe reset() pentru a lăsa o valoare implicită utilizabilă trebuie acum să apeleze explicit sensor.set_pixformat() și sensor.set_framesize() (și orice alte setări) după reset().
Commit-uri: d1e782df3
sensor.snapshot() ridică o excepție la expirarea timpului (comportament)#
sensor.snapshot() ridică acum RuntimeError("Sensor Timeout!!") atunci când senzorul depășește timpul de așteptare, în loc să se blocheze la nesfârșit. Înfășurați snapshot() într-un try / except RuntimeError dacă trebuie să tolerați expirările de timp.
Commit-uri: e3f41d674
sensor.set_pixformat() ridică o excepție pentru un format neacceptat (comportament)#
sensor.set_pixformat() ridică acum o excepție atunci când i se dă un format de pixel neacceptat, în loc să returneze False. Codul care verifica valoarea returnată False trebuie acum să prindă excepția în schimb.
Commit-uri: e0c5822c2
Listă de verificare pentru migrare#
Pentru o portare curată la v1.2.0, lucrul obișnuit este:
Setați explicit
sensor.set_pixformat()/sensor.set_framesize()dupăsensor.reset()(modificarea reset).Înfășurați
sensor.snapshot()într-untry/except RuntimeErrordacă trebuie să tolerați expirările de timp ale senzorului (modificarea snapshot).Prindeți excepția de la
sensor.set_pixformat()în loc să verificați pentruFalse(modificarea set_pixformat).
Toate celelalte scripturi rulează nemodificate.