v4.7.0#

v4.7.0 är en större funktionssläpp. I rampljuset: det nya kortet OpenMV AE3 (Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) med en tvåkärnig openamp-programmeringsmodell, ett skrivskyddat ROMFS-filsystem (/rom) med medföljande modeller och kaskader, stöd för VL53L8CX 8x8 time-of-flight, nya YOLOv8- / YOLO-LC-efterbehandlare och MicroPython 1.25. Den ändrar även hur inbyggda modeller och Haar-kaskader läses in, så läs de brytande ändringarna nedan.

Höjdpunkter#

  • OpenMV AE3-kort — Alif Ensemble-kortet (Cortex-M55 + Ethos-U55 NPU), med en fullständig port, startladdare och ROMFS.

  • Tvåkärnig openamp-modul — avlasta arbete till den andra Alif-kärnan över RPMsg (dekoratorn @async_remote, Endpoint/ EndpointIO).

  • ROMFS — ett skrivskyddat /rom-filsystem med inbyggda TFLite-modeller och Haar-kaskader, plus en ny värdbyggare tools/mkromfs.py.

  • VL53L8CX stöd för 8x8 multizon-time-of-flight-sensor.

  • Nya ML-efterbehandlareyolo_v8_postprocess och yolo_lc_postprocess.

  • MicroPython uppdaterad till 1.25.0.

  • Brytande: inbyggda modeller och Haar-kaskader läses nu in från /rom via sökväg (se ändringen av ml.Model och ändringen av Haar-kaskader).

Nya funktioner#

  • OpenMV AE3 — nytt Alif Ensemble-kort (Cortex-M55-applikationskärna + Ethos-U55 NPU), med port, startladdare, kortkonfiguration, RGB-LED och ROMFS-stöd.

  • openamp — en ny modul för Alif:s tvåkärniga (Open-AMP / RPMsg) RPC-modell: Endpoint, EndpointIO, new_service_callback och dekoratorn @async_remote för att avlasta marshallade funktioner till den andra kärnan. HE/HP-kärnorna levereras med en standardmässig asyncio-baserad _boot.py-uppgiftskörare.

  • audio — Alif-porten lägger till audiomodulen (PDM-mikrofon) med ett återanropsbaserat strömmnings-API (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) på AE3.

  • ROMFS — ett skrivskyddat /rom-filsystem med inbyggda tillgångar (TFLite-modeller, Haar-kaskader, …) paketerade per kort, ett nytt värdverktyg tools/mkromfs.py (tflite, tflite+vela, Haar-kaskad, text, binär) och en hjälpmodul scripts/libraries/romfs.py som exponerar ls_romfs().

  • ML-efterbehandling — nya klasser yolo_v8_postprocess (YOLOv8) och yolo_lc_postprocess (lättviktig tiny-YOLOv2-variant med inbäddningsoptimerade standardankare), var och en tar threshold, nms_threshold och nms_sigma.

  • GenX320 antiflimmer — en ny ioctl IOCTL_GENX320_SET_AFK för att aktivera och konfigurera händelsesensorns antiflimmerfilter (min/max flimmerfrekvens i Hz), med ett exempel genx320_grayscale_set_afk.py.

  • VL53L8CX — stöd för 8x8 multizon-time-of-flight-sensorn via tof-modulen (autodetekterad, 8x8 vid 15 Hz).

Övriga ändringar och förbättringar#

  • MicroPython uppdaterad till 1.25.0 (STM32- och i.MX RT-portar), med den uppströms Alif-porten tillagd och äldre BT-HCI-drivrutiner borttagna från STM32- / i.MX RT-portarna.

  • GenX320 — en ny ISSD-sekvens fördubblar den interna pixelklockan (24 → 48 MHz) för högre bildfrekvenser.

  • STM32N6 / ST Edge AI — grundarbete för distribution av STM32N6 Neural-ART-modeller (ST Edge AI-verktyg och ROMFS-stöd).

  • PAG7936 — CSI PHY-bithastigheten ställs nu in, vilket förbättrar driften av den sensorn.

Buggfixar#

Kamera och sensorer:

  • Korrigerade IMU:n över I2C — kort som kopplar LSM6DSx-IMU:n på I2C initierar och läser nu korrekt (I2C-vägen använde tidigare en trasig läsväg och fel konstanter).

  • FLIR Boson-initiering gör nu upp till 10 nya försök för äldre sensorer (< IDD 4.x) som tar ~10 s att starta, och fabriksinställningarna återställs vid återställning så att externt inlästa inställningar inte kan bryta videoutgången.

  • Korrigerade att GenX320 psee_ehc_activate_override skrev fel (noll) ackumuleringstid.

  • På STM32-kort utan FastMode+-maskinvara är begäran om I2C-snabbläge nu korrekt skyddad i stället för att tyst felkonfigurera bussen.

Maskininlärning:

  • Korrigerade insamling av begränsningsrutor och hantering av np.nonzero i YOLOv2- / YOLOv5-efterbehandlarna, vilket förbättrar tillförlitligheten i detektering.

Maskinvara och kortstöd#

  • OpenMV AE3 — nytt Alif Ensemble-kort (Cortex-M55 + Ethos-U55 NPU).

  • VL53L8CX — 8x8 multizon-time-of-flight-sensor; AE3:ns ToF-sensor byttes från VL53L5CX till VL53L8CX.

  • STM32N6 — grundarbete för distribution av ST Edge AI-modeller (Neural-ART).

Brytande API-ändringar#

Användarsynliga API-brytningar mellan v4.6.20 och v4.7.0. Omfattning: Python-C-moduler i modules/ och Python-bibliotek i scripts/libraries/.

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

  • major — de flesta skript som använde den behöver redigeras.

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

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

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

Inbyggda modeller läses in via sökväg, inte namn (major)#

ml.Model läser inte längre in en inbyggd modell från en ren namnsträng. Modeller läses nu in från filsystemet / ROMFS via sökväg:

model = ml.Model("/rom/person_detect.tflite")   # was: ml.Model("person_detect")

C-sidans attribut model.labels togs bort; etiketter läses nu in av Python-omslaget ml.Model från en sidofil <model>.txt (None om den saknas). Alla medföljande exempel och ml/apps.py uppdaterades till /rom/*.tflite-sökvägar.

Commits: 978fa436c, 3f55d956c, 416bc4613

Haar-kaskader läses in från ROMFS (minor)#

image.HaarCascade() läser nu in inbyggda kaskader via VFS / ROMFS. Standardkaskadfilen för frontal ansiktsdetektering döptes om från haarcascade_frontalface_default.xml till haarcascade_frontalface.xml, och ett inläsningsfel ger nu RuntimeError (”Failed to load Haar cascade”) i stället för OSError.

Commit: 9de1220d8

tof.reset() / tof.deinit()-semantik (behavior)#

I tof-modulen var reset() tidigare ett alias för init() och det fanns ingen riktig deinit. tof.reset() utför nu en verklig sensoråterställning och tof.deinit() stänger ned sensorn korrekt (med stöd för VL53L5CX-avstängning). Kod som förlitade sig på att reset() återinitierar sensorn bör kontrolleras igen.

Commits: 20d6b53f8, c743cab6a

GenX320 timing och begränsningar för händelseläge (behavior)#

Den nya GenX320 ISSD-sekvensen ändrar sensorns tidsbas: argument för bildfrekvens och exponering uttrycks nu i 1 MHz-enheter i stället för att vara klockskalade, och HSYNC-blankning justeras dynamiskt efter den begärda bildfrekvensen. Skript som hårdkodade GenX320-timingvärden måste trimmas om. Infångning i händelseläge ger nu ett fel när bildtransponering är aktiverad (det stöds inte i den konfigurationen).

Commits: 660a783d6, 7a718c6af

Migreringschecklista#

För en ren portning till v4.7.0 är det typiska arbetet:

  1. Ändra inläsning av inbyggda modeller från en namnsträng till en /rom/<name>.tflite-sökväg, och tillhandahåll etiketter via en sidofil <name>.txt (ändringen av ml.Model).

  2. Uppdatera haarcascade_frontalface_default.xml till haarcascade_frontalface.xml och fånga RuntimeError (inte OSError) vid fel på kaskadinläsning (ändringen av Haar-kaskader).

  3. Ta bort kod som förlitade sig på att tof.reset() återinitierar sensorn (tof-ändringen).

  4. Trimma om eventuella hårdkodade GenX320-värden för bildfrekvens / exponering till 1 MHz-enheter, och aktivera inte transponering i händelseläge (GenX320-ändringen).