v3.9.0

v3.9.0 is een grote release. Het voegt de nRF-port toe met de Arduino Nano 33 BLE Sense (camera, PDM audio-module, ulab, bevroren sensorstuurprogramma’s), brengt FLIR Lepton plus de thermische sensoren MLX90641 / MLX90621 en een sterk herwerkte fir-module, OV5640 autofocus-ioctls, en het nieuwe image.ImageIO-streamingtype. De verouderde CMSIS-NN nn-module en de oude ImageReader / ImageWriter-klassen werden verwijderd — lees hieronder de wijzigingen die niet achterwaarts compatibel zijn.

Hoogtepunten

  • Arduino Nano 33 BLE Sense — nieuwe nRF52840-port met camera, een PDM audio-module, ulab en bevroren sensorstuurprogramma’s.

  • Thermisch — ondersteuning voor FLIR Lepton, MLX90641 en MLX90621 met een herwerkte fir-module (paletten, spiegelen, schalen, radiometrie, FFC).

  • OV5640 autofocus — nieuwe sensor.IOCTL_*_AUTO_FOCUS-ioctls.

  • image.ImageIO — een uniform beeldstreamtype (geheugen of bestand; read/write/seek/size/close) ter vervanging van ImageReader / ImageWriter.

  • Niet achterwaarts compatibel: de CMSIS-NN nn-module en image.ImageReader / image.ImageWriter werden verwijderd, en het gedrag van find_lines() / fir is gewijzigd — zie de wijzigingen die niet achterwaarts compatibel zijn.

Nieuwe functies

  • nRF-port / Arduino Nano 33 BLE Sense — nieuwe nRF52840-port en boardondersteuning, met een nieuwe audio-module (audio.init(), audio.start_streaming(), audio.stop_streaming()), ulab ingeschakeld, en bevroren apds9960- / lps22h- / lsm9ds1- / hts221-sensorstuurprogramma’s.

  • image.ImageIO — een nieuw beeldstreamtype dat zowel geheugen- als bestandsstreams ondersteunt met read() / write() / seek() / size() / close(), plus ImageIO lees-/schrijf-/geheugenvoorbeelden.

  • FLIR LeptonFIR_LEPTON-ondersteuning toegevoegd met fir.radiometric(), fir.trigger_ffc() en fir.register_vsync_cb().

  • Thermische sensoren — ondersteuning toegevoegd voor de MLX90641 (FIR_MLX90641) en MLX90621-thermopile (officiële Melexis-stuurprogramma’s).

  • fir-paletten / -oriëntatie — de constanten fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565 toegevoegd, en fir.read_ir() accepteert nu hmirror / vflip / transpose.

  • OV5640 autofocussensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS toegevoegd (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • De Arduino-voorbeelden gereorganiseerd in mappen per board.

Overige wijzigingen en verbeteringen

  • Overgestapt op gecomprimeerde MicroPython-foutmeldingen (kortere exception-strings); het type-argument van fir.init() detecteert nu automatisch via een I2C-busscan wanneer het wordt weggelaten; de xalloc-exception meldt nu het aantal gevraagde bytes; UART 8 werd ingeschakeld op de Portenta; FIR-voorbeelden werden geconsolideerd in thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. Om in het flashgeheugen te passen, werden image.get_similarity() en selectieve search uitgeschakeld in de OpenMV 4-build, en kan de beeldbibliotheek nu zonder bestandssysteem worden gebouwd (voor boards zonder bestandssysteem).

Bugfixes

Camera en sensoren:

  • De OV5640 PCLK-berekening gerepareerd, ontbrekende I2C IRQ-handlers toegevoegd (waarmee I2C-overdrachthangs worden opgelost), de cambus I2C-lees-/schrijf herwerkt voor betrouwbaarheid, de Lepton I2C-bus selecteerbaar gemaakt, de cambus busherstel-pins naar configuratie per board verplaatst, de cambus-scan eenmaal opnieuw geprobeerd voordat hij faalt, en de OpenMV PT (Lepton + camera gedeelde I2C) werkend gekregen.

Thermisch:

  • De berekening van de maximale waarde in fir get_ir() / draw_ir() en image.get_similarity() gerepareerd (FLT_MIN-FLT_MAX), de AMG8833 12→16-bits afhandeling, en de MLX90621-nauwkeurigheid (officieel Melexis-stuurprogramma).

Display, audio en systeem:

  • STM32 SPI LCD-overdrachten verplaatst naar HAL SPI-callbacks (displaybetrouwbaarheid), de Nano 33 audio.init() gerepareerd (HF-oscillator + PDM-verhouding zodat de microfoon werkt), de H7-timerstatus met de nieuwe HAL, nRF gc_collect en vroege board-init/deinit, en het printen gestopt van de spurious melding “uh oh, no preference for overlapping detection” tijdens find_apriltags() / find_rects().

Hardware- en boardondersteuning

  • Arduino Nano 33 BLE Sense — nieuw nRF52840-board (camera, PDM-audio, ulab, bevroren sensorstuurprogramma’s).

  • FLIR Lepton, MLX90641 en MLX90621 thermische sensoren.

  • OV5640 autofocus — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — UART 8 ingeschakeld.

Niet achterwaarts compatibele API-wijzigingen

Voor gebruikers zichtbare API-breuken tussen v3.8.0 en v3.9.0. Bereik: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is gemarkeerd met de impact ervan:

  • major — treft de meeste scripts die de functie gebruikten; je zult code moeten porteren.

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

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

Wijzigingen zijn in die volgorde per impact gegroepeerd. Als je alleen je code wilt porteren, spring dan naar de migratiechecklist aan het einde. Elke commit-hash linkt naar zijn diff op GitHub.

CMSIS-NN nn-module verwijderd (major)

De CMSIS-NN nn-module werd verwijderd, inclusief nn.load(), net.forward(), net.search() en de nn_class-helper. Modelinferentie verhuist naar de TensorFlow Lite (tf)-module. Scripts die .network-modellen met nn laadden, moeten worden geporteerd naar tf met een TensorFlow Lite-model.

Commits: fbc767b36

ImageReader / ImageWriter vervangen door image.ImageIO (major)

image.ImageReader / image.ImageWriter en hun next_frame() / add_frame()-methoden werden verwijderd en vervangen door het nieuwe image.ImageIO-type, dat zowel geheugen- als bestandsstreams ondersteunt via read() / write() / seek() / size() / close(). Code die de oude reader-/writer-klassen gebruikt, moet worden geporteerd naar image.ImageIO (zie de hernoemde voorbeelden imageio_read.py / imageio_write.py).

Commits: 783a78754

fir.draw_ir() scale-sleutelwoord verwijderd (minor)

fir.draw_ir() werd herschreven bovenop de nieuwe beeldtekenpipeline. Het sleutelwoord scale=(min, max) werd verwijderd, en de argumenten hint, x_scale, y_scale, roi en positionele x/y-offset werden toegevoegd. Scripts die scale=(min, max) aan fir.draw_ir() doorgaven, moeten dit laten vallen en de nieuwe argumenten gebruiken.

Commits: 0a29103b1

find_lines()-benadering (behavior)

image.find_lines() benadert de gradiëntmagnitude nu als (abs(gx) + abs(gy)) / 2 en slaat magnitudes onder 126 over. Dit is sneller, maar verandert de set gedetecteerde lijnen en accumulatorwaarden, dus controleer en herafstel threshold / theta_margin / rho_margin.

Commits: 902ae3c98

fir.snapshot() herwerkt (behavior)

fir.snapshot() werd grondig herwerkt met een nieuwe sleutelwoord-API (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), en de meegeleverde voorbeelden werden herschreven. Het vorige positionele/pixformat-only gedrag is veranderd; porteer FIR-scripts naar de nieuwe sleutelwoordvorm (zie de bijgewerkte thermopile-shield-voorbeelden).

Commits: 53f2248b8

fir.init() werpt een fout bij mislukking (behavior)

fir.init() werpt nu een fout (en de-initialiseert netjes) wanneer de thermische sensor niet wordt gedetecteerd, in plaats van stilzwijgend door te gaan. Wikkel fir.init() in try / except (of zorg dat de sensor is aangesloten) waar je er eerder op vertrouwde dat het geen fout wierp.

Commits: 4b2f972f3

Migratiechecklist

Voor een schone overgang naar v3.9.0 is het typische werk:

  1. Porteer CMSIS-NN nn-modelinferentie naar de TensorFlow Lite tf-module (de nn-verwijdering).

  2. Vervang image.ImageReader / image.ImageWriter door image.ImageIO (de ImageIO-wijziging).

  3. Laat het sleutelwoord scale=(min, max) uit fir.draw_ir() vallen en gebruik de nieuwe argumenten (de draw_ir-wijziging).

  4. Herafstel de parameters van find_lines() tegen de benaderde magnitudemetriek (de find_lines-wijziging).

  5. Porteer FIR-scripts naar de nieuwe sleutelwoord-API van fir.snapshot() (de fir.snapshot-wijziging) en handel het werpen van een fout door fir.init() bij een ontbrekende sensor af (de fir.init-wijziging).

Alle andere scripts draaien ongewijzigd.