v2.1.0

v2.1.0 je veliko izdanje modernizacije API-ja. Zamjenjuje FREAK deskriptor ključnih točaka s ORB, preuređuje find_blobs() / histograme / statistiku u API-je temeljene na objektima, preimenuje funkcije sensor za automatsku ekspoziciju/pojačanje/balans bijele, dodaje detekciju QR-kodova i korekciju leće za OV7725 te uvodi početnu podršku za ploču OpenMV Cam M7. Mnogi API-ji su se promijenili — pročitajte promjene koje narušavaju kompatibilnost u nastavku.

Istaknuto

  • ORB ključne točke — FREAK deskriptor zamijenjen je s ORB (find_keypoints() / match_descriptor() preuređeni).

  • Objektni API-jifind_blobs(), get_histogram(), get_statistics() sada vraćaju objekte s imenovanim pristupnicima.

  • QR kodovi — dodana detekcija image.find_qrcodes().

  • OpenMV Cam M7 — početna podrška za ploču.

  • Senzorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (preimenovani) i set_lens_correction().

  • Narušava kompatibilnost: API-ji za ključne točke/deskriptore, mrlje/histograme/statistiku, automatske funkcije senzora i nekoliko drugih su se promijenili — pogledajte promjene koje narušavaju kompatibilnost.

Nove značajke

  • OpenMV Cam M7 — dodana početna podrška za OpenMV 3 (M7) ploču.

  • QR kodovi — dodan image.find_qrcodes() s primjerom qrcodes.py.

  • ORB ključne točke — novi ORB sustav deskriptora: find_keypoints() s argumentom corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() s imenovanim argumentom filter_outliers i procjenom rotacije; spremanje/učitavanje ključnih točaka.

  • Objektni API-jiimage.get_histogram() / get_statistics() / get_percentile() vraćaju objekte histograma/statistike; find_blobs() vraća objekte mrlja (rect() / cx() / cy() / code() / area() / pixels()) s area_threshold / pixels_threshold / merge / margin / invert te x_stride / y_stride.

  • Senzor — dodan sensor.set_lens_correction(enable, radi, coef) za sjenčanje leće OV7725, sensor.set_windowing() sada prihvaća i (w, h) tuple (automatski centriran) te image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Dodane primjer skripte za praćenje boja, Arduino SPI/I2C-slave, ključne točke te histogram/statistiku.

Ostale promjene i poboljšanja

  • IDE sada može prekinuti pokrenuti main.py; brži find_blobs() / find_qrcodes() / get_statistics(); ORB koristi popcount Hammingovu udaljenost; korekcija leće koristi manje RAM-a; Linux udev pravilo sprječava ModemManager da preuzme serijski priključak.

Ispravci grešaka

Kamera i obrada slike:

  • Ispravljen M7 DMA cache clean/invalidate (oštećene sličice), suvišna dodatna linija na kraju svake sličice, granice prelijevanja JPEG međuspremnika slike, oslobađanje međuspremnika slike pri neuspjehu compress(), točnost ORB-a / ROI / rukovanje praznim skupom te geometrija load_image(copy_to_fb=True).

Sustav:

  • Ispravljena F7 ADC podrška, naziv OV7725 registra, tajming pokretača/USB-a, korišten WFI tijekom čekanja na snimke te primjer MJPEG strujanja učinjen neblokirajućim s vremenskim ograničenjima po klijentu.

Podrška za hardver i ploče

  • OpenMV Cam M7 (OpenMV 3) — početna podrška za ploču.

  • OV7725 — podrška za korekciju leće (sjenčanje).

Promjene API-ja koje narušavaju kompatibilnost

Korisniku vidljive promjene API-ja koje narušavaju kompatibilnost između v2.0.0 i v2.1.0. Opseg: Python C-moduli u modules/ i Python biblioteke u scripts/libraries/.

Svaka promjena označena je svojim utjecajem:

  • major — utječe na većinu skripti koje su koristile značajku; trebat ćete prenijeti kod.

  • minor — uski API; utječe samo na skripte koje su ga koristile.

  • behavior — isti API, drugačiji rezultati; ponovno provjerite podešene skripte.

Promjene su grupirane prema utjecaju tim redoslijedom. Ako samo želite prenijeti svoj kod, prijeđite na popis za migraciju na kraju. Svaki hash commita vodi na njegov diff na GitHubu.

FREAK zamijenjen s ORB; API deskriptora preuređen (major)

FREAK deskriptor ključnih točaka je uklonjen i zamijenjen s ORB: image.FREAK više ne postoji (koristite image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() više ne primaju vodeći argument tipa deskriptora (zaključuje se iz objekta), match_descriptor() sada vraća tuple s 8 elemenata (cx, cy, x, y, w, h, match_count, rotation) (zadnji element je sirovi broj, ne postotak), a draw_keypoints() zahtijeva objekt ključnih točaka umjesto sirove (x, y, angle) liste. find_keypoints() je dobio corner_detector / max_keypoints / scale_factor s promijenjenim zadanim vrijednostima.

Commiti: e2d0c4840, bba8e5a9e, 6000684cb

Preimenovanje automatskih funkcija senzora (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() preimenovani su u sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (stari nazivi su uklonjeni). Svaki je dobio opcionalni imenovani argument value= za postavljanje ručne vrijednosti umjesto automatske.

Commiti: 1b22a2961

Histogram / statistika preuređeni u objektne API-je (major)

Sučelje histograma/statistike preuređeno je u objektne image.get_histogram() / get_statistics() / get_percentile() koji vraćaju objekte histograma/statistike. Stari ravni rezultati histograma/statistike te metode bin_count / l_bin_count / a_bin_count / b_bin_count su uklonjene (koristite len(histogram.bins()) itd.).

Commiti: 011108412, 9f37c83de

find_features() scale preimenovan (major)

image.find_features() (Haar) preimenovao je svoj imenovani argument scale= u scale_factor=. Ažurirajte find_features(cascade, scale=...) pozive u scale_factor=....

Commiti: 96e4f770c

find_blobs() vraća objekte; find_markers() uklonjen (minor)

image.find_blobs() sada vraća objekte mrlja s imenovanim pristupnicima (pristup po indeksu i dalje radi radi unatražne kompatibilnosti), a image.find_markers() je uklonjen — umjesto njega koristite find_blobs(..., merge=True, margin=...). Napredni povratni poziv za filtriranje mrlja po boji više nije podržan.

Commiti: af15ec6eb

img.copy_to_fb() zamijenjen (minor)

Metoda img.copy_to_fb() zamijenjena je imenovanim argumentom copy_to_fb= na image.Image / load_image(). Koristite image.Image(path, copy_to_fb=True) za učitavanje velikih slika izravno u međuspremnik slike.

Commiti: 1645ab94b

compress() odbacuje kvalitetu izvan raspona (behavior)

image.compress() / compressed() sada bacaju grešku kada je quality izvan raspona 1–100 umjesto tihog ograničavanja. Ograničite quality na 1–100 prije poziva. Odvojeno, JPEG međuspremnik na OpenMV 3 smanjen je sa 64 KB na 23000 bajtova, pa velike sličice sada mogu izazvati nedostatak memorije — snizite JPEG kvalitetu ili veličinu sličice.

Commiti: 9efd7474a, 9a7c3defc

lens_corr() zoom sada je funkcionalan (behavior)

image.lens_corr() sada zaista primjenjuje svoj argument zoom (prije se parsirao, ali nije imao učinka), pa se izlaz razlikuje za skripte koje su proslijedile nezadani zoom. Ponovno provjerite podešavanje lens_corr().

Commiti: d6b49adef

Popis za migraciju

Za čist prijenos na v2.1.0 uobičajen posao je sljedeći:

  1. Zamijenite image.FREAK s image.ORB, izbacite argument tipa deskriptora te ažurirajte raspakiravanje tuplea match_descriptor() / draw_keypoints() na objekt ključnih točaka (ORB preuređivanje).

  2. Preimenujte sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() u set_auto_* oblike (preimenovanje automatskih funkcija).

  3. Premjestite kod histograma/statistike na objektne metode (preuređivanje histograma/statistike).

  4. Preimenujte find_features() scale= u scale_factor= (preimenovanje find_features).

  5. Koristite pristupnike objekata mrlja i zamijenite find_markers() s find_blobs(merge=True, ...) (promjena find_blobs); zamijenite img.copy_to_fb() imenovanim argumentom copy_to_fb= (promjena copy_to_fb).

  6. Ograničite kvalitetu compress() na 1–100 i ponovno provjerite JPEG veličine na OpenMV 3 (promjena compress); ponovno podesite zoom lens_corr() (promjena lens_corr).

Sve ostale skripte rade nepromijenjeno.