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 klassbaserat csi.CSI-API med stöd för flera samtidiga kameror, introducerat vid sidan av den äldre sensor-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 och fir-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 klassbaserat csi.CSI-objekt med flera samtidiga kameror (upp till tre på N6), icke-blockerande stillbild, anpassade bildrutestorlekar (w, h) och en informativ print() / repr. Det introduceras vid sidan av den äldre sensor-modulen (inte en direkt ersättning).

  • crccrc.crc16() och crc.crc32(), hårdvaruaccelererade med en mjukvarureserv, på OpenMV N6 och AE3.

  • image.Image.draw_image() fick ett transform=-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ägecsi.IOCTL_GENX320_SET_MODE med csi.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.Model fick ett postprocess=-nyckelord (efterbehandlaren körs nu automatiskt inuti predict() även utan ett återanrop); ml.postprocessing omorganiserades i leverantörsdelpaket — ml.postprocessing.ultralytics (YoloV5, YoloV8), ml.postprocessing.darknet (YoloV2, YoloLC), ml.postprocessing.edgeimpulse (Fomo) och ml.postprocessing.mediapipe (BlazeFace, BlazePalm, HandLandmarks, FaceLandmarks) — de gamla snake_case-namnen finns kvar som alias; ml.utils.draw_keypoints() och ml.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 nyckelorden hmirror / vflip.

  • Profilerare på enheten — SysTick + Armv8.1-M PMU cykel-/händelseräknare med instrumentering på funktionsnivå, avläsbara över debug-länken (pyopenmv fick 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.

  • Prestandaimage.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/transpose fungerar 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å; Normalization tillä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; YoloV2 kraschar 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.

Commits: bacfb7aeb, 117710566, 592a22902, 1a614202e

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.

Commits: ccb947924, 444120f2d

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.

Commits: 84c3db58a, 6fe99051c

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.

Commits: 0bc0385eb, 8cd7a309f

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.

Commits: 715c4cbba, 21ceec422

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.

Commits: 90bd11e93, 657c9a632, 35182f035

Migrationschecklista

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

  1. Om du använde FLIR Lepton genom fir, byt till att fånga den som en kamerasensor (fir/Lepton-ändringen).

  2. Ersätt all användning av buzzer med machine.PWM (borttagningen av buzzer).

  3. Ta bort anrop till omv.disable_fb() (borttagningen av omv.disable_fb()).

  4. För image.ImageIO: använd gemena 'r'/'w' och förvänta dig att 'w' trunkerar (ImageIO-ändringen).

  5. För anpassade ML-efterbehandlingsåteranrop: avkvantisera de råa tensorreferenserna själv, eller förlita dig på standardflyttalsvägen (återanropsändringen).

  6. Kontrollera på nytt alla skript som drev sensorklockan för tidskänsliga infångningar (klockändringen).