v2.1.0

v2.1.0 este o versiune masivă de modernizare a API-ului. Înlocuiește descriptorul de puncte-cheie FREAK cu ORB, reproiectează find_blobs() / histogramele / statisticile în API-uri bazate pe obiecte, redenumește funcțiile sensor de expunere/amplificare/balans de alb automate, adaugă detectarea codurilor QR și corecția lentilei pentru OV7725 și inițializează prima placă OpenMV Cam M7. Multe API-uri s-au schimbat — citiți modificările incompatibile de mai jos.

Aspecte importante

  • Puncte-cheie ORB — descriptorul FREAK a fost înlocuit cu ORB (find_keypoints() / match_descriptor() reproiectate).

  • API-uri de obiectefind_blobs(), get_histogram(), get_statistics() returnează acum obiecte cu accesori denumiți.

  • Coduri QR — s-a adăugat detectarea image.find_qrcodes().

  • OpenMV Cam M7 — suport inițial pentru placă.

  • Senzorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (redenumite) și set_lens_correction().

  • Incompatibil: API-urile pentru puncte-cheie/descriptor, blob/histogramă/statistici, funcțiile automate ale senzorului și alte câteva s-au schimbat — vedeți modificările incompatibile.

Funcții noi

  • OpenMV Cam M7 — s-a adăugat suport inițial pentru placa OpenMV 3 (M7).

  • Coduri QR — s-a adăugat image.find_qrcodes() cu un exemplu qrcodes.py.

  • Puncte-cheie ORB — sistem nou de descriptori ORB: find_keypoints() cu un argument corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() cu un cuvânt-cheie filter_outliers și o estimare a rotației; salvarea/încărcarea punctelor-cheie.

  • API-uri de obiecteimage.get_histogram() / get_statistics() / get_percentile() returnează obiecte de histogramă/statistici; find_blobs() returnează obiecte blob (rect() / cx() / cy() / code() / area() / pixels()) cu area_threshold / pixels_threshold / merge / margin / invert și x_stride / y_stride.

  • Senzor — s-a adăugat sensor.set_lens_correction(enable, radi, coef) pentru umbrirea lentilei OV7725, sensor.set_windowing() acceptă acum și un tuplu (w, h) (centrat automat) și image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • S-au adăugat scripturi exemplu de urmărire a culorilor, Arduino SPI/I2C-slave, puncte-cheie și histogramă/statistici.

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

  • IDE-ul poate acum întrerupe un main.py în execuție; find_blobs() / find_qrcodes() / get_statistics() mai rapide; ORB folosește o distanță Hamming bazată pe popcount; corecția lentilei folosește mai puțin RAM; o regulă Linux udev împiedică ModemManager să acapareze portul serial.

Remedieri de erori

Cameră și imagistică:

  • S-au remediat curățarea/invalidarea cache-ului DMA pe M7 (cadre corupte), o linie suplimentară parazită la sfârșitul fiecărui cadru, limitele de depășire ale tamponului de cadre (frame buffer) JPEG, eliberarea tamponului de cadre la eșecul compress(), acuratețea / ROI-ul / gestionarea setului gol a ORB și geometria load_image(copy_to_fb=True).

Sistem:

  • S-au remediat suportul ADC pe F7, un nume de registru OV7725, sincronizarea bootloader/USB, s-a folosit WFI în timpul așteptării instantaneelor și s-a făcut neblocant exemplul de streamer MJPEG cu timeout-uri per client.

Suport hardware și plăci

  • OpenMV Cam M7 (OpenMV 3) — suport inițial pentru placă.

  • OV7725 — suport pentru corecția lentilei (umbrire).

Modificări incompatibile de API

Întreruperi de API vizibile pentru utilizator între v2.0.0 și v2.1.0. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

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

  • minor — API restrâns; afectează doar scripturile care l-au folosit.

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

Modificările sunt grupate după 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 are legătură către diff-ul său pe GitHub.

FREAK înlocuit cu ORB; API-ul descriptorului reproiectat (major)

Descriptorul de puncte-cheie FREAK a fost eliminat și înlocuit cu ORB: image.FREAK nu mai există (folosiți image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() nu mai acceptă un argument inițial de tip descriptor (acesta este dedus din obiect), match_descriptor() returnează acum un tuplu cu 8 elemente (cx, cy, x, y, w, h, match_count, rotation) (ultimul element este un număr brut, nu un procent), iar draw_keypoints() necesită un obiect de puncte-cheie în loc de o listă brută (x, y, angle). find_keypoints() a câștigat corner_detector / max_keypoints / scale_factor cu valori implicite modificate.

Commit-uri: e2d0c4840, bba8e5a9e, 6000684cb

Redenumirea funcțiilor automate ale senzorului (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() au fost redenumite în sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (numele vechi au fost eliminate). Fiecare a câștigat un cuvânt-cheie opțional value= pentru a seta o valoare manuală în loc de automat.

Commit-uri: 1b22a2961

Histograma / statisticile reproiectate în API-uri de obiecte (major)

Suprafața de histogramă/statistici a fost reproiectată în image.get_histogram() / get_statistics() / get_percentile() bazate pe obiecte, returnând obiecte de histogramă/statistici. Vechile rezultate plate de histogramă/statistici și metodele bin_count / l_bin_count / a_bin_count / b_bin_count au fost eliminate (folosiți len(histogram.bins()) etc.).

Commit-uri: 011108412, 9f37c83de

find_features() scale redenumit (major)

image.find_features() (Haar) și-a redenumit cuvântul-cheie scale= în scale_factor=. Actualizați apelurile find_features(cascade, scale=...) la scale_factor=....

Commit-uri: 96e4f770c

find_blobs() returnează obiecte; find_markers() eliminat (minor)

image.find_blobs() returnează acum obiecte blob cu accesori denumiți (accesul prin index funcționează în continuare pentru compatibilitate retroactivă), iar image.find_markers() a fost eliminat — folosiți find_blobs(..., merge=True, margin=...) în schimb. Funcția avansată de retroapelare (callback) pentru filtrarea blob-urilor de culoare nu mai este acceptată.

Commit-uri: af15ec6eb

img.copy_to_fb() înlocuit (minor)

Metoda img.copy_to_fb() a fost înlocuită cu un cuvânt-cheie copy_to_fb= pe image.Image / load_image(). Folosiți image.Image(path, copy_to_fb=True) pentru a încărca imagini mari direct în tamponul de cadre (frame buffer).

Commit-uri: 1645ab94b

compress() respinge calitatea în afara intervalului (comportament)

image.compress() / compressed() generează acum o eroare când quality este în afara intervalului 1–100, în loc să limiteze silențios. Limitați quality în intervalul 1–100 înainte de apel. Separat, tamponul (buffer) JPEG al OpenMV 3 a fost redus de la 64 KB la 23000 de octeți, așa că acum cadrele mari pot genera eroare de memorie insuficientă — reduceți calitatea JPEG sau dimensiunea cadrului.

Commit-uri: 9efd7474a, 9a7c3defc

Zoom-ul lens_corr() este acum funcțional (comportament)

image.lens_corr() aplică acum efectiv argumentul zoom (anterior era analizat, dar ineficient), așa că ieșirea diferă pentru scripturile care au transmis un zoom non-implicit. Reverificați ajustarea lens_corr().

Commit-uri: d6b49adef

Listă de verificare pentru migrare

Pentru o portare curată la v2.1.0, lucrul tipic este:

  1. Înlocuiți image.FREAK cu image.ORB, renunțați la argumentul de tip descriptor și actualizați despachetarea tuplului match_descriptor() / draw_keypoints() la obiectul de puncte-cheie (reproiectarea ORB).

  2. Redenumiți sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() în formele set_auto_* (redenumirea funcțiilor automate).

  3. Mutați codul de histogramă/statistici la metodele de obiect (reproiectarea histogramei/statisticilor).

  4. Redenumiți find_features() scale= în scale_factor= (redenumirea find_features).

  5. Folosiți accesorii obiectelor blob și înlocuiți find_markers() cu find_blobs(merge=True, ...) (modificarea find_blobs); înlocuiți img.copy_to_fb() cu cuvântul-cheie copy_to_fb= (modificarea copy_to_fb).

  6. Limitați calitatea compress() la 1–100 și reverificați dimensiunile JPEG pe OpenMV 3 (modificarea compress); reajustați zoom-ul lens_corr() (modificarea lens_corr).

Toate celelalte scripturi rulează nemodificate.