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 obiecte —
find_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ă.
Senzor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(redenumite) șiset_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 exempluqrcodes.py.Puncte-cheie ORB — sistem nou de descriptori ORB:
find_keypoints()cu un argumentcorner_detector(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()cu un cuvânt-cheiefilter_outliersși o estimare a rotației; salvarea/încărcarea punctelor-cheie.API-uri de obiecte —
image.get_histogram()/get_statistics()/get_percentile()returnează obiecte de histogramă/statistici;find_blobs()returnează obiecte blob (rect()/cx()/cy()/code()/area()/pixels()) cuarea_threshold/pixels_threshold/merge/margin/invertșix_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) șiimage.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ă Linuxudevî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 geometriaload_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.
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.).
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.
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:
Înlocuiți
image.FREAKcuimage.ORB, renunțați la argumentul de tip descriptor și actualizați despachetarea tupluluimatch_descriptor()/draw_keypoints()la obiectul de puncte-cheie (reproiectarea ORB).Redenumiți
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()în formeleset_auto_*(redenumirea funcțiilor automate).Mutați codul de histogramă/statistici la metodele de obiect (reproiectarea histogramei/statisticilor).
Redenumiți
find_features()scale=înscale_factor=(redenumirea find_features).Folosiți accesorii obiectelor blob și înlocuiți
find_markers()cufind_blobs(merge=True, ...)(modificarea find_blobs); înlocuițiimg.copy_to_fb()cu cuvântul-cheiecopy_to_fb=(modificarea copy_to_fb).Limitați calitatea
compress()la 1–100 și reverificați dimensiunile JPEG pe OpenMV 3 (modificarea compress); reajustați zoom-ullens_corr()(modificarea lens_corr).
Toate celelalte scripturi rulează nemodificate.