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ärdbyggaretools/mkromfs.py.VL53L8CX stöd för 8x8 multizon-time-of-flight-sensor.
Nya ML-efterbehandlare —
yolo_v8_postprocessochyolo_lc_postprocess.MicroPython uppdaterad till 1.25.0.
Brytande: inbyggda modeller och Haar-kaskader läses nu in från
/romvia 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_callbackoch dekoratorn@async_remotefö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ärdverktygtools/mkromfs.py(tflite, tflite+vela, Haar-kaskad, text, binär) och en hjälpmodulscripts/libraries/romfs.pysom exponerarls_romfs().ML-efterbehandling — nya klasser
yolo_v8_postprocess(YOLOv8) ochyolo_lc_postprocess(lättviktig tiny-YOLOv2-variant med inbäddningsoptimerade standardankare), var och en tarthreshold,nms_thresholdochnms_sigma.GenX320 antiflimmer — en ny ioctl
IOCTL_GENX320_SET_AFKför att aktivera och konfigurera händelsesensorns antiflimmerfilter (min/max flimmerfrekvens i Hz), med ett exempelgenx320_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_overrideskrev 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.nonzeroi 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.
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.
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).
Migreringschecklista#
För en ren portning till v4.7.0 är det typiska arbetet:
Ä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).Uppdatera
haarcascade_frontalface_default.xmltillhaarcascade_frontalface.xmloch fångaRuntimeError(inteOSError) vid fel på kaskadinläsning (ändringen av Haar-kaskader).Ta bort kod som förlitade sig på att
tof.reset()återinitierar sensorn (tof-ändringen).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).