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()enskip_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 3 —
pyb.UARTUART1 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.
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:
Porteer het uitpakken van tuples van
find_lines()naar de lijnobjecten en stem de gehelethresholdopnieuw af (de herschrijving van find_lines).Gebruik de
kptmatch-accessors in plaats van de resultaten vanmatch_descriptor()als een tuple te behandelen (de wijziging van match_descriptor).Geef een expliciet aantal en/of
time=door aansensor.skip_frames()als je op een vast aantal frames vertrouwde (de wijziging van skip_frames).
Alle andere scripts draaien ongewijzigd.