v2.4.0

A v2.4.0 átírja a find_lines() függvényt Hough-transzformációs detektorrá, hozzáadja a find_line_segments(), a find_datamatrices() data-matrix dekódolás, a sensor.set_vsync_output() funkciókat, a kép-szelet olvasást/írást, valamint számos új skálázott képkockaméretet a magasabb FPS-hez. A find_lines(), a match_descriptor() és a skip_frames() megváltozott — olvasd el az alábbi töréses változásokat.

Kiemelések

  • find_lines() — átírva Hough-transzformációs vonaldetektorrá, amely vonalobjektumokat ad vissza (mostantól RGB565-ön is működik, nem csak szürkeárnyalatoson).

  • find_line_segments() — véges vonalszakaszok észlelése.

  • find_datamatrices() — data-matrix dekódolás.

  • sensor.set_vsync_output() — VSYNC vezérlése egy I/O lábon a kamera szinkronizálásához.

  • Több képkockaméret — számos további skálázott felbontás a magasabb FPS-hez.

  • Töréses: a find_lines(), a match_descriptor() és a skip_frames() megváltozott — lásd a töréses változásokat.

Új funkciók

  • image.find_line_segments() — nem végtelen vonalszakaszok keresése; a vonalobjektumok egy .length() elérővel bővültek.

  • image.find_datamatrices() — data-matrix dekódolás, példaszkriptekkel.

  • sensor.set_vsync_output(pin) — a VSYNC jel kiadása egy GPIO lábon a kamera szinkronizálásához (OpenMV 2 / OpenMV 3).

  • Kép-szeletek — a kép-index / puffer protokoll mostantól támogatja a képadatok szeleteinek olvasását és írását.

  • Számos további skálázott felbontás / képkockaméret kombináció hozzáadva a magasabb képkockasebesség támogatásához; a clock.fps() mostantól 2 másodpercenként alaphelyzetbe állítja az akkumulátorait, így a jelentett FPS a legutóbbi sebességet követi.

Egyéb változások és fejlesztések

  • Az OV7725 QVGA-ra van ablakozva, ha a felbontás ≤ VGA (kevesebb eldobott képkocka magas rögzítési sebességeknél), és a PLL-je 6×-osra lett állítva csökkentett külső órajellel (OpenMV 2 48 MHz, OpenMV 3 54 MHz), ami megváltoztatja az érzékelő képkocka-időzítését.

Hibajavítások

Képfeldolgozás:

  • Javítva a compress_for_ide() puffer-méret hibája (kezdő/záró jelölő), a QR dekódolás (valamint a felsőbb szintű quirc cella-bitkép indexelési és igazítási-minta határ-javítások).

Érzékelő és kapcsolat:

  • Csökkentve az OpenMV 2 érzékelő órajele, hogy működjön a magasabb érzékelő PLL-lel (kamera init/sync), és a WINC socket.recvfrom() mostantól a ténylegesen fogadott méretet adja vissza (nem pozitív méret esetén hibát jelez ahelyett, hogy elavult értéket adna vissza).

Hardver- és laptámogatás

  • VSYNC kimenet egy GPIO lábon (OpenMV 2 / OpenMV 3), amely a sensor.set_vsync_output() mögött áll.

  • OpenMV 3 — engedélyezve a pyb.UART UART1.

Töréses API-változások

A felhasználó által látható API-törések a v2.3.0 és a v2.4.0 között. Hatókör: Python C-modulok a modules/ mappában és Python könyvtárak a scripts/libraries/ mappában.

Minden változás meg van jelölve a hatásával:

  • major — a legtöbb olyan szkriptet érinti, amely a funkciót használta; portolnod kell a kódot.

  • minor — szűk API; csak az azt használó szkripteket érinti.

  • behavior — azonos API, eltérő eredmények; ellenőrizd újra a hangolt szkripteket.

A változások hatás szerint, ebben a sorrendben vannak csoportosítva. Ha csak portolni szeretnéd a kódodat, ugorj a migrációs ellenőrzőlistához a végén. Minden commit hash a GitHub-on lévő diffjére hivatkozik.

find_lines() átírva Hough-detektorrá (major)

Az image.find_lines() átírásra került Hough-transzformációs detektorrá. Már nem (x1, y1, x2, y2) tuple-ök listáját adja vissza — vonalobjektumokat ad vissza (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) —, és mostantól RGB565-ön is működik (nem csak szürkeárnyalatoson). A threshold argumentum 0.0–1.0 float-ról egész élmagnitúdó-összegre változott, a line.magnitude mostantól egész szám, és új theta_margin / rho_margin kulcsszavak kerültek hozzáadásra. Portold a tuple-kibontó kódot a vonalobjektumokra, és hangold újra a threshold értékét.

Commitok: 31b7b5bf3, f4a9c6154

match_descriptor() egy match objektumot ad vissza (minor)

Az image.match_descriptor() (ORB) mostantól egy kptmatch objektumot ad vissza .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() elérőkkel, egy egyszerű 8-elemű tuple helyett. Az objektum továbbra is indexelhető/szeletelhető, így a pozíció szerinti indexelés tovább működik, de az a kód, amely isinstance(result, tuple) ellenőrzést végzett (vagy tuple metódusokat használt), az új elérőket kell használnia.

Commitok: e960546b6

A sensor.skip_frames() mostantól időalapú (behavior)

A sensor.skip_frames() átdolgozásra került, hogy elfogadjon egy time= kulcsszót (alapértelmezetten ~300 ms), és mostantól alapértelmezetten időalapú, ahelyett, hogy rögzített számú képkockát futtatna, és korán leáll, amint az idő letelt. Azoknak a szkripteknek, amelyek pontos képkockaszámra támaszkodtak, explicit számot kell átadniuk és/vagy ennek megfelelően be kell állítaniuk a time= értéket.

Commitok: a039b5d1c

Migrációs ellenőrzőlista

A v2.4.0-ra való tiszta portoláshoz a tipikus munka a következő:

  1. Portold a find_lines() tuple-kibontást a vonalobjektumokra, és hangold újra az egész threshold értéket (a find_lines átírása).

  2. Használd a kptmatch elérőket ahelyett, hogy a match_descriptor() eredményeit tuple-ként kezelnéd (a match_descriptor változás).

  3. Adj át explicit számot és/vagy time= értéket a sensor.skip_frames() függvénynek, ha rögzített képkockaszámra támaszkodtál (a skip_frames változás).

Az összes többi szkript változtatás nélkül fut.