v3.0.0

v3.0.0 är den stora utgåvan v2 → v3. Den introducerar OpenMV Cam M7 (STM32F7) och den nya CMSIS-NN-neuronnätsmodulen nn (som ersätter de gamla hårdkodade metoderna find_number() / classify_object()), lägger till stöd för sensorerna MT9V034 global slutare och FLIR Lepton, bildstorlekarna sensor.WVGA samt uppdaterar kärnan till MicroPython 1.9.4. Flera beteenden i image / sensor / WiFi ändrades — läs de brytande ändringarna nedan.

Höjdpunkter

  • OpenMV Cam M7 — nytt STM32F7-kort.

  • Modulen nn — CMSIS-NN-inferens: nn.load(), Net.forward(), Net.search(), med en modellkonverterare och exempel.

  • Nya sensorer — MT9V034 global slutare (FSIN-utlöst) och FLIR Lepton.

  • Kärnuppdatering till MicroPython 1.9.4.

  • Brytande: de hårdkodade image.find_number() / image.classify_object() togs bort, sensor.sleep() ger nu ett undantag, WINC-socklar returnerar verkliga byteantal, image.binary() returnerar en ny bild och find_apriltags() är begränsad till 64K pixlar — se de brytande ändringarna.

Nya funktioner

  • nn — en ny CMSIS-NN-neuronnätsmodul: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (returnerar flyttal 0.0–1.0), Net.search() för detektering i flera skalor/positioner och Net.test(), plus en CMSIS-NN-modellkonverterare (nn_convert.py / nn_quantizer.py), medföljande CIFAR-10- / LeNet- / smile-modeller och exempelskript för NN / NN-search.

  • Sensorer — stöd för MT9V034 global slutare (FSIN-utlöst stillbild) på OpenMV 4, en uppdaterad FLIR Lepton-drivrutin med Lepton-stillbild samt de nya bildstorlekarna sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • Bildbehandlingimage.find_circles() fick nyckelorden r_min / r_max / r_step (snabbare Hough), find_keypoints() och Haar-find_features() accepterar nu RGB-bilder, och image.compress() / JPEG-kodning stöder nu binära (bitmap) bilder.

  • Uppstartboot.py körs nu före USB-initieringen så att den kan åsidosätta USB-läget (t.ex. HID).

  • Exempel — lade till AprilTag-exempel i liten/hög upplösning, ett I2C LIDAR-Lite V3-exempel och datamängdsverktyg (augment_images.py / make_patches.py).

Övriga ändringar och förbättringar

  • Uppdaterade den medföljande MicroPython till 1.9.4 (med en återställning av pyexec parse/compile/exec och en PendSV-fix); tydligare felmeddelanden om slut på minne för fb_alloc / xalloc; dämpade nn-printf-brus under nätverksladdning; omorganiserade arkivet (exempel → scripts/, verktyg → tools/, Haar-kaskader → ml/). Modulen nn är inte tillgänglig på OpenMV 2 (otillräckligt flashminne).

Buggfixar

Bildbehandling:

  • Åtgärdade fast_atan2f för x≤0 (tidigare alltid 0 — kontrollera om blob-/linje-/nyckelpunktsvinklar igen), minneshantering i find_apriltags() (tappat innehåll och en felaktig realloc vid slut på minne), radpekare per bpp för binär/bitmap (korrupta binära resultat), find_edges(EDGE_CANNY) med ett ROI, makrot TO_GS_PIXEL (integral / morph), bitmap/JPEG-strömning för gråskalebildrutor (bpp==0), pop_front för nyckelpunkts-/bloblistan samt resultat från match_descriptor.

System och kamera:

  • Åtgärdade USB HID-gränssnitts-/slutpunktsnummer, dynamisk ändring av XCLK-frekvensen vid körning, att Net.forward() returnerar rätt antal utdata samt ett hårdfel vid avbrott av skripttolkning.

Hårdvaru- och kortstöd

  • OpenMV Cam M7 (STM32F7) — nytt kort.

  • MT9V034 sensor med global slutare (OpenMV 4, FSIN-utlöst).

  • FLIR Lepton — uppdaterad drivrutin med stöd för stillbilder.

Brytande API-ändringar

Användarsynliga API-brott mellan v2.9.0 och v3.0.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 behöver porta kod.

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

  • behavior — samma API, andra resultat; kontrollera finjusterade skript igen.

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

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

De hårdkodade metoderna image.find_number() (LeNet) och image.classify_object() (CMSIS CNN) togs bort till förmån för den nya modulen nn. Ersätt dem med net = nn.load('/model.network'); out = net.forward(img).

Commits: d151f7e38

sensor.sleep() / sensor.reset() ger undantag vid fel (minor)

sensor.sleep() och sensor.reset() ger nu ett undantag vid fel i stället för att returnera True / False. Kod som kontrollerade det booleska returvärdet från sensor.sleep() måste i stället omsluta anropet med try / except.

Commits: 7d16d008f

WINC-socklar returnerar det verkliga byteantalet (behavior)

Metoderna send / recv / sendto / recvfrom för WINC1500-sockeln returnerade tidigare alltid 0; de returnerar nu det faktiska antalet överförda byte. Kod som antog en returvärde på 0 (eller loopade/blockerade på det) måste hantera de verkliga antalen.

Commits: a07fb2f60

image.binary() returnerar en ny bild (behavior)

image.binary() fick nyckelorden to_bitmap / copy och returnerar nu ett nytt bildobjekt i stället för att returnera/mutera källbilden på plats. Kod som förlitade sig på att binary() muterade originalbilden bör använda det returnerade objektet (och skicka copy=True för beteende som inte sker på plats).

Commits: 8a44f0cd9

find_apriltags() begränsad till 64K pixlar (behavior)

image.find_apriltags() ger nu ett undantag om bilden (eller ROI:n) överstiger 64K pixlar och returnerar en tom lista för bilder mindre än 4x4. Skala ner stora bilder (använd en mindre framesize eller skicka en explicit roi) innan du anropar find_apriltags().

Commits: bd77afbc0

Migrationschecklista

För en ren portning till v3.0.0 är det typiska arbetet:

  1. Ersätt image.find_number() / image.classify_object() med modulen nn (nn-migrationen).

  2. Omslut sensor.sleep() / sensor.reset() med try / except i stället för att kontrollera ett booleskt returvärde (ändringen av sensor.sleep).

  3. Hantera verkliga byteantal från WINC-sockelns send / recv (ändringen av WINC-sockeln).

  4. Använd bilden som returneras av image.binary() i stället för att förvänta dig mutation på plats (binary-ändringen).

  5. Skala ner bilder före find_apriltags() för att hålla dig under 64K pixlar (begränsningen av find_apriltags).

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