v3.9.0

v3.9.0 är en större utgåva. Den lägger till nRF-porten med Arduino Nano 33 BLE Sense (kamera, PDM-audio-modul, ulab, infrysta sensordrivrutiner), introducerar FLIR Lepton samt MLX90641 / MLX90621-värmesensorer och en kraftigt omarbetad fir-modul, autofokus-ioctls för OV5640, och den nya strömningstypen image.ImageIO. Den gamla CMSIS-NN nn-modulen och de gamla klasserna ImageReader / ImageWriter togs bort — läs de brytande ändringarna nedan.

Höjdpunkter

  • Arduino Nano 33 BLE Sense — ny nRF52840-port med kamera, en PDM-audio-modul, ulab och infrysta sensordrivrutiner.

  • Termisk — stöd för FLIR Lepton, MLX90641 och MLX90621 med en omarbetad fir-modul (paletter, spegling, skalning, radiometri, FFC).

  • OV5640-autofokus — nya sensor.IOCTL_*_AUTO_FOCUS-ioctls.

  • image.ImageIO — en enhetlig bildströmstyp (minne eller fil; read/write/seek/size/close) som ersätter ImageReader / ImageWriter.

  • Brytande: CMSIS-NN nn-modulen och image.ImageReader / image.ImageWriter togs bort, och beteendet för find_lines() / fir ändrades — se de brytande ändringarna.

Nya funktioner

  • nRF-port / Arduino Nano 33 BLE Sense — ny nRF52840-port och kortstöd, med en ny audio-modul (audio.init(), audio.start_streaming(), audio.stop_streaming()), ulab aktiverat, och infrysta sensordrivrutiner apds9960 / lps22h / lsm9ds1 / hts221.

  • image.ImageIO — en ny bildströmstyp som stöder både minnes- och filströmmar med read() / write() / seek() / size() / close(), plus exempel för ImageIO läsning/skrivning/minne.

  • FLIR Lepton — lade till FIR_LEPTON-stöd med fir.radiometric(), fir.trigger_ffc() och fir.register_vsync_cb().

  • Värmesensorer — lade till stöd för MLX90641 (FIR_MLX90641) och MLX90621-termopiler (officiella Melexis-drivrutiner).

  • fir-paletter / orientering — lade till konstanterna fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565, och fir.read_ir() accepterar nu hmirror / vflip / transpose.

  • OV5640-autofokus — lade till sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • Omorganiserade Arduino-exemplen i kataloger per kort.

Övriga ändringar och förbättringar

  • Bytte till komprimerade MicroPython-felmeddelanden (kortare undantagssträngar); type-argumentet i fir.init() autodetekterar nu via en I2C-bussavsökning när det utelämnas; xalloc-undantaget rapporterar nu antalet begärda byte; UART 8 aktiverades på Portenta; FIR-exemplen konsoliderades till thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. För att rymmas i flashminnet inaktiverades image.get_similarity() och selektiv sökning i OpenMV 4-bygget, och bildbiblioteket kan nu byggas utan ett filsystem (för kort utan filsystem).

Buggrättningar

Kamera och sensorer:

  • Rättade OV5640:s PCLK-beräkning, lade till saknade I2C IRQ-hanterare (rättar I2C-överföringar som hänger), omarbetade cambus I2C-läsning/skrivning för tillförlitlighet, gjorde Lepton I2C-bussen valbar, flyttade cambus busstyrningsstift för bussåterhämtning till konfiguration per kort, försöker cambus-avsökningen igen en gång innan den misslyckas, och fick OpenMV PT (Lepton + kamera med delad I2C) att fungera.

Termisk:

  • Rättade beräkningen av maxvärdet i fir get_ir() / draw_ir() och image.get_similarity() (FLT_MIN-FLT_MAX), AMG8833 12→16-bitarshantering, och MLX90621-noggrannhet (officiell Melexis-drivrutin).

Skärm, ljud och system:

  • Flyttade STM32 SPI LCD-överföringar till HAL SPI-återanrop (skärmtillförlitlighet), rättade Nano 33 audio.init() (HF-oscillator + PDM-förhållande så att mikrofonen fungerar), H7-timertillståndet med den nya HAL:en, nRF gc_collect och tidig kortinitiering/avinitiering, och slutade skriva ut det felaktiga meddelandet ”uh oh, no preference for overlapping detection” under find_apriltags() / find_rects().

Hårdvaru- och kortstöd

  • Arduino Nano 33 BLE Sense — nytt nRF52840-kort (kamera, PDM-ljud, ulab, infrysta sensordrivrutiner).

  • FLIR Lepton, MLX90641 och MLX90621-värmesensorer.

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

  • Portenta — UART 8 aktiverat.

Brytande API-ändringar

Användarsynliga API-brott mellan v3.8.0 och v3.9.0. Omfattning: Python C-moduler i modules/ och Python-bibliotek i scripts/libraries/.

Varje ändring är märkt med sin påverkan:

  • major — påverkar de flesta skript som använde funktionen; du kommer att behöva porta kod.

  • minor — smalt API; påverkar endast skript som använde det.

  • behavior — samma API, andra resultat; kontrollera finjusterade skript igen.

Ändringarna är grupperade efter påverkan i den ordningen. Om du bara vill porta din kod, hoppa till migreringschecklistan i slutet. Varje commit-hash länkar till sin diff på GitHub.

CMSIS-NN nn-modulen borttagen (major)

CMSIS-NN nn-modulen togs bort, inklusive nn.load(), net.forward(), net.search() och nn_class-hjälparen. Modellinferens flyttar till TensorFlow Lite-modulen (tf). Skript som laddade .network-modeller med nn måste portas till tf med en TensorFlow Lite-modell.

Commits: fbc767b36

ImageReader / ImageWriter ersatta av image.ImageIO (major)

image.ImageReader / image.ImageWriter och deras metoder next_frame() / add_frame() togs bort och ersattes med den nya typen image.ImageIO, som stöder både minnes- och filströmmar via read() / write() / seek() / size() / close(). Kod som använder de gamla reader/writer-klasserna måste portas till image.ImageIO (se de omdöpta exemplen imageio_read.py / imageio_write.py).

Commits: 783a78754

Nyckelordet scale i fir.draw_ir() borttaget (minor)

fir.draw_ir() skrevs om ovanpå den nya bildritningspipelinen. Nyckelordet scale=(min, max) togs bort, och argumenten hint, x_scale, y_scale, roi samt positionella x/y-förskjutningar lades till. Skript som skickade scale=(min, max) till fir.draw_ir() måste ta bort det och använda de nya argumenten.

Commits: 0a29103b1

find_lines()-approximation (behavior)

image.find_lines() approximerar nu gradientmagnituden som (abs(gx) + abs(gy)) / 2 och hoppar över magnituder under 126. Detta är snabbare men ändrar uppsättningen av detekterade linjer och ackumulatorvärden, så kontrollera och finjustera threshold / theta_margin / rho_margin igen.

Commits: 902ae3c98

fir.snapshot() omarbetad (behavior)

fir.snapshot() omarbetades avsevärt med ett nytt nyckelords-API (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), och de medföljande exemplen skrevs om. Det tidigare positionella/pixformat-baserade beteendet ändrades; porta FIR-skript till den nya nyckelordsformen (se de uppdaterade exemplen för thermopile-skölden).

Commits: 53f2248b8

fir.init() ger fel vid misslyckande (behavior)

fir.init() ger nu ett fel (och avinitierar rent) när värmesensorn inte detekteras, i stället för att tyst fortsätta. Omslut fir.init() i try / except (eller säkerställ att sensorn är ansluten) där du tidigare förlitade dig på att den inte gav fel.

Commits: 4b2f972f3

Migreringschecklista

För en ren portning till v3.9.0 är det typiska arbetet:

  1. Porta CMSIS-NN nn-modellinferens till TensorFlow Lite tf-modulen (nn-borttagningen).

  2. Ersätt image.ImageReader / image.ImageWriter med image.ImageIO (ImageIO-ändringen).

  3. Ta bort nyckelordet scale=(min, max) från fir.draw_ir() och använd de nya argumenten (draw_ir-ändringen).

  4. Finjustera find_lines()-parametrarna mot det approximativa magnitudmåttet igen (find_lines-ändringen).

  5. Porta FIR-skript till det nya nyckelords-API:et för fir.snapshot() (fir.snapshot-ändringen) och hantera att fir.init() ger fel vid en saknad sensor (fir.init-ändringen).

Alla andra skript körs oförändrade.