v4.8.0¶
v4.8.0 är en stor funktionsutgåva. I huvudrollen: en helt ny klassbaserad csi-kameramodul med stöd för flera kameror, kortet OpenMV N6 (STM32N6) med en Neural-ART NPU, en NPU-inferensbackend, GenX320:s RAW-händelseläge för händelsekameror, en ny crc-modul, ett omorganiserat ML-efterbehandlingsbibliotek och MicroPython 1.26. Den tar även bort några äldre API:er — buzzer-modulen och fir-modulens FLIR Lepton-styrning — så läs de brytande ändringarna nedan.
Höjdpunkter¶
Ny
csi-kameramodul. Ett klassbaseratcsi.CSI-API med stöd för flera samtidiga kameror, introducerat vid sidan av den äldresensor-modulen.OpenMV N6. STM32N6-kortet, med en Neural-ART NPU, trippelbuffring, Soft-CSI och en ToF-modul.
NPU-inferens. En ST Neural-ART (STAI)-backend för hårdvaruaccelererad modellinferens.
GenX320:s händelseläge. RAW-händelseutdata plus
draw_event_histogram()för rendering från händelsekameror.Omorganiserad ML-efterbehandling — leverantörsdelpaket (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) med nya detektorer för BlazeFace / BlazePalm samt hand- och ansiktslandmärken.Ny
crc-modul — hårdvaruaccelererad CRC-16 / CRC-32.MicroPython uppdaterad till 1.26.0.
Brytande:
buzzer-modulen ochfir-modulens Lepton-styrning togs bort (Lepton är nu en vanlig kamera). Se fir/Lepton-ändringen och borttagningen av buzzer.
Nya funktioner¶
Den nya
csi-kameramodulen — ett klassbaseratcsi.CSI-objekt med flera samtidiga kameror (upp till tre på N6), icke-blockerande stillbild, anpassade bildrutestorlekar(w, h)och en informativprint()/ repr. Det introduceras vid sidan av den äldresensor-modulen (inte en direkt ersättning).crc—crc.crc16()ochcrc.crc32(), hårdvaruaccelererade med en mjukvarureserv, på OpenMV N6 och AE3.image.Image.draw_image()fick etttransform=-nyckelord (en 2D-flyttals-ndarray-matris för affina/perspektiviska förvrängningar, GPU-accelererad på STM32 och Alif); samma transformering är tillgänglig vid bildkonvertering.draw_event_histogram()— rendera histogram från händelsekameror.GenX320 RAW-händelseläge —
csi.IOCTL_GENX320_SET_MODEmedcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, händelsetypskonstanter och nya exempelskript.ML — en ST Neural-ART (STAI) NPU-inferensbackend;
ml.Modelfick ettpostprocess=-nyckelord (efterbehandlaren körs nu automatiskt inutipredict()även utan ett återanrop);ml.postprocessingomorganiserades i leverantörsdelpaket —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) ochml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — de gamla snake_case-namnen finns kvar som alias;ml.utils.draw_keypoints()ochml.utils.draw_skeleton()lades till; de medföljande ROMFS-modellerna utökades (BlazeFace, YOLO-LC, YOLOv8n, hand-/handflate-/ansiktslandmärken).audio— MDF digital mikrofoningång på STM32N6.Display — en SSD1351 OLED-drivrutin och exempel;
SPIDisplay-styrenheter kan åsidosätta sina init-kommandon; SPI-displaykonstruktorn fick nyckelordenhmirror/vflip.Profilerare på enheten — SysTick + Armv8.1-M PMU cykel-/händelseräknare med instrumentering på funktionsnivå, avläsbara över debug-länken (
pyopenmvfick stöd för profilering och ELF-symboler).Nytt sensorstöd — PixArt PS5520; FLIR BOSON på OpenMV H7 Plus; automatisk identifiering av GenX320.
Övriga ändringar och förbättringar¶
MicroPython uppdaterad till 1.26.0.
Kamerastart — sensorklockan frikopplades från CSI-tillståndet, kameraidentifiering vid uppstart är snabbare (den vanligaste konfigurationen testas först), och standardklockan för OV7725 på OpenMV 3 korrigerades.
Bildkvalitet — mjukvaru-ISP:ns gammakorrigering (Alif och STM32) och korrigering av defekta pixlar (STM32) är på som standard; sensorerna PAG7936 och PS5520 fick automatiska vitbalanskontroller.
Prestanda —
image.Image.to_ndarray()accelereras med Helium SIMD och FOMO-efterbehandlaren vektoriserades med ulab.FLIR Lepton-drivrutinen omskriven för att ta emot bildrutor asynkront i bakgrunden — rotation/
transposefungerar nu, ritning uppskalas bilinjärt och återställning är snabbare.Infångningsgenomströmning — i.MX RT1062 CSI använder nu fullständig DMA-avlastning, och STM32 N6 har en hårdvaru-GPU-
draw_image().
Buggfixar¶
Kamera och sensorer:
Åtgärdade lägena RGB565 / GRAYSCALE / BAYER / YUV422 över STM32-sensorerna, PAJ6100 på OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 och N6 CSI mono / RGB-YUV-konfigurationen; mjukvarutestkameran återställs nu deterministiskt.
Automatisk vitbalans gör inte längre bilden grön vid låga eller varierande bildrutehastigheter (ett rörligt medelvärde på 250 ms ersätter sampling var hundrade bildruta), och luminansflimmer på PS5520 är åtgärdat.
Bildbehandling:
Åtgärdade ett renderingsfel vid ritning av linjer;
image.Image.flush()tömmer nu JPEG-bufferten för den bild som den anropades på;Normalizationtillämpar nu medelvärde/standardavvikelse på flyttalsindata; allokering av bild-från-fil är åtgärdad.
Kamerainfångning:
Åtgärdade allvarlig bildkorruption vid icke-JPEG-överföringar (bildrutans avbrott aktiveras nu endast i JPEG-läge), stöd för JPEG-läge 3 samt DMA-radstorlek och låsningar med små buffertar på STM32; VOSPI / Lepton-synkronisering är mer pålitlig, särskilt på N6.
Diverse:
omv.board_id()returnerar korrekt UID på RT1060;YoloV2kraschar inte längre när den konstrueras utan explicita ankare.
Hårdvaru- och kortstöd¶
OpenMV N6 — STM32N6 med en Neural-ART NPU, trippelbuffring, SPI LCD/TV-utgång, Soft-CSI,
tof-modulen och medföljande ROMFS-modeller.Arduino GIGA — MIPI DSI-displayutgång.
Nya sensorer — PixArt PS5520; FLIR BOSON på OpenMV H7 Plus; automatisk identifiering av GenX320.
OpenMV Pure Thermal — FLIR Lepton är nu en vanlig (sekundär) kamerasensor.
Alif AE3 — mjukvaru-ISP:ns gammakorrigering,
crc-modulen och SPI-fixar.
Brytande API-ändringar¶
Användarsynliga API-brytningar mellan v4.7.0 och v4.8.0. Omfattning: Python C-moduler i modules/ och Python-bibliotek i scripts/libraries/.
Varje ändring är taggad med sin påverkan:
major — de flesta skript som använde det behöver redigeras.
minor — snävt API; påverkar endast skript som använde det.
behavior — samma API, andra resultat; kontrollera om finjusterade skript på nytt.
tooling — påverkar endast värdverktyg / byggande från källkod.
Ändringarna är grupperade efter påverkan i den ordningen — major först, sedan minor, behavior och tooling. Om du bara vill porta din kod, hoppa till migrationschecklistan i slutet för en kortfattad att göra-lista. Varje commit-hash länkar till sin diff på GitHub.
FLIR Lepton flyttad bort från fir-modulen (major)¶
FLIR Lepton drivs nu som en vanlig kamerasensor i stället för via fir-modulen. Lepton-styrningen togs bort från fir: typen FIR_LEPTON och metoderna radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() och trigger_ffc() är borta. Fånga Lepton som vilken annan kamera som helst (den visas som en sekundär sensor på OpenMV Pure Thermal); Pure Thermal-exemplet skrevs om till det nya API:et. De övriga fir-sensorerna (Grid-EYE, MLX, AMG8833) är oförändrade.
buzzer-modulen borttagen (minor)¶
buzzer-modulen togs bort från STM32- och i.MX RT-portarna. Driv summern med machine.PWM i stället; ett Pure Thermal-summerexempel som använder PWM lades till.
omv.disable_fb() borttagen (minor)¶
Funktionen omv.disable_fb() togs bort; strömning av bildbufferten styrs nu genom kamera-API:et. De äldre RPC-skrivbordsskripten som förlitade sig på den togs också bort.
csi är ny — dess API är ännu inte fryst (minor)¶
csi-modulen introduceras i v4.8.0 och dess API utvecklades under utgåvan: csi.fb() togs bort, och csi.CSI.snapshot() (image=...) kräver nu en muterbar bild och ritar/skalar den infångade bildrutan in i den i stället för att göra en rå djupkopia. Tidiga användare av den nya modulen bör testa om; det äldre sensor-API:et påverkas inte.
image.ImageIO strömningsläge och close() (minor)¶
image.ImageIO — argumentet mode accepterar nu endast gemena 'r' / 'w' (versaler avvisas med ett uppdaterat felmeddelande), och öppning med 'w' trunkerar/återskapar alltid filen i stället för att bevara en befintlig ström. ImageIO.close() är nu idempotent (att stänga en redan stängd ström ger inte längre upphov till ett fel) och returnerar None i stället för strömobjektet.
Returvärde för BlazeFace / BlazePalm (minor)¶
Efterbehandlarna BlazeFace och BlazePalm (nya i denna utgåva) returnerar nu en enda lista med begränsningsrutor i stället för hela listan per klass — anropare indexerar resultatet direkt i stället för [0].
Commit: 75e16b573
ML-efterbehandlarens återanrop tar emot råa tensorer (behavior)¶
Ett efterbehandlingsåteranrop till ml.Model predict() tar nu emot referenser till de råa (kvantiserade) utdatatensorerna i stället för förkonverterade flyttals-ndarrayer — detta undviker minnesbrist på stora modeller. Om inget återanrop tillhandahålls returneras fortfarande flyttals-ndarray. Anpassade återanrop måste avkvantisera tensorerna själva (de inbyggda efterbehandlarna gör det redan).
Commit: 84e6ee650
Kameraklockan frikopplad från CSI-tillstånd (behavior)¶
Sensorklockan är nu oberoende av CSI-tillståndet. set_clock / set_frequency omkonfigurerar bara klockan när den begärda frekvensen skiljer sig med mer än en tolerans, och get_clk_frequency tar ett booleskt värde för att returnera den exakta (i stället för nominella) frekvensen. Standardklockan är 24 MHz på OpenMV N6 och AE3, så inget explicit set_clock() behövs vid uppstart. Skript som växlade klockan för tidskänsliga infångningar bör kontrollera sina antaganden på nytt.
Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
USB debug-protokoll och firmware-mål (tooling)¶
Inget av detta påverkar MicroPython-skript. Föråldrade USBDBG-kommandon (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) togs bort och kommandon som inte stöds från äldre IDE:er töms nu i stället för att krascha TinyUSB-kort vid anslutning; det äldre STM32 UVC-firmwaremålet togs bort. Gamla värdverktyg bör uppdateras; se historiken i firmware-arkivet för detaljer.
Migrationschecklista¶
För en ren portning till v4.8.0 är det typiska arbetet:
Om du använde FLIR Lepton genom
fir, byt till att fånga den som en kamerasensor (fir/Lepton-ändringen).Ersätt all användning av
buzzermedmachine.PWM(borttagningen av buzzer).Ta bort anrop till
omv.disable_fb()(borttagningen av omv.disable_fb()).För
image.ImageIO: använd gemena'r'/'w'och förvänta dig att'w'trunkerar (ImageIO-ändringen).För anpassade ML-efterbehandlingsåteranrop: avkvantisera de råa tensorreferenserna själv, eller förlita dig på standardflyttalsvägen (återanropsändringen).
Kontrollera på nytt alla skript som drev sensorklockan för tidskänsliga infångningar (klockändringen).