v3.9.0

A v3.9.0 egy jelentős kiadás. Hozzáadja az nRF portot az Arduino Nano 33 BLE Sense lappal (kamera, PDM audio modul, ulab, befagyasztott érzékelővezérlők), bevezeti a FLIR Lepton, valamint az MLX90641 / MLX90621 hőérzékelőket és egy alaposan átdolgozott fir modult, az OV5640 automatikus fókusz ioctl-jeit, valamint az új image.ImageIO streamelési típust. A régi CMSIS-NN nn modult és a régi ImageReader / ImageWriter osztályokat eltávolították — olvasd el az alábbi törést okozó változásokat.

Kiemelt változások

  • Arduino Nano 33 BLE Sense — új nRF52840 port kamerával, PDM audio modullal, ulab támogatással és befagyasztott érzékelővezérlőkkel.

  • Hőkamera — FLIR Lepton, MLX90641 és MLX90621 támogatás egy átdolgozott fir modullal (paletták, tükrözés, skálázás, radiometria, FFC).

  • OV5640 automatikus fókusz — új sensor.IOCTL_*_AUTO_FOCUS ioctl-ek.

  • image.ImageIO — egységes képstream-típus (memória vagy fájl; read/write/seek/size/close), amely felváltja az ImageReader / ImageWriter osztályokat.

  • Törést okozó: a CMSIS-NN nn modult, valamint az image.ImageReader / image.ImageWriter osztályokat eltávolították, és a find_lines() / fir viselkedése megváltozott — lásd a törést okozó változásokat.

Új funkciók

  • nRF port / Arduino Nano 33 BLE Sense — új nRF52840 port és lapkatámogatás, új audio modullal (audio.init(), audio.start_streaming(), audio.stop_streaming()), engedélyezett ulab modullal, valamint befagyasztott apds9960 / lps22h / lsm9ds1 / hts221 érzékelővezérlőkkel.

  • image.ImageIO — új képstream-típus, amely a memória- és fájlstreameket egyaránt támogatja a read() / write() / seek() / size() / close() metódusokon keresztül, valamint ImageIO olvasási/írási/memória-példákkal.

  • FLIR LeptonFIR_LEPTON támogatás hozzáadva a fir.radiometric(), fir.trigger_ffc() és fir.register_vsync_cb() függvényekkel.

  • Hőérzékelők — MLX90641 (FIR_MLX90641) és MLX90621 termoelemes támogatás hozzáadva (hivatalos Melexis vezérlők).

  • fir paletták / orientáció — hozzáadva a fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565 konstansok, és a fir.read_ir() mostantól elfogadja a hmirror / vflip / transpose argumentumokat.

  • OV5640 automatikus fókusz — hozzáadva a 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).

  • Az Arduino példák lapkánkénti könyvtárakba lettek átszervezve.

Egyéb változások és fejlesztések

  • Áttérés a tömörített MicroPython hibaüzenetekre (rövidebb kivételsztringek); a fir.init() type argumentuma mostantól I2C busz-szkennelés útján automatikusan érzékeli a típust, ha kihagyják; az xalloc kivétel mostantól jelenti a kért bájtok számát; a UART 8 engedélyezve lett a Portentán; a FIR példák a thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py fájlokba lettek összevonva. A flashbe való beférés érdekében az image.get_similarity() és a szelektív keresés le lett tiltva az OpenMV 4 buildben, a képkönyvtár pedig mostantól fájlrendszer nélkül is buildelhető (fájlrendszer nélküli lapokhoz).

Hibajavítások

Kamera és érzékelők:

  • Javítva az OV5640 PCLK számítás, hozzáadva a hiányzó I2C IRQ-kezelők (megszüntetve az I2C átviteli akadásokat), átdolgozva a cambus I2C olvasás/írás a megbízhatóság érdekében, a Lepton I2C busz választhatóvá téve, a cambus busz-helyreállítási lábak lapkánkénti konfigurációba áthelyezve, a cambus szkennelés egyszeri újrapróbálása a hiba előtt, valamint az OpenMV PT (Lepton + kamera megosztott I2C) működésre bírva.

Hőkamera:

  • Javítva a maximumérték-számítás a fir get_ir() / draw_ir() és az image.get_similarity() esetén (FLT_MIN-FLT_MAX), az AMG8833 12→16 bites kezelése, valamint az MLX90621 pontossága (hivatalos Melexis vezérlő).

Kijelző, hang és rendszer:

  • Az STM32 SPI LCD átvitelek áthelyezve a HAL SPI visszahívásokra (kijelző-megbízhatóság), javítva a Nano 33 audio.init() (HF oszcillátor + PDM arány, hogy a mikrofon működjön), a H7 időzítő állapota az új HAL-lal, az nRF gc_collect és a korai lapinicializálás/deinicializálás, valamint megszüntetve a felesleges „uh oh, no preference for overlapping detection” üzenet kiírása a find_apriltags() / find_rects() során.

Hardver- és lapkatámogatás

  • Arduino Nano 33 BLE Sense — új nRF52840 lap (kamera, PDM hang, ulab, befagyasztott érzékelővezérlők).

  • FLIR Lepton, MLX90641 és MLX90621 hőérzékelők.

  • OV5640 automatikus fókusz — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — UART 8 engedélyezve.

Törést okozó API-változások

Felhasználó által észlelhető API-törések a v3.8.0 és a v3.9.0 között. Hatókör: Python C-modulok a modules/ mappában és Python könyvtárak a scripts/libraries/ mappában.

Minden változás a hatása szerint van címkézve:

  • major — a legtöbb szkriptet érinti, amely a funkciót használta; kódot kell átültetned.

  • minor — szűk API; csak az azt használó szkripteket érinti.

  • behavior — ugyanaz az API, más eredmények; ellenőrizd újra a hangolt szkripteket.

A változások a hatás szerint, ebben a sorrendben vannak csoportosítva. Ha csak a kódodat szeretnéd átültetni, ugorj a migrációs ellenőrzőlistához a végén. Minden commit hash a hozzá tartozó diffre mutat a GitHubon.

CMSIS-NN nn modul eltávolítva (major)

A CMSIS-NN nn modul eltávolításra került, beleértve az nn.load(), net.forward(), net.search() függvényeket és az nn_class segédet. A modellkövetkeztetés átkerül a TensorFlow Lite (tf) modulba. Azokat a szkripteket, amelyek .network modelleket töltöttek be az nn modullal, át kell ültetni a tf modulra egy TensorFlow Lite modellel.

Commitok: fbc767b36

Az ImageReader / ImageWriter helyett image.ImageIO (major)

Az image.ImageReader / image.ImageWriter osztályok és azok next_frame() / add_frame() metódusai eltávolításra kerültek, és az új image.ImageIO típus váltotta fel őket, amely a memória- és fájlstreameket egyaránt támogatja a read() / write() / seek() / size() / close() metódusokon keresztül. A régi reader/writer osztályokat használó kódot át kell ültetni a image.ImageIO típusra (lásd az átnevezett imageio_read.py / imageio_write.py példákat).

Commitok: 783a78754

fir.draw_ir() scale kulcsszó eltávolítva (minor)

A fir.draw_ir() újraírásra került az új képrajzolási folyamatra építve. A scale=(min, max) kulcsszó eltávolításra került, és hozzáadásra kerültek a hint, x_scale, y_scale, roi argumentumok, valamint a pozicionális x/y eltolási argumentumok. Azoknak a szkripteknek, amelyek a scale=(min, max) argumentumot adták át a fir.draw_ir() függvénynek, el kell hagyniuk azt, és az új argumentumokat kell használniuk.

Commitok: 0a29103b1

find_lines() közelítés (behavior)

Az image.find_lines() mostantól a gradiens nagyságát (abs(gx) + abs(gy)) / 2 formában közelíti, és kihagyja a 126 alatti nagyságokat. Ez gyorsabb, de megváltoztatja az észlelt vonalak halmazát és az akkumulátor-értékeket, ezért ellenőrizd újra és hangold újra a threshold / theta_margin / rho_margin értékeket.

Commitok: 902ae3c98

fir.snapshot() átdolgozva (behavior)

A fir.snapshot() jelentősen átdolgozásra került egy új kulcsszavas API-val (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), és a mellékelt példák újraírásra kerültek. A korábbi pozicionális / kizárólag pixformat alapú viselkedés megváltozott; ültesd át a FIR szkripteket az új kulcsszavas formára (lásd a frissített thermopile-shield példákat).

Commitok: 53f2248b8

fir.init() hibát dob meghibásodáskor (behavior)

A fir.init() mostantól hibát dob (és tisztán deinicializál), ha a hőérzékelő nem észlelhető, a néma folytatás helyett. Csomagold a fir.init() hívást try / except blokkba (vagy biztosítsd, hogy az érzékelő csatlakoztatva legyen) ott, ahol korábban arra támaszkodtál, hogy nem dob hibát.

Commitok: 4b2f972f3

Migrációs ellenőrzőlista

A v3.9.0-ra való tiszta átültetéshez a tipikus teendők a következők:

  1. Ültesd át a CMSIS-NN nn modellkövetkeztetést a TensorFlow Lite tf modulra (az nn eltávolítása).

  2. Cseréld le az image.ImageReader / image.ImageWriter osztályokat a image.ImageIO típusra (az ImageIO változás).

  3. Hagyd el a scale=(min, max) kulcsszót a fir.draw_ir() függvényből, és használd az új argumentumokat (a draw_ir változás).

  4. Hangold újra a find_lines() paramétereit a közelítő nagyság-metrika ellenében (a find_lines változás).

  5. Ültesd át a FIR szkripteket az új fir.snapshot() kulcsszavas API-ra (a fir.snapshot változás), és kezeld azt, hogy a fir.init() hibát dob hiányzó érzékelő esetén (a fir.init változás).

Minden más szkript változtatás nélkül fut.