v4.8.0

v4.8.0 is een grote functierelease. De kernpunten: een gloednieuwe op klassen gebaseerde csi cameramodule met ondersteuning voor meerdere camera’s, het OpenMV N6 (STM32N6) board met een Neural-ART NPU, een NPU-inferentiebackend, GenX320 event-camera RAW event-modus, een nieuwe crc module, een gereorganiseerde ML-nabewerkingsbibliotheek en MicroPython 1.26. Daarnaast worden enkele verouderde API’s verwijderd — de buzzer module en de FLIR Lepton-besturing van de fir module — lees dus de breaking changes hieronder.

Hoogtepunten

  • Nieuwe csi cameramodule. Een op klassen gebaseerde csi.CSI API met ondersteuning voor meerdere gelijktijdige camera’s, geïntroduceerd naast de verouderde sensor module.

  • OpenMV N6. Het STM32N6 board, met een Neural-ART NPU, triple buffering, Soft-CSI en een ToF-module.

  • NPU-inferentie. Een ST Neural-ART (STAI) backend voor hardwareversnelde modelinferentie.

  • GenX320 event-modus. RAW event-uitvoer plus draw_event_histogram() voor het renderen van event-camera’s.

  • Gereorganiseerde ML-nabewerking — leveranciersubpakketten (ml.postprocessing.ultralytics, mediapipe, edgeimpulse, darknet) met nieuwe BlazeFace / BlazePalm / hand- en gezichtslandmark-detectoren.

  • Nieuwe crc module — hardwareversnelde CRC-16 / CRC-32.

  • MicroPython bijgewerkt naar 1.26.0.

  • Breaking: de buzzer module en de Lepton-besturing van de fir module zijn verwijderd (de Lepton is nu een gewone camera). Zie de fir/Lepton-wijziging en het verwijderen van de buzzer.

Nieuwe functies

  • De nieuwe csi cameramodule — een op klassen gebaseerd csi.CSI object met meerdere gelijktijdige camera’s (tot drie op de N6), niet-blokkerende snapshot, aangepaste (w, h) frameformaten en een informatieve print() / repr. Het wordt geïntroduceerd naast de verouderde sensor module (geen rechtstreekse vervanging).

  • crccrc.crc16() en crc.crc32(), hardwareversneld met een softwarematige fallback, op de OpenMV N6 en AE3.

  • image.Image.draw_image() kreeg een transform= keyword (een 2D float ndarray matrix voor affiene/perspectiefvervormingen, GPU-versneld op STM32 en Alif); dezelfde transformatie is beschikbaar bij afbeeldingsconversie.

  • draw_event_histogram() — render event-camera-histogrammen.

  • GenX320 RAW event-moduscsi.IOCTL_GENX320_SET_MODE met csi.GENX320_MODE_HISTO / csi.GENX320_MODE_EVENT, csi.IOCTL_GENX320_READ_EVENTS, csi.IOCTL_GENX320_CALIBRATE, event-typeconstanten en nieuwe voorbeeldscripts.

  • ML — een ST Neural-ART (STAI) NPU-inferentiebackend; ml.Model kreeg een postprocess= keyword (de nabewerker draait nu automatisch binnen predict(), zelfs zonder callback); ml.postprocessing is gereorganiseerd in leveranciersubpakketten — ml.postprocessing.ultralytics (YoloV5, YoloV8), ml.postprocessing.darknet (YoloV2, YoloLC), ml.postprocessing.edgeimpulse (Fomo) en ml.postprocessing.mediapipe (BlazeFace, BlazePalm, HandLandmarks, FaceLandmarks) — de oude snake_case-namen blijven als aliassen bestaan; ml.utils.draw_keypoints() en ml.utils.draw_skeleton() zijn toegevoegd; de meegeleverde ROMFS-modellen zijn uitgebreid (BlazeFace, YOLO-LC, YOLOv8n, palm-/hand-/gezichtslandmarks).

  • audio — MDF digitale-microfooningang op de STM32N6.

  • Display — een SSD1351 OLED-driver en voorbeeld; SPIDisplay controllers kunnen hun init-commando’s overschrijven; de SPI-displayconstructor kreeg hmirror / vflip keywords.

  • On-device profiler — SysTick + Armv8.1-M PMU cyclus-/eventtellers met instrumentatie op functieniveau, leesbaar via de debug-link (pyopenmv kreeg ondersteuning voor profiling en ELF-symbolen).

  • Nieuwe sensorondersteuning — PixArt PS5520; FLIR BOSON op de OpenMV H7 Plus; GenX320 auto-detectie.

Overige wijzigingen en verbeteringen

  • MicroPython bijgewerkt naar 1.26.0.

  • Camera-opstart — de sensorklok is losgekoppeld van de CSI-status, cameradetectie bij het opstarten is sneller (de meest voorkomende configuratie wordt eerst geprobeerd) en de standaardklok van de OpenMV 3 OV7725 is gecorrigeerd.

  • Beeldkwaliteit — softwarematige ISP-gammacorrectie (Alif en STM32) en correctie van slechte pixels (STM32) staan standaard aan; de PAG7936- en PS5520-sensoren kregen automatische witbalansbesturing.

  • Prestatiesimage.Image.to_ndarray() is versneld met Helium SIMD en de FOMO-nabewerker is gevectoriseerd met ulab.

  • FLIR Lepton-driver herschreven om frames asynchroon op de achtergrond te ontvangen — rotatie/transpose werkt nu, tekenen schaalt bilineair op en resetten is sneller.

  • Vastlegdoorvoer — de i.MX RT1062 CSI gebruikt nu volledige DMA-offload en de STM32 N6 heeft een hardware-GPU draw_image().

Bugfixes

Camera en sensoren:

  • RGB565- / GRAYSCALE- / BAYER- / YUV422-modi gecorrigeerd over de STM32-sensoren, PAJ6100 op de OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 en de N6 CSI mono / RGB-YUV-configuratie; de softwarematige testcamera reset nu deterministisch.

  • Automatische witbalans maakt de afbeelding niet langer groen bij lage of variabele framesnelheden (een voortschrijdend gemiddelde van 250 ms vervangt het bemonsteren elke 100 frames) en de luminantieflikkering van de PS5520 is verholpen.

Beeldverwerking:

  • Een renderingfout bij het tekenen van lijnen is verholpen; image.Image.flush() flusht nu de JPEG-buffer van de afbeelding waarop het is aangeroepen; Normalization past nu gemiddelde/standaardafwijking toe op float-invoer; de allocatie van afbeelding-uit-bestand is gecorrigeerd.

Cameravastlegging:

  • Ernstige beeldcorruptie bij niet-JPEG-overdrachten verholpen (de frame-interrupt wordt nu alleen in JPEG-modus ingeschakeld), ondersteuning voor JPEG-modus 3, en DMA-regelgrootte- en kleine-buffer-vastlopers op STM32; VOSPI / Lepton-synchronisatie is betrouwbaarder, met name op de N6.

Diversen:

  • omv.board_id() retourneert de juiste UID op RT1060; YoloV2 crasht niet langer wanneer het wordt geconstrueerd zonder expliciete anchors.

Hardware- en boardondersteuning

  • OpenMV N6 — STM32N6 met een Neural-ART NPU, triple buffering, SPI LCD/TV-uitvoer, Soft-CSI, de tof module en meegeleverde ROMFS-modellen.

  • Arduino GIGA — MIPI DSI-displayuitvoer.

  • Nieuwe sensoren — PixArt PS5520; FLIR BOSON op de OpenMV H7 Plus; GenX320 auto-detectie.

  • OpenMV Pure Thermal — de FLIR Lepton is nu een gewone (secundaire) camerasensor.

  • Alif AE3 — softwarematige ISP-gammacorrectie, de crc module en SPI-fixes.

Breaking API-wijzigingen

Voor gebruikers zichtbare API-breaks tussen v4.7.0 en v4.8.0. Reikwijdte: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is gemarkeerd met de impact:

  • major — de meeste scripts die het gebruikten moeten worden aangepast.

  • minor — beperkte API; treft alleen scripts die het gebruikten.

  • behavior — dezelfde API, andere resultaten; controleer afgestemde scripts opnieuw.

  • tooling — treft alleen hosttools / bouwen vanaf de broncode.

Wijzigingen zijn in die volgorde gegroepeerd op impact — eerst major, daarna minor, behavior en tooling. Wil je alleen je code overzetten, ga dan naar de migratiechecklist aan het einde voor een beknopte takenlijst. Elke commit-hash linkt naar de bijbehorende diff op GitHub.

FLIR Lepton verplaatst weg van de fir module (major)

De FLIR Lepton wordt nu aangestuurd als een gewone camerasensor in plaats van via de fir module. De Lepton-besturing is verwijderd uit fir: het FIR_LEPTON type en de methoden radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() en trigger_ffc() zijn verdwenen. Leg de Lepton vast zoals elke andere camera (deze verschijnt als secundaire sensor op de OpenMV Pure Thermal); het Pure Thermal-voorbeeld is herschreven naar de nieuwe API. De niet-Lepton fir sensoren (Grid-EYE, MLX, AMG8833) zijn ongewijzigd.

Commits: bacfb7aeb, 117710566, 592a22902, 1a614202e

buzzer module verwijderd (minor)

De buzzer module is verwijderd uit de STM32- en i.MX RT-ports. Stuur de buzzer in plaats daarvan aan met machine.PWM; er is een Pure Thermal-buzzervoorbeeld met PWM toegevoegd.

Commits: ccb947924, 444120f2d

omv.disable_fb() verwijderd (minor)

De functie omv.disable_fb() is verwijderd; framebuffer-streaming wordt nu via de camera-API geregeld. De verouderde RPC-desktopscripts die ervan afhingen zijn eveneens verwijderd.

Commits: 84c3db58a, 6fe99051c

csi is nieuw — de API is nog niet bevroren (minor)

De csi module wordt geïntroduceerd in v4.8.0 en de API is tijdens de release geëvolueerd: csi.fb() is verwijderd, en csi.CSI.snapshot() (image=...) vereist nu een muteerbare afbeelding en tekent/schaalt het vastgelegde frame erin in plaats van een ruwe deep copy te maken. Vroege gebruikers van de nieuwe module moeten opnieuw testen; de verouderde sensor API is niet beïnvloed.

Commits: 0bc0385eb, 8cd7a309f

image.ImageIO stream-modus en close() (minor)

image.ImageIO — het mode argument accepteert nu alleen kleine letters 'r' / 'w' (hoofdletters worden geweigerd met een bijgewerkte foutmelding), en openen met 'w' kapt het bestand altijd af / maakt het opnieuw aan in plaats van een bestaande stream te behouden. ImageIO.close() is nu idempotent (het sluiten van een reeds gesloten stream genereert geen fout meer) en retourneert None in plaats van het stream-object.

Commits: 715c4cbba, 21ceec422

BlazeFace / BlazePalm retourwaarde (minor)

De BlazeFace en BlazePalm nabewerkers (nieuw in deze release) retourneren nu één enkele begrenzingsvaklijst in plaats van de volledige lijst per klasse — aanroepers indexeren het resultaat direct in plaats van met [0].

Commit: 75e16b573

ML-nabewerkingscallback ontvangt ruwe tensoren (behavior)

Een ml.Model predict() nabewerkingscallback ontvangt nu de ruwe (gekwantiseerde) uitvoertensor-referenties in plaats van vooraf geconverteerde float ndarrays — dit voorkomt geheugenuitputting bij grote modellen. Als er geen callback wordt opgegeven, wordt de float ndarray nog steeds geretourneerd. Aangepaste callbacks moeten de tensoren zelf dekwantiseren (de ingebouwde nabewerkers doen dit al).

Commit: 84e6ee650

Cameraklok losgekoppeld van CSI-status (behavior)

De sensorklok is nu onafhankelijk van de CSI-status. set_clock / set_frequency herconfigureert de klok alleen wanneer de gevraagde frequentie meer dan een tolerantie verschilt, en get_clk_frequency neemt een boolean om de exacte (in plaats van de nominale) frequentie te retourneren. De standaardklok is 24 MHz op de OpenMV N6 en AE3, dus bij het opstarten is geen expliciete set_clock() nodig. Scripts die de klok schakelden voor timinggevoelige vastleggingen moeten hun aannames opnieuw controleren.

Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca

USB-debugprotocol en firmwaretargets (tooling)

Niets hiervan treft MicroPython-scripts. Verouderde USBDBG-commando’s (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) zijn verwijderd en niet-ondersteunde commando’s van oudere IDE’s worden nu geflusht in plaats van TinyUSB-boards bij het verbinden te laten crashen; het verouderde STM32 UVC-firmwaretarget is verwijderd. Oude hosttools moeten worden bijgewerkt; zie de geschiedenis van de firmware-repository voor details.

Commits: 90bd11e93, 657c9a632, 35182f035

Migratiechecklist

Voor een schone overzetting naar v4.8.0 is het typische werk:

  1. Als je de FLIR Lepton via fir gebruikte, schakel dan over op het vastleggen ervan als camerasensor (de fir/Lepton-wijziging).

  2. Vervang elk gebruik van buzzer door machine.PWM (het verwijderen van de buzzer).

  3. Verwijder omv.disable_fb() aanroepen (het verwijderen van omv.disable_fb()).

  4. Voor image.ImageIO: gebruik kleine letters 'r'/'w' en verwacht dat 'w' afkapt (de ImageIO-wijziging).

  5. Voor aangepaste ML-nabewerkingscallbacks: dekwantiseer de ruwe tensor-referenties zelf, of vertrouw op het standaard float-pad (de callback-wijziging).

  6. Controleer elk script opnieuw dat de sensorklok aanstuurde voor timinggevoelige vastleggingen (de klokwijziging).