v3.9.0

v3.9.0 je hlavní vydání. Přidává port nRF s deskou Arduino Nano 33 BLE Sense (kamera, PDM modul audio, ulab, zamrazené ovladače senzorů), přináší termální senzory FLIR Lepton plus MLX90641 / MLX90621 a výrazně přepracovaný modul fir, ioctly pro autofokus OV5640 a nový streamovací typ image.ImageIO. Starší CMSIS-NN modul nn a staré třídy ImageReader / ImageWriter byly odstraněny — přečtěte si nekompatibilní změny níže.

Hlavní novinky

  • Arduino Nano 33 BLE Sense — nový port nRF52840 s kamerou, PDM modulem audio, ulab a zamrazenými ovladači senzorů.

  • Termální — podpora FLIR Lepton, MLX90641 a MLX90621 s přepracovaným modulem fir (palety, zrcadlení, škálování, radiometrie, FFC).

  • Autofokus OV5640 — nové ioctly sensor.IOCTL_*_AUTO_FOCUS.

  • image.ImageIO — sjednocený typ obrazového streamu (paměť nebo soubor; read/write/seek/size/close) nahrazující ImageReader / ImageWriter.

  • Nekompatibilní: CMSIS-NN modul nn a image.ImageReader / image.ImageWriter byly odstraněny a chování find_lines() / fir se změnilo — viz nekompatibilní změny.

Nové funkce

  • Port nRF / Arduino Nano 33 BLE Sense — nový port nRF52840 a podpora desky s novým modulem audio (audio.init(), audio.start_streaming(), audio.stop_streaming()), povoleným ulab a zamrazenými ovladači senzorů apds9960 / lps22h / lsm9ds1 / hts221.

  • image.ImageIO — nový typ obrazového streamu podporující jak paměťové, tak souborové streamy s read() / write() / seek() / size() / close(), plus příklady ImageIO read/write/memory.

  • FLIR Lepton — přidána podpora FIR_LEPTON s fir.radiometric(), fir.trigger_ffc() a fir.register_vsync_cb().

  • Termální senzory — přidána podpora termopilu MLX90641 (FIR_MLX90641) a MLX90621 (oficiální ovladače Melexis).

  • Palety / orientace fir — přidány konstanty fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565 a fir.read_ir() nyní přijímá hmirror / vflip / transpose.

  • Autofokus OV5640 — přidány 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).

  • Příklady pro Arduino byly reorganizovány do adresářů podle desek.

Další změny a vylepšení

  • Přechod na komprimované chybové zprávy MicroPythonu (kratší řetězce výjimek); argument type funkce fir.init() nyní při vynechání automaticky detekuje pomocí skenování I2C sběrnice; výjimka xalloc nyní hlásí počet požadovaných bajtů; UART 8 byl povolen na Portentě; příklady FIR byly sloučeny do thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. Aby se vešly do flash paměti, byly image.get_similarity() a selektivní vyhledávání zakázány v buildu pro OpenMV 4 a obrazovou knihovnu lze nyní sestavit bez souborového systému (pro desky bez souborového systému).

Opravy chyb

Kamera a senzory:

  • Opraven výpočet PCLK pro OV5640, přidány chybějící obslužné rutiny přerušení I2C (oprava zaseknutí přenosů I2C), přepracováno čtení/zápis cambus I2C kvůli spolehlivosti, umožněna volitelnost I2C sběrnice Lepton, přesunuty piny pro obnovu cambus sběrnice do konfigurace podle desky, jednou zopakováno skenování cambus před selháním a zprovozněno OpenMV PT (Lepton + kamera sdílející I2C).

Termální:

  • Opraven výpočet maximální hodnoty v fir get_ir() / draw_ir() a image.get_similarity() (FLT_MIN-FLT_MAX), zpracování AMG8833 12→16 bitů a přesnost MLX90621 (oficiální ovladač Melexis).

Displej, audio a systém:

  • Přesunuty přenosy STM32 SPI LCD na HAL SPI callbacky (spolehlivost displeje), opravena audio.init() na Nano 33 (HF oscilátor + PDM poměr, aby mikrofon fungoval), stav časovače H7 s novým HAL, gc_collect nRF a brzká inicializace/deinicializace desky a zastaveno tisknutí falešné zprávy „uh oh, no preference for overlapping detection“ během find_apriltags() / find_rects().

Hardware a podpora desek

  • Arduino Nano 33 BLE Sense — nová deska nRF52840 (kamera, PDM audio, ulab, zamrazené ovladače senzorů).

  • Termální senzory FLIR Lepton, MLX90641 a MLX90621.

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

  • Portenta — povolen UART 8.

Nekompatibilní změny API

Změny API viditelné pro uživatele mezi v3.8.0 a v3.9.0. Rozsah: Python C-moduly v modules/ a Python knihovny v scripts/libraries/.

Každá změna je označena podle svého dopadu:

  • major — ovlivňuje většinu skriptů, které funkci používaly; budete muset přenést kód.

  • minor — úzké API; ovlivňuje pouze skripty, které ho používaly.

  • behavior — stejné API, jiné výsledky; znovu zkontrolujte vyladěné skripty.

Změny jsou seskupeny podle dopadu v tomto pořadí. Pokud chcete pouze přenést svůj kód, přejděte na kontrolní seznam migrace na konci. Každý hash commitu odkazuje na svůj diff na GitHubu.

CMSIS-NN modul nn odstraněn (major)

CMSIS-NN modul nn byl odstraněn, včetně nn.load(), net.forward(), net.search() a pomocné třídy nn_class. Inference modelů se přesouvá do modulu TensorFlow Lite (tf). Skripty, které načítaly modely .network pomocí nn, musí být přeneseny na tf s modelem TensorFlow Lite.

Commity: fbc767b36

ImageReader / ImageWriter nahrazeny image.ImageIO (major)

image.ImageReader / image.ImageWriter a jejich metody next_frame() / add_frame() byly odstraněny a nahrazeny novým typem image.ImageIO, který podporuje jak paměťové, tak souborové streamy pomocí read() / write() / seek() / size() / close(). Kód používající staré třídy reader/writer musí být přenesen na image.ImageIO (viz přejmenované příklady imageio_read.py / imageio_write.py).

Commity: 783a78754

Klíčové slovo scale u fir.draw_ir() odstraněno (minor)

fir.draw_ir() byla přepsána nad novou kreslicí pipeline obrazu. Klíčové slovo scale=(min, max) bylo odstraněno a byly přidány argumenty hint, x_scale, y_scale, roi a poziční offsety x/y. Skripty, které předávaly scale=(min, max) do fir.draw_ir(), ho musí vypustit a použít nové argumenty.

Commity: 0a29103b1

Aproximace find_lines() (behavior)

image.find_lines() nyní aproximuje velikost gradientu jako (abs(gx) + abs(gy)) / 2 a přeskakuje velikosti pod 126. To je rychlejší, ale mění sadu detekovaných čar a hodnoty akumulátoru, takže znovu zkontrolujte a znovu vylaďte threshold / theta_margin / rho_margin.

Commity: 902ae3c98

fir.snapshot() přepracována (behavior)

fir.snapshot() byla podstatně přepracována s novým API klíčových slov (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb) a přibalené příklady byly přepsány. Předchozí poziční chování / chování pouze s pixformat se změnilo; přeneste FIR skripty na novou formu s klíčovými slovy (viz aktualizované příklady pro thermopile-shield).

Commity: 53f2248b8

fir.init() vyvolá výjimku při selhání (behavior)

fir.init() nyní vyvolá výjimku (a čistě se deinicializuje), když není detekován termální senzor, místo aby tiše pokračovala. Obalte fir.init() do try / except (nebo zajistěte, aby byl senzor připojen) tam, kde jste dříve spoléhali na to, že výjimku nevyvolá.

Commity: 4b2f972f3

Kontrolní seznam migrace

Pro čistý přechod na v3.9.0 je typická práce následující:

  1. Přeneste inferenci modelů CMSIS-NN nn na modul TensorFlow Lite tf (odstranění nn).

  2. Nahraďte image.ImageReader / image.ImageWriter za image.ImageIO (změna ImageIO).

  3. Vypusťte klíčové slovo scale=(min, max) z fir.draw_ir() a použijte nové argumenty (změna draw_ir).

  4. Znovu vylaďte parametry find_lines() proti aproximované metrice velikosti (změna find_lines).

  5. Přeneste FIR skripty na nové API klíčových slov fir.snapshot() (změna fir.snapshot) a ošetřete vyvolání výjimky fir.init() při chybějícím senzoru (změna fir.init).

Všechny ostatní skripty běží beze změny.