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 desenaredraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Binar / morfologiebinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Puncte-cheie — descriptori FAST / FREAK / LBP cu match_descriptor() / save_descriptor() / load_descriptor().

  • Module noilcd, mjpeg, gif (color) și modulul termic mlx.

  • Suport pentru camera OV7725; image.statistics; intrări/ieșiri de fișiere BMP/PPM/JPEG.

  • Incompatibil: comportamentul sensor.reset(), sensor.snapshot() și sensor.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() și width() / height() / format().

  • Puncte-cheie / descriptori — extragere de puncte-cheie FAST prin find_keypoints(), un match_descriptor() unificat și save_descriptor() / load_descriptor() pentru FREAK / LBP, plus o cascadă Haar/LBP pentru fețe din profil.

  • Culoare / statisticiimage.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), gif color (cu Gif.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 cadru HQVGA și image.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:

  1. Setați explicit sensor.set_pixformat() / sensor.set_framesize() după sensor.reset() (modificarea reset).

  2. Înfășurați sensor.snapshot() într-un try / except RuntimeError dacă trebuie să tolerați expirările de timp ale senzorului (modificarea snapshot).

  3. Prindeți excepția de la sensor.set_pixformat() în loc să verificați pentru False (modificarea set_pixformat).

Toate celelalte scripturi rulează nemodificate.