v2.1.0

v2.1.0 är en omfattande release för API-modernisering. Den ersätter FREAK-nyckelpunktsdeskriptorn med ORB, omarbetar find_blobs() / histogram / statistik till objektbaserade API:er, döper om sensor-funktionerna för automatisk exponering/förstärkning/vitbalans, lägger till QR-kodsdetektering och OV7725-linskorrigering, och startar upp det första OpenMV Cam M7-kortet. Många API:er ändrades — läs de brytande ändringarna nedan.

Höjdpunkter

  • ORB-nyckelpunkter — FREAK-deskriptorn ersattes med ORB (find_keypoints() / match_descriptor() omarbetade).

  • Objekt-API:erfind_blobs(), get_histogram(), get_statistics() returnerar nu objekt med namngivna åtkomstmetoder.

  • QR-koderimage.find_qrcodes()-detektering tillagd.

  • OpenMV Cam M7 — första kortstöd.

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (omdöpta) och set_lens_correction().

  • Brytande: API:erna för nyckelpunkter/deskriptorer, blob/histogram/statistik, sensorns auto-funktioner och flera andra ändrades — se de brytande ändringarna.

Nya funktioner

  • OpenMV Cam M7 — lade till första stöd för OpenMV 3 (M7)-kortet.

  • QR-koder — lade till image.find_qrcodes() med ett qrcodes.py-exempel.

  • ORB-nyckelpunkter — nytt ORB-deskriptorsystem: find_keypoints() med ett corner_detector-argument (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() med ett filter_outliers-nyckelord och en rotationsskattning; spara/läs in nyckelpunkter.

  • Objekt-API:erimage.get_histogram() / get_statistics() / get_percentile() returnerar histogram-/statistikobjekt; find_blobs() returnerar blob-objekt (rect() / cx() / cy() / code() / area() / pixels()) med area_threshold / pixels_threshold / merge / margin / invert och x_stride / y_stride.

  • Sensor — lade till sensor.set_lens_correction(enable, radi, coef) för OV7725-linsskuggning, sensor.set_windowing() accepterar nu även en (w, h)-tupel (autocentrerad), och image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Lade till exempelskript för färgspårning, Arduino SPI/I2C-slav, nyckelpunkter och histogram/statistik.

Övriga ändringar och förbättringar

  • IDE:n kan nu avbryta ett körande main.py; snabbare find_blobs() / find_qrcodes() / get_statistics(); ORB använder ett popcount-Hamming-avstånd; linskorrigering använder mindre RAM; en Linux-udev-regel hindrar ModemManager från att ta serieporten.

Buggfixar

Kamera och bildbehandling:

  • Åtgärdade M7:s DMA-cache-rensning/-invalidering (korrupta bildrutor), en falsk extra rad i slutet av varje bildruta, gränser för JPEG-bildbuffertöverflöde, frigöring av bildbufferten vid compress()-fel, ORB-noggrannhet / ROI / hantering av tom uppsättning, och geometrin för load_image(copy_to_fb=True).

System:

  • Åtgärdade F7 ADC-stöd, ett OV7725-registernamn, startladdar-/USB-timing, använde WFI under väntan på stillbilder och gjorde MJPEG-strömningsexemplet icke-blockerande med per-klient-timeouter.

Hårdvaru- och kortstöd

  • OpenMV Cam M7 (OpenMV 3) — första kortstöd.

  • OV7725 — stöd för linskorrigering (skuggning).

Brytande API-ändringar

Användarsynliga API-brytningar mellan v2.0.0 och v2.1.0. Omfattning: Python-C-moduler i modules/ och Python-bibliotek i scripts/libraries/.

Varje ändring är märkt med sin påverkan:

  • major — påverkar de flesta skript som använde funktionen; du kommer att behöva porta kod.

  • minor — smalt API; påverkar bara skript som använde det.

  • behavior — samma API, olika resultat; kontrollera justerade skript på nytt.

Ändringarna är grupperade efter påverkan i den ordningen. Om du bara vill porta din kod, hoppa till migreringschecklistan i slutet. Varje commit-hash länkar till sin diff på GitHub.

FREAK ersatt med ORB; deskriptor-API:t omarbetat (major)

FREAK-nyckelpunktsdeskriptorn togs bort och ersattes med ORB: image.FREAK finns inte längre (använd image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() tar inte längre ett inledande deskriptortyp-argument (det härleds från objektet), match_descriptor() returnerar nu en 8-elements tupel (cx, cy, x, y, w, h, match_count, rotation) (det sista elementet är ett rått antal, inte en procentandel), och draw_keypoints() kräver ett nyckelpunktsobjekt i stället för en rå (x, y, angle)-lista. find_keypoints() fick corner_detector / max_keypoints / scale_factor med ändrade standardvärden.

Commits: e2d0c4840, bba8e5a9e, 6000684cb

Omdöpning av sensorns auto-funktioner (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() döptes om till sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (de gamla namnen togs bort). Var och en fick ett valfritt value=-nyckelord för att ställa in ett manuellt värde i stället för auto.

Commits: 1b22a2961

Histogram / statistik omarbetat till objekt-API:er (major)

Histogram-/statistikytan omarbetades till objektbaserade image.get_histogram() / get_statistics() / get_percentile() som returnerar histogram-/statistikobjekt. De gamla platta histogram-/statistikresultaten och metoderna bin_count / l_bin_count / a_bin_count / b_bin_count togs bort (använd len(histogram.bins()) osv.).

Commits: 011108412, 9f37c83de

find_features() scale omdöpt (major)

image.find_features() (Haar) döpte om sitt scale=-nyckelord till scale_factor=. Uppdatera find_features(cascade, scale=...)-anrop till scale_factor=....

Commits: 96e4f770c

find_blobs() returnerar objekt; find_markers() borttagen (minor)

image.find_blobs() returnerar nu blob-objekt med namngivna åtkomstmetoder (indexåtkomst fungerar fortfarande för bakåtkompatibilitet), och image.find_markers() togs bort — använd find_blobs(..., merge=True, margin=...) i stället. Det avancerade återanropet för färgblob-filter stöds inte längre.

Commits: af15ec6eb

img.copy_to_fb() ersatt (minor)

Metoden img.copy_to_fb() ersattes av ett copy_to_fb=-nyckelord på image.Image / load_image(). Använd image.Image(path, copy_to_fb=True) för att läsa in stora bilder direkt i bildbufferten.

Commits: 1645ab94b

compress() avvisar kvalitet utanför intervallet (behavior)

image.compress() / compressed() utlöser nu ett fel när quality ligger utanför 1–100 i stället för att tyst klippa värdet. Klipp quality till 1–100 före anropet. Separat reducerades OpenMV 3:s JPEG-buffert från 64 KB till 23000 byte, så stora bildrutor kan nu utlösa minnesbrist — sänk JPEG-kvaliteten eller bildrutestorleken.

Commits: 9efd7474a, 9a7c3defc

lens_corr()-zoom fungerar nu (behavior)

image.lens_corr() tillämpar nu faktiskt sitt zoom-argument (det tolkades tidigare men hade ingen effekt), så utdata skiljer sig för skript som skickade en icke-standard zoom. Kontrollera lens_corr()-justeringen på nytt.

Commits: d6b49adef

Migreringschecklista

För en ren portning till v2.1.0 är det typiska arbetet:

  1. Ersätt image.FREAK med image.ORB, ta bort deskriptortyp-argumentet och uppdatera tupeluppackningen i match_descriptor() / draw_keypoints() till nyckelpunktsobjektet (ORB-omarbetningen).

  2. Döp om sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() till set_auto_*-formerna (omdöpningen av auto-funktioner).

  3. Flytta histogram-/statistikkod till objektmetoderna (histogram-/statistikomarbetningen).

  4. Döp om find_features() scale= till scale_factor= (find_features-omdöpningen).

  5. Använd blob-objektens åtkomstmetoder och ersätt find_markers() med find_blobs(merge=True, ...) (find_blobs-ändringen); ersätt img.copy_to_fb() med copy_to_fb=-nyckelordet (copy_to_fb-ändringen).

  6. Klipp compress()-kvaliteten till 1–100 och kontrollera JPEG-storlekar på OpenMV 3 på nytt (compress-ändringen); justera om lens_corr()-zoom (lens_corr-ändringen).

Alla övriga skript körs oförändrade.