v2.4.0¶
Verze v2.4.0 přepisuje find_lines() na detektor založený na Houghově transformaci, přidává find_line_segments(), dekódování data-matrix find_datamatrices(), sensor.set_vsync_output(), čtení/zápis řezů obrazu a mnoho nových škálovaných velikostí snímků pro vyšší FPS. Funkce find_lines(), match_descriptor() a skip_frames() se změnily — přečtěte si nekompatibilní změny níže.
Hlavní novinky¶
find_lines()— přepsáno na detektor přímek založený na Houghově transformaci, vracející objekty přímek (nyní funguje na RGB565, nejen na stupních šedi).find_line_segments()— detekce konečných úseček.find_datamatrices()— dekódování data-matrix.sensor.set_vsync_output()— výstup VSYNC na I/O pin pro synchronizaci kamery.Více velikostí snímků — mnoho dalších škálovaných rozlišení pro vyšší FPS.
Nekompatibilní:
find_lines(),match_descriptor()askip_frames()se změnily — viz nekompatibilní změny.
Nové funkce¶
image.find_line_segments()— vyhledávání nekonečných úseček; objekty přímek získaly přístupovou metodu.length().image.find_datamatrices()— dekódování data-matrix s ukázkovými skripty.sensor.set_vsync_output(pin)— výstup signálu VSYNC na GPIO pin pro synchronizaci kamery (OpenMV 2 / OpenMV 3).Řezy obrazu — indexování obrazu / protokol bufferu nyní podporuje čtení a zápis řezů obrazových dat.
Přidáno mnoho dalších kombinací škálovaného rozlišení / velikosti snímku pro podporu vyšších snímkových frekvencí;
clock.fps()nyní resetuje své akumulátory každé 2 s, takže reportované FPS sleduje aktuální frekvenci.
Další změny a vylepšení¶
Senzor OV7725 je oříznut na QVGA, když je rozlišení ≤ VGA (méně zahozených snímků při vysoké snímkové frekvenci), a jeho PLL bylo nastaveno na 6× se sníženými externími hodinami (OpenMV 2 48 MHz, OpenMV 3 54 MHz), což mění časování snímků senzoru.
Opravy chyb¶
Obrazové zpracování:
Opravena chyba velikosti bufferu
compress_for_ide()(počáteční/koncová značka), dekódování QR (plus opravy indexování buněk bitmapy a hranic zarovnávacího vzoru v upstreamu quirc).
Senzor a konektivita:
Snížena frekvence hodin senzoru OpenMV 2 pro spolupráci s vyšším PLL senzoru (inicializace/synchronizace kamery) a upraveno WINC
socket.recvfrom()tak, aby vracelo skutečně přijatou velikost (s chybou při nekladné velikosti místo vrácení zastaralé hodnoty).
Podpora hardwaru a desek¶
Výstup VSYNC na GPIO pinu (OpenMV 2 / OpenMV 3) podporující
sensor.set_vsync_output().OpenMV 3 — aktivováno
pyb.UARTUART1.
Nekompatibilní změny API¶
Pro uživatele viditelné nekompatibilní změny API mezi v2.3.0 a v2.4.0. Rozsah: Python C-moduly v modules/ a Python knihovny v scripts/libraries/.
Každá změna je označena podle svého dopadu:
major — ovlivňuje většinu skriptů, které funkci používaly; budete muset kód portovat.
minor — úzké API; ovlivňuje pouze skripty, které je používaly.
behavior — stejné API, jiné výsledky; znovu zkontrolujte vyladěné skripty.
Změny jsou seskupeny podle dopadu v tomto pořadí. Pokud chcete jen portovat svůj kód, přejděte na kontrolní seznam migrace na konci. Každý hash commitu odkazuje na svůj diff na GitHubu.
find_lines() přepsáno jako Houghův detektor (major)¶
image.find_lines() bylo přepsáno na detektor založený na Houghově transformaci. Již nevrací seznam n-tic (x1, y1, x2, y2) — vrací objekty přímek (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — a nyní funguje i na RGB565 (nejen na stupních šedi). Argument threshold se změnil z desetinného čísla 0.0–1.0 na celočíselný součet velikosti hran, line.magnitude je nyní celé číslo a byly přidány nové klíčové argumenty theta_margin / rho_margin. Portujte kód rozbalující n-tice na objekty přímek a znovu vylaďte threshold.
match_descriptor() vrací objekt shody (minor)¶
image.match_descriptor() (ORB) nyní vrací objekt kptmatch s přístupovými metodami .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() namísto prosté osmiprvkové n-tice. Objekt lze stále indexovat/řezat, takže poziční indexování dál funguje, ale kód, který používal isinstance(result, tuple) (nebo metody n-tic), musí použít nové přístupové metody.
Commity: e960546b6
sensor.skip_frames() je nyní založeno na čase (behavior)¶
sensor.skip_frames() bylo přepracováno tak, aby přijímalo klíčový argument time= (výchozí ~300 ms), a je nyní ve výchozím nastavení založeno na čase místo na pevném počtu snímků, přičemž se zastaví, jakmile uplyne daný čas. Skripty, které se spoléhaly na přesný počet snímků, by měly předat explicitní počet a/nebo odpovídajícím způsobem nastavit time=.
Commity: a039b5d1c
Kontrolní seznam migrace¶
Pro čistý přechod na v2.4.0 je typická práce následující:
Portujte rozbalování n-tic
find_lines()na objekty přímek a znovu vylaďte celočíselnýthreshold(přepis find_lines).Použijte přístupové metody
kptmatchmísto zacházení s výsledkymatch_descriptor()jako s n-ticí (změna match_descriptor).Předejte explicitní počet a/nebo
time=dosensor.skip_frames(), pokud jste se spoléhali na pevný počet snímků (změna skip_frames).
Všechny ostatní skripty poběží beze změny.