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).