v2.4.0

v2.4.0 herschrijft find_lines() als een Hough-transformatiedetector, voegt find_line_segments(), find_datamatrices() data-matrixdecodering, sensor.set_vsync_output(), lezen/schrijven van image-slices en veel nieuwe geschaalde framesizes toe voor hogere FPS. find_lines(), match_descriptor() en skip_frames() zijn gewijzigd — lees de brekende wijzigingen hieronder.

Hoogtepunten

  • find_lines() — herschreven als een Hough-transformatielijndetector die lijnobjecten retourneert (werkt nu op RGB565, niet alleen op grijswaarden).

  • find_line_segments() — detecteer eindige lijnsegmenten.

  • find_datamatrices() — data-matrixdecodering.

  • sensor.set_vsync_output() — stuur VSYNC aan op een I/O-pin voor camerasynchronisatie.

  • Meer framesizes — veel extra geschaalde resoluties voor hogere FPS.

  • Brekend: find_lines(), match_descriptor() en skip_frames() zijn gewijzigd — zie de brekende wijzigingen.

Nieuwe functies

  • image.find_line_segments() — vind niet-oneindige lijnsegmenten; lijnobjecten kregen een .length()-accessor.

  • image.find_datamatrices() — data-matrixdecodering, met voorbeeldscripts.

  • sensor.set_vsync_output(pin) — geef het VSYNC-signaal uit op een GPIO-pin voor camerasynchronisatie (OpenMV 2 / OpenMV 3).

  • Image-slices — het image-subscript-/bufferprotocol ondersteunt nu het lezen en schrijven van slices van de afbeeldingsdata.

  • Veel extra geschaalde resolutie-/framesize-combinaties toegevoegd om hogere framerates te ondersteunen; clock.fps() reset zijn accumulators nu elke 2 s, zodat de gerapporteerde FPS de recente snelheid volgt.

Overige wijzigingen en verbeteringen

  • De OV7725 wordt tot QVGA gevensterd wanneer de resolutie ≤ VGA is (minder gedropte frames bij hoge opnamesnelheden) en zijn PLL is ingesteld op 6× met een verlaagde externe klok (OpenMV 2 48 MHz, OpenMV 3 54 MHz), wat de frametiming van de sensor verandert.

Bugfixes

Beeldverwerking:

  • De buffergroottefout van compress_for_ide() (start-/eindmarkering) opgelost, QR-decodering (plus upstream quirc-celbitmapindexering en correcties van uitlijningspatroongrenzen).

Sensor en connectiviteit:

  • De sensorklok van de OpenMV 2 verlaagd om te werken met de hogere sensor-PLL (camera-init/sync) en WINC socket.recvfrom() retourneert nu de werkelijk ontvangen grootte (geeft een fout bij een niet-positieve grootte in plaats van een verouderde waarde te retourneren).

Hardware- en bordondersteuning

  • VSYNC-uitvoer op een GPIO-pin (OpenMV 2 / OpenMV 3) als basis voor sensor.set_vsync_output().

  • OpenMV 3pyb.UART UART1 ingeschakeld.

Brekende API-wijzigingen

Voor de gebruiker zichtbare API-breuken tussen v2.3.0 en v2.4.0. Bereik: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is gemarkeerd met de impact ervan:

  • major — beïnvloedt de meeste scripts die de functie gebruikten; je zult code moeten porteren.

  • minor — smalle API; beïnvloedt alleen scripts die deze gebruikten.

  • behavior — dezelfde API, andere resultaten; controleer afgestemde scripts opnieuw.

De wijzigingen zijn in die volgorde gegroepeerd op impact. Als je alleen je code wilt porteren, ga dan naar de migratiechecklist aan het einde. Elke commit-hash linkt naar zijn diff op GitHub.

find_lines() herschreven als een Hough-detector (major)

image.find_lines() is herschreven als een Hough-transformatiedetector. Het retourneert geen lijst van (x1, y1, x2, y2)-tuples meer — het retourneert lijnobjecten (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — en werkt nu ook op RGB565 (niet alleen op grijswaarden). Het threshold-argument is veranderd van een 0.0–1.0 float in een gehele som van randmagnitudes, line.magnitude is nu een geheel getal, en er zijn nieuwe theta_margin / rho_margin-keywords toegevoegd. Porteer code die tuples uitpakt naar de lijnobjecten en stem threshold opnieuw af.

Commits: 31b7b5bf3, f4a9c6154

match_descriptor() retourneert een match-object (minor)

image.match_descriptor() (ORB) retourneert nu een kptmatch-object met .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect()-accessors in plaats van een gewone 8-tuple. Het object is nog steeds subscriptbaar/sliceable, dus positionele indexering blijft werken, maar code die isinstance(result, tuple) deed (of tuple-methoden gebruikte) moet de nieuwe accessors gebruiken.

Commits: e960546b6

sensor.skip_frames() is nu tijdgebaseerd (behavior)

sensor.skip_frames() is herwerkt om een time=-keyword te accepteren (standaard ~300 ms) en is nu standaard tijdgebaseerd in plaats van een vast aantal frames uit te voeren; het stopt vroegtijdig zodra de tijd verstreken is. Scripts die op een exact aantal frames vertrouwden, moeten een expliciet aantal doorgeven en/of time= dienovereenkomstig instellen.

Commits: a039b5d1c

Migratiechecklist

Voor een schone port naar v2.4.0 is het typische werk:

  1. Porteer het uitpakken van tuples van find_lines() naar de lijnobjecten en stem de gehele threshold opnieuw af (de herschrijving van find_lines).

  2. Gebruik de kptmatch-accessors in plaats van de resultaten van match_descriptor() als een tuple te behandelen (de wijziging van match_descriptor).

  3. Geef een expliciet aantal en/of time= door aan sensor.skip_frames() als je op een vast aantal frames vertrouwde (de wijziging van skip_frames).

Alle andere scripts draaien ongewijzigd.