v2.1.0

v2.1.0 is een omvangrijke API-moderniseringsrelease. Het vervangt de FREAK-sleutelpuntdescriptor door ORB, herwerkt find_blobs() / histogrammen / statistieken tot objectgebaseerde API’s, hernoemt de sensor functies voor automatische belichting/versterking/witbalans, voegt QR-codedetectie en OV7725-lenscorrectie toe, en brengt het eerste OpenMV Cam M7-board tot leven. Veel API’s zijn gewijzigd — lees de breaking changes hieronder.

Hoogtepunten

  • ORB-sleutelpunten — de FREAK-descriptor is vervangen door ORB (find_keypoints() / match_descriptor() herwerkt).

  • Object-API’sfind_blobs(), get_histogram(), get_statistics() retourneren nu objecten met benoemde accessors.

  • QR-codesimage.find_qrcodes()-detectie toegevoegd.

  • OpenMV Cam M7 — eerste boardondersteuning.

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (hernoemd) en set_lens_correction().

  • Breaking: de sleutelpunt/descriptor-, blob/histogram/statistiek-, sensor-automatische-functie- en diverse andere API’s zijn gewijzigd — zie de breaking changes.

Nieuwe functies

  • OpenMV Cam M7 — eerste ondersteuning voor het OpenMV 3 (M7) board toegevoegd.

  • QR-codesimage.find_qrcodes() toegevoegd met een qrcodes.py-voorbeeld.

  • ORB-sleutelpunten — nieuw ORB-descriptorsysteem: find_keypoints() met een corner_detector-argument (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() met een filter_outliers-keyword en een rotatieschatting; sleutelpunten opslaan/laden.

  • Object-API’simage.get_histogram() / get_statistics() / get_percentile() retourneren histogram-/statistiekobjecten; find_blobs() retourneert blob-objecten (rect() / cx() / cy() / code() / area() / pixels()) met area_threshold / pixels_threshold / merge / margin / invert en x_stride / y_stride.

  • Sensorsensor.set_lens_correction(enable, radi, coef) toegevoegd voor OV7725-lensschaduwing, sensor.set_windowing() accepteert nu ook een (w, h)-tuple (automatisch gecentreerd), en image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Voorbeeldscripts toegevoegd voor kleurtracking, Arduino SPI/I2C-slave, sleutelpunten en histogram/statistiek.

Overige wijzigingen en verbeteringen

  • De IDE kan nu een draaiende main.py onderbreken; snellere find_blobs() / find_qrcodes() / get_statistics(); ORB gebruikt een popcount Hamming-afstand; lenscorrectie gebruikt minder RAM; een Linux udev-regel voorkomt dat ModemManager de seriële poort grijpt.

Bugfixes

Camera en beeldverwerking:

  • M7 DMA cache clean/invalidate gerepareerd (beschadigde frames), een spurieuze extra regel aan het einde van elk frame, JPEG-framebuffer-overloopgrenzen, het vrijgeven van de framebuffer bij compress()-fout, ORB-nauwkeurigheid / ROI / afhandeling van lege set, en de geometrie van load_image(copy_to_fb=True).

Systeem:

  • F7 ADC-ondersteuning gerepareerd, een OV7725-registernaam, bootloader/USB-timing, WFI gebruikt tijdens het wachten op momentopnames, en het MJPEG-streamervoorbeeld niet-blokkerend gemaakt met per-client-timeouts.

Hardware- en boardondersteuning

  • OpenMV Cam M7 (OpenMV 3) — eerste boardondersteuning.

  • OV7725 — ondersteuning voor lenscorrectie (schaduwing).

Breaking API-wijzigingen

Voor de gebruiker zichtbare API-breaks tussen v2.0.0 en v2.1.0. Bereik: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is gemarkeerd met de impact ervan:

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

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

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

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

FREAK vervangen door ORB; descriptor-API herwerkt (major)

De FREAK-sleutelpuntdescriptor is verwijderd en vervangen door ORB: image.FREAK bestaat niet meer (gebruik image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() nemen niet langer een voorafgaand descriptor-type-argument (het wordt afgeleid uit het object), match_descriptor() retourneert nu een 8-elementen-tuple (cx, cy, x, y, w, h, match_count, rotation) (het laatste element is een ruwe telling, geen percentage), en draw_keypoints() vereist een sleutelpuntenobject in plaats van een ruwe (x, y, angle)-lijst. find_keypoints() kreeg corner_detector / max_keypoints / scale_factor met gewijzigde standaardwaarden.

Commits: e2d0c4840, bba8e5a9e, 6000684cb

Sensor-automatische-functie hernoemd (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() zijn hernoemd naar sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (de oude namen zijn verwijderd). Elk kreeg een optioneel value=-keyword om een handmatige waarde in te stellen in plaats van automatisch.

Commits: 1b22a2961

Histogram / statistiek herwerkt naar object-API’s (major)

Het histogram-/statistiekoppervlak is herwerkt tot objectgebaseerde image.get_histogram() / get_statistics() / get_percentile() die histogram-/statistiekobjecten retourneren. De oude vlakke histogram-/statistiekresultaten en de methoden bin_count / l_bin_count / a_bin_count / b_bin_count zijn verwijderd (gebruik len(histogram.bins()) enz.).

Commits: 011108412, 9f37c83de

find_features() scale hernoemd (major)

image.find_features() (Haar) hernoemde zijn scale=-keyword naar scale_factor=. Werk find_features(cascade, scale=...)-aanroepen bij naar scale_factor=....

Commits: 96e4f770c

find_blobs() retourneert objecten; find_markers() verwijderd (minor)

image.find_blobs() retourneert nu blob-objecten met benoemde accessors (indextoegang werkt nog voor achterwaartse compatibiliteit), en image.find_markers() is verwijderd — gebruik in plaats daarvan find_blobs(..., merge=True, margin=...). De geavanceerde kleur-blob-filtercallback wordt niet langer ondersteund.

Commits: af15ec6eb

img.copy_to_fb() vervangen (minor)

De methode img.copy_to_fb() is vervangen door een copy_to_fb=-keyword op image.Image / load_image(). Gebruik image.Image(path, copy_to_fb=True) om grote afbeeldingen rechtstreeks in de framebuffer te laden.

Commits: 1645ab94b

compress() weigert kwaliteit buiten bereik (behavior)

image.compress() / compressed() werpen nu een fout op wanneer quality buiten 1–100 valt, in plaats van stilzwijgend te klemmen. Klem quality binnen 1–100 voordat je aanroept. Daarnaast is de JPEG-buffer van de OpenMV 3 verkleind van 64 KB naar 23000 bytes, dus grote frames kunnen nu een out-of-memory opwerpen — verlaag de JPEG-kwaliteit of framesize.

Commits: 9efd7474a, 9a7c3defc

lens_corr() zoom is nu functioneel (behavior)

image.lens_corr() past nu daadwerkelijk zijn zoom-argument toe (het werd voorheen geparsed maar had geen effect), dus de uitvoer verschilt voor scripts die een niet-standaard zoom doorgaven. Controleer de afstemming van lens_corr() opnieuw.

Commits: d6b49adef

Migratiechecklist

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

  1. Vervang image.FREAK door image.ORB, laat het descriptor-type-argument vallen, en werk de tuple-uitpakking van match_descriptor() / draw_keypoints() bij naar het sleutelpuntenobject (de ORB-herwerking).

  2. Hernoem sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() naar de set_auto_*-vormen (de automatische-functie-hernoeming).

  3. Verplaats histogram-/statistiekcode naar de objectmethoden (de histogram-/statistiekherwerking).

  4. Hernoem find_features() scale= naar scale_factor= (de find_features-hernoeming).

  5. Gebruik blob-objectaccessors en vervang find_markers() door find_blobs(merge=True, ...) (de find_blobs-wijziging); vervang img.copy_to_fb() door het copy_to_fb=-keyword (de copy_to_fb-wijziging).

  6. Klem de compress()-kwaliteit naar 1–100 en controleer JPEG-groottes op de OpenMV 3 opnieuw (de compress-wijziging); stem de lens_corr()-zoom opnieuw af (de lens_corr-wijziging).

Alle overige scripts draaien ongewijzigd.