v2.4.0

v2.4.0 rescrie find_lines() ca detector bazat pe transformata Hough, adaugă find_line_segments(), decodarea matricelor de date find_datamatrices(), sensor.set_vsync_output(), citirea/scrierea pe felii de imagine și numeroase dimensiuni de cadre scalate noi pentru FPS mai mare. find_lines(), match_descriptor() și skip_frames() s-au modificat — citiți modificările incompatibile de mai jos.

Aspecte importante

  • find_lines() — rescris ca detector de linii bazat pe transformata Hough, returnând obiecte linie (funcționează acum pe RGB565, nu doar pe tonuri de gri).

  • find_line_segments() — detectează segmente de linie finite.

  • find_datamatrices() — decodarea matricelor de date.

  • sensor.set_vsync_output() — emite VSYNC pe un pin de I/O pentru sincronizarea camerei.

  • Mai multe dimensiuni de cadru — numeroase rezoluții scalate suplimentare pentru FPS mai mare.

  • Incompatibil: find_lines(), match_descriptor() și skip_frames() s-au modificat — consultați modificările incompatibile.

Funcții noi

  • image.find_line_segments() — găsește segmente de linie non-infinite; obiectele linie au primit un accesor .length().

  • image.find_datamatrices() — decodarea matricelor de date, cu scripturi exemplu.

  • sensor.set_vsync_output(pin) — emite semnalul VSYNC pe un pin GPIO pentru sincronizarea camerei (OpenMV 2 / OpenMV 3).

  • Felii de imagine — protocolul de indexare / tampon al imaginii suportă acum citirea și scrierea de felii din datele imaginii.

  • Adăugate numeroase combinații suplimentare de rezoluție / dimensiune de cadru scalate pentru a suporta rate de cadre mai mari; clock.fps() își resetează acum acumulatorii la fiecare 2 s, astfel încât FPS-ul raportat urmărește rata recentă.

Alte modificări și îmbunătățiri

  • OV7725 este restrâns la QVGA când rezoluția este ≤ VGA (mai puține cadre pierdute la rate mari de captură), iar PLL-ul său a fost setat la 6× cu un ceas extern redus (OpenMV 2 48 MHz, OpenMV 3 54 MHz), modificând temporizarea cadrelor senzorului.

Corecții de erori

Imagistică:

  • Corectată eroarea de dimensiune a tamponului din compress_for_ide() (marcaj de început/sfârșit), decodarea QR (plus corecții upstream în quirc pentru indexarea bitmap-ului celulei și limitele modelului de aliniere).

Senzor și conectivitate:

  • Coborât ceasul senzorului OpenMV 2 pentru a funcționa cu PLL-ul mai mare al senzorului (init/sincronizare cameră) și făcut ca WINC socket.recvfrom() să returneze dimensiunea efectiv recepționată (generând o eroare la o dimensiune nepozitivă în loc să returneze o valoare învechită).

Suport hardware și pentru plăci

  • Ieșire VSYNC pe un pin GPIO (OpenMV 2 / OpenMV 3) care susține sensor.set_vsync_output().

  • OpenMV 3 — activat UART1 pyb.UART.

Modificări incompatibile de API

Modificări incompatibile de API vizibile pentru utilizator între v2.3.0 și v2.4.0. Domeniu: modulele C Python din modules/ și bibliotecile Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

  • major — afectează majoritatea scripturilor care foloseau funcția; va trebui să portați codul.

  • minor — API restrâns; afectează doar scripturile care îl foloseau.

  • comportament — același API, rezultate diferite; reverificați scripturile ajustate.

Modificările sunt grupate pe impact, în această ordine. Dacă doriți doar să vă portați codul, săriți la lista de verificare pentru migrare de la final. Fiecare hash de commit duce la diff-ul său pe GitHub.

find_lines() rescris ca detector Hough (major)

image.find_lines() a fost rescris ca detector bazat pe transformata Hough. Nu mai returnează o listă de tupluri (x1, y1, x2, y2) — returnează obiecte linie (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — și funcționează acum și pe RGB565 (nu doar pe tonuri de gri). Argumentul threshold s-a schimbat de la un număr float de 0.0–1.0 la o sumă întreagă a magnitudinii muchiilor, line.magnitude este acum un întreg, iar au fost adăugate noile cuvinte-cheie theta_margin / rho_margin. Portați codul care despacheta tupluri la obiectele linie și reajustați threshold.

Commit-uri: 31b7b5bf3, f4a9c6154

match_descriptor() returnează un obiect de potrivire (minor)

image.match_descriptor() (ORB) returnează acum un obiect kptmatch cu accesorii .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() în loc de un tuplu simplu de 8 elemente. Obiectul este în continuare indexabil/feliabil, deci indexarea pozițională continuă să funcționeze, dar codul care folosea isinstance(result, tuple) (sau metode de tuplu) trebuie să folosească noii accesori.

Commit-uri: e960546b6

sensor.skip_frames() este acum bazat pe timp (comportament)

sensor.skip_frames() a fost refăcut pentru a accepta un cuvânt-cheie time= (implicit ~300 ms) și este acum implicit bazat pe timp, în loc să ruleze un număr fix de cadre, oprindu-se mai devreme odată ce timpul se scurge. Scripturile care se bazau pe un număr exact de cadre ar trebui să transmită un număr explicit și/sau să seteze time= corespunzător.

Commit-uri: a039b5d1c

Lista de verificare pentru migrare

Pentru o portare curată la v2.4.0, munca tipică este:

  1. Portați despachetarea tuplurilor din find_lines() la obiectele linie și reajustați threshold întreg (rescrierea find_lines).

  2. Folosiți accesorii kptmatch în loc să tratați rezultatele match_descriptor() ca pe un tuplu (modificarea match_descriptor).

  3. Transmiteți un număr explicit și/sau time= către sensor.skip_frames() dacă vă bazați pe un număr fix de cadre (modificarea skip_frames).

Toate celelalte scripturi rulează nemodificate.