v3.0.0

v3.0.0 is de grote v2 → v3-release. Hij introduceert de OpenMV Cam M7 (STM32F7) en de nieuwe nn CMSIS-NN neurale-netwerkmodule (ter vervanging van de oude hardgecodeerde find_number() / classify_object() methoden), voegt ondersteuning toe voor de MT9V034 global-shutter en FLIR Lepton sensoren, de sensor.WVGA framesizes, en werkt de core bij naar MicroPython 1.9.4. Diverse gedragingen van image / sensor / WiFi zijn gewijzigd — lees hieronder de breaking changes.

Hoogtepunten

  • OpenMV Cam M7 — nieuw STM32F7-board.

  • nn module — CMSIS-NN inferentie: nn.load(), Net.forward(), Net.search(), met een modelconverter en voorbeelden.

  • Nieuwe sensoren — MT9V034 global-shutter (FSIN-getriggerd) en FLIR Lepton.

  • MicroPython 1.9.4 core-update.

  • Breaking: de hardgecodeerde image.find_number() / image.classify_object() zijn verwijderd, sensor.sleep() werpt nu een uitzondering op, WINC-sockets geven echte byte-aantallen terug, image.binary() geeft een nieuwe afbeelding terug, en find_apriltags() is begrensd op 64K pixels — zie de breaking changes.

Nieuwe functies

  • nn — een nieuwe CMSIS-NN neurale-netwerkmodule: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (geeft floats van 0.0–1.0 terug), Net.search() voor detectie op meerdere schalen/posities, en Net.test(), plus een CMSIS-NN modelconverter (nn_convert.py / nn_quantizer.py), gebundelde CIFAR-10 / LeNet / smile-modellen, en NN / NN-search voorbeeldscripts.

  • Sensoren — MT9V034 global-shutter ondersteuning (FSIN-getriggerde snapshot) op de OpenMV 4, een bijgewerkte FLIR Lepton-driver met Lepton-snapshot, en de nieuwe sensor.WVGA (720x480) / sensor.WVGA2 (752x480) framesizes.

  • Imagingimage.find_circles() kreeg r_min / r_max / r_step keywords (snellere Hough), find_keypoints() en de Haar find_features() accepteren nu RGB-afbeeldingen, en image.compress() / JPEG-encodering ondersteunt nu binaire (bitmap-)afbeeldingen.

  • Bootboot.py draait nu vóór de USB-initialisatie zodat het de USB-modus kan overschrijven (bijv. HID).

  • Voorbeelden — kleine/high-res AprilTag-voorbeelden, een I2C LIDAR-Lite V3-voorbeeld, en dataset-tooling (augment_images.py / make_patches.py) toegevoegd.

Overige wijzigingen en verbeteringen

  • De gebundelde MicroPython bijgewerkt naar 1.9.4 (met een terugdraaiing van pyexec parse/compile/exec en een PendSV-fix); duidelijkere fb_alloc / xalloc out-of-memory foutmeldingen; nn printf-ruis onderdrukt tijdens het laden van netwerken; de repository gereorganiseerd (voorbeelden → scripts/, tools → tools/, Haar Cascades → ml/). De nn module is niet beschikbaar op de OpenMV 2 (onvoldoende flashgeheugen).

Foutoplossingen

Imaging:

  • fast_atan2f voor x≤0 opgelost (voorheen altijd 0 — controleer blob- / lijn- / sleutelpunthoeken opnieuw), het geheugenbeheer van find_apriltags() (verloren inhoud en een onjuiste realloc bij OOM), binaire/bitmap per-bpp rij-pointers (corrupte binaire resultaten), find_edges(EDGE_CANNY) met een ROI, de TO_GS_PIXEL macro (integral / morph), bitmap/JPEG-streaming voor grijswaarden-frames (bpp==0), de pop_front van de sleutelpunt-/bloblijst, en de resultaten van match_descriptor.

Systeem en camera:

  • De USB HID-interface-/endpointnummers opgelost, het dynamisch wijzigen van de XCLK-frequentie tijdens runtime, Net.forward() dat het juiste aantal outputs teruggeeft, en een hardfault bij het onderbreken van het parsen van een script.

Hardware- en boardondersteuning

  • OpenMV Cam M7 (STM32F7) — nieuw board.

  • MT9V034 global-shutter sensor (OpenMV 4, FSIN-getriggerd).

  • FLIR Lepton — bijgewerkte driver met snapshot-ondersteuning.

Breaking API-wijzigingen

Voor gebruikers zichtbare API-breaks tussen v2.9.0 en v3.0.0. Reikwijdte: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is gemarkeerd met de impact ervan:

  • major — treft de meeste scripts die de functie gebruikten; je zult code moeten porten.

  • minor — beperkte API; treft alleen scripts die deze gebruikten.

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

Wijzigingen zijn in die volgorde gegroepeerd op impact. Als je alleen je code wilt porten, spring dan naar de migratiechecklist aan het einde. Elke commit-hash linkt naar de bijbehorende diff op GitHub.

image.find_number() / image.classify_object() verwijderd (major)

De hardgecodeerde image.find_number() (LeNet) en image.classify_object() (CMSIS CNN) methoden zijn verwijderd ten gunste van de nieuwe nn module. Vervang ze door net = nn.load('/model.network'); out = net.forward(img).

Commits: d151f7e38

sensor.sleep() / sensor.reset() werpen een uitzondering bij fouten (minor)

sensor.sleep() en sensor.reset() werpen nu een uitzondering bij een fout in plaats van True / False terug te geven. Code die de booleaanse retourwaarde van sensor.sleep() controleerde, moet de aanroep in plaats daarvan in een try / except plaatsen.

Commits: 7d16d008f

WINC-sockets geven het echte byte-aantal terug (behavior)

De WINC1500 socket-methoden send / recv / sendto / recvfrom gaven voorheen altijd 0 terug; ze geven nu het werkelijke aantal overgedragen bytes terug. Code die uitging van een retourwaarde van 0 (of erop wachtte/blokkeerde) moet de echte aantallen verwerken.

Commits: a07fb2f60

image.binary() geeft een nieuwe afbeelding terug (behavior)

image.binary() kreeg to_bitmap / copy keywords en geeft nu een nieuw afbeeldingsobject terug in plaats van de bronafbeelding ter plekke terug te geven/te muteren. Code die erop vertrouwde dat binary() de originele afbeelding muteerde, moet het geretourneerde object gebruiken (en copy=True doorgeven voor niet-ter-plekke gedrag).

Commits: 8a44f0cd9

find_apriltags() begrensd op 64K pixels (behavior)

image.find_apriltags() werpt nu een uitzondering als de afbeelding (of ROI) groter is dan 64K pixels en geeft een lege lijst terug voor afbeeldingen kleiner dan 4x4. Verklein grote afbeeldingen (gebruik een kleinere framesize of geef een expliciete roi door) voordat je find_apriltags() aanroept.

Commits: bd77afbc0

Migratiechecklist

Voor een schone port naar v3.0.0 is het typische werk:

  1. Vervang image.find_number() / image.classify_object() door de nn module (de nn-migratie).

  2. Plaats sensor.sleep() / sensor.reset() in een try / except in plaats van een booleaanse retourwaarde te controleren (de sensor.sleep-wijziging).

  3. Verwerk echte byte-aantallen van WINC socket send / recv (de WINC socket-wijziging).

  4. Gebruik de afbeelding die image.binary() teruggeeft in plaats van mutatie ter plekke te verwachten (de binary-wijziging).

  5. Verklein afbeeldingen vóór find_apriltags() om onder 64K pixels te blijven (de find_apriltags-begrenzing).

Alle andere scripts draaien ongewijzigd.