v2.1.0¶
v2.1.0 je rozsáhlé vydání modernizující API. Nahrazuje deskriptor klíčových bodů FREAK deskriptorem ORB, přepracovává find_blobs() / histogramy / statistiky do objektových API, přejmenovává funkce automatické expozice/zisku/vyvážení bílé modulu sensor, přidává detekci QR kódů a korekci objektivu OV7725 a zprovozňuje první desku OpenMV Cam M7. Mnoho API se změnilo — přečtěte si nekompatibilní změny níže.
Hlavní novinky¶
ORB klíčové body — deskriptor FREAK byl nahrazen deskriptorem ORB (
find_keypoints()/match_descriptor()přepracovány).Objektová API —
find_blobs(),get_histogram(),get_statistics()nyní vracejí objekty s pojmenovanými přístupovými metodami.QR kódy — přidána detekce
image.find_qrcodes().OpenMV Cam M7 — první podpora desky.
Senzor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(přejmenovány) aset_lens_correction().Nekompatibilní: změnila se API klíčových bodů/deskriptorů, blobů/histogramů/statistik, automatických funkcí senzoru a několik dalších — viz nekompatibilní změny.
Nové funkce¶
OpenMV Cam M7 — přidána první podpora desky OpenMV 3 (M7).
QR kódy — přidáno
image.find_qrcodes()s příklademqrcodes.py.ORB klíčové body — nový systém deskriptorů ORB:
find_keypoints()s argumentemcorner_detector(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()s klíčovým slovemfilter_outliersa odhadem rotace; ukládání/načítání klíčových bodů.Objektová API —
image.get_histogram()/get_statistics()/get_percentile()vracejí objekty histogramu/statistik;find_blobs()vrací blob objekty (rect()/cx()/cy()/code()/area()/pixels()) sarea_threshold/pixels_threshold/merge/margin/invertax_stride/y_stride.Senzor — přidáno
sensor.set_lens_correction(enable, radi, coef)pro stínování objektivu OV7725,sensor.set_windowing()nyní přijímá i n-tici(w, h)(automaticky vystředěno) aimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).Přidány příklady skriptů pro sledování barev, Arduino SPI/I2C-slave, klíčové body a histogram/statistiky.
Další změny a vylepšení¶
IDE nyní dokáže přerušit běžící
main.py; rychlejšífind_blobs()/find_qrcodes()/get_statistics(); ORB používá Hammingovu vzdálenost pomocí popcount; korekce objektivu používá méně RAM; pravidloudevv Linuxu zabrání ModemManageru obsadit sériový port.
Opravy chyb¶
Kamera a snímání:
Opraveno čištění/invalidace cache M7 DMA (poškozené snímky), falešná řádka navíc na konci každého snímku, meze přetečení framebufferu JPEG, uvolnění framebufferu při selhání
compress(), přesnost ORB / ROI / zpracování prázdné sady a geometrieload_image(copy_to_fb=True).
Systém:
Opravena podpora F7 ADC, název registru OV7725, časování bootloaderu/USB, použito WFI při čekání na snímky a příklad MJPEG streameru učiněn neblokujícím s timeouty na klienta.
Hardware a podpora desek¶
OpenMV Cam M7 (OpenMV 3) — první podpora desky.
OV7725 — podpora korekce objektivu (stínování).
Nekompatibilní změny API¶
Uživatelsky viditelné nekompatibility API mezi v2.0.0 a v2.1.0. Rozsah: Python C-moduly v modules/ a Python knihovny v scripts/libraries/.
Každá změna je označena svým dopadem:
major — ovlivňuje většinu skriptů, které funkci používaly; budete muset přenést kód.
minor — úzké API; ovlivňuje pouze skripty, které jej používaly.
behavior — stejné API, jiné výsledky; znovu zkontrolujte doladěné skripty.
Změny jsou v tomto pořadí seskupeny podle dopadu. Pokud chcete jen přenést svůj kód, přejděte na kontrolní seznam migrace na konci. Každý hash commitu odkazuje na svůj diff na GitHubu.
FREAK nahrazen ORB; API deskriptorů přepracováno (major)¶
Deskriptor klíčových bodů FREAK byl odstraněn a nahrazen deskriptorem ORB: image.FREAK již neexistuje (použijte image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() již nepřijímají úvodní argument typu deskriptoru (odvozuje se z objektu), match_descriptor() nyní vrací osmiprvkovou n-tici (cx, cy, x, y, w, h, match_count, rotation) (poslední prvek je surový počet, nikoli procento) a draw_keypoints() vyžaduje objekt klíčových bodů místo surového seznamu (x, y, angle). find_keypoints() získala corner_detector / max_keypoints / scale_factor se změněnými výchozími hodnotami.
Přejmenování automatických funkcí senzoru (major)¶
sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() byly přejmenovány na sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (staré názvy byly odstraněny). Každá získala volitelné klíčové slovo value= pro nastavení manuální hodnoty místo automatiky.
Commity: 1b22a2961
Histogram / statistiky přepracovány na objektová API (major)¶
Rozhraní histogramu/statistik bylo přepracováno na objektové image.get_histogram() / get_statistics() / get_percentile() vracející objekty histogramu/statistik. Staré ploché výsledky histogramu/statistik a metody bin_count / l_bin_count / a_bin_count / b_bin_count byly odstraněny (použijte len(histogram.bins()) apod.).
scale u find_features() přejmenováno (major)¶
image.find_features() (Haar) přejmenovala své klíčové slovo scale= na scale_factor=. Aktualizujte volání find_features(cascade, scale=...) na scale_factor=....
Commity: 96e4f770c
find_blobs() vrací objekty; find_markers() odstraněno (minor)¶
image.find_blobs() nyní vrací blob objekty s pojmenovanými přístupovými metodami (přístup přes index stále funguje kvůli zpětné kompatibilitě) a image.find_markers() bylo odstraněno — místo toho použijte find_blobs(..., merge=True, margin=...). Pokročilý callback pro filtrování barevných blobů již není podporován.
Commity: af15ec6eb
img.copy_to_fb() nahrazeno (minor)¶
Metoda img.copy_to_fb() byla nahrazena klíčovým slovem copy_to_fb= u image.Image / load_image(). Použijte image.Image(path, copy_to_fb=True) k načtení velkých obrazů přímo do framebufferu.
Commity: 1645ab94b
compress() odmítá kvalitu mimo rozsah (behavior)¶
image.compress() / compressed() nyní vyvolávají chybu, když je quality mimo rozsah 1–100, namísto tichého oříznutí. Před voláním ořežte quality do rozsahu 1–100. Samostatně byl buffer JPEG na OpenMV 3 zmenšen z 64 KB na 23000 bajtů, takže velké snímky nyní mohou vyvolat chybu nedostatku paměti — snižte kvalitu nebo velikost JPEG snímku.
Zoom u lens_corr() je nyní funkční (behavior)¶
image.lens_corr() nyní svůj argument zoom skutečně aplikuje (dříve byl parsován, ale neúčinný), takže výstup se liší pro skripty, které předaly nevýchozí zoom. Znovu zkontrolujte ladění lens_corr().
Commity: d6b49adef
Kontrolní seznam migrace¶
Pro čistý přenos na v2.1.0 je typická práce následující:
Nahraďte
image.FREAKzaimage.ORB, odeberte argument typu deskriptoru a aktualizujte rozbalení n-ticematch_descriptor()/draw_keypoints()na objekt klíčových bodů (přepracování ORB).Přejmenujte
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()na formyset_auto_*(přejmenování automatických funkcí).Přesuňte kód histogramu/statistik na objektové metody (přepracování histogramu/statistik).
Přejmenujte
scale=ufind_features()nascale_factor=(přejmenování find_features).Použijte přístupové metody blob objektů a nahraďte
find_markers()zafind_blobs(merge=True, ...)(změna find_blobs); nahraďteimg.copy_to_fb()klíčovým slovemcopy_to_fb=(změna copy_to_fb).Ořežte kvalitu
compress()na 1–100 a znovu zkontrolujte velikosti JPEG na OpenMV 3 (změna compress); znovu doladte zoom ulens_corr()(změna lens_corr).
Všechny ostatní skripty běží beze změny.