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á APIfind_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.

  • Senzorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (přejmenovány) a set_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říkladem qrcodes.py.

  • ORB klíčové body — nový systém deskriptorů ORB: find_keypoints() s argumentem corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() s klíčovým slovem filter_outliers a odhadem rotace; ukládání/načítání klíčových bodů.

  • Objektová APIimage.get_histogram() / get_statistics() / get_percentile() vracejí objekty histogramu/statistik; find_blobs() vrací blob objekty (rect() / cx() / cy() / code() / area() / pixels()) s area_threshold / pixels_threshold / merge / margin / invert a x_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) a image.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; pravidlo udev v 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 geometrie load_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.

Commity: e2d0c4840, bba8e5a9e, 6000684cb

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.).

Commity: 011108412, 9f37c83de

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.

Commity: 9efd7474a, 9a7c3defc

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í:

  1. Nahraďte image.FREAK za image.ORB, odeberte argument typu deskriptoru a aktualizujte rozbalení n-tice match_descriptor() / draw_keypoints() na objekt klíčových bodů (přepracování ORB).

  2. Přejmenujte sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() na formy set_auto_* (přejmenování automatických funkcí).

  3. Přesuňte kód histogramu/statistik na objektové metody (přepracování histogramu/statistik).

  4. Přejmenujte scale= u find_features() na scale_factor= (přejmenování find_features).

  5. Použijte přístupové metody blob objektů a nahraďte find_markers() za find_blobs(merge=True, ...) (změna find_blobs); nahraďte img.copy_to_fb() klíčovým slovem copy_to_fb= (změna copy_to_fb).

  6. Ořežte kvalitu compress() na 1–100 a znovu zkontrolujte velikosti JPEG na OpenMV 3 (změna compress); znovu doladte zoom u lens_corr() (změna lens_corr).

Všechny ostatní skripty běží beze změny.