v3.9.0¶
v3.9.0 є мажорним випуском. Він додає порт nRF з Arduino Nano 33 BLE Sense (камера, модуль PDM audio, ulab, заморожені драйвери датчиків), підтримку теплових датчиків FLIR Lepton та MLX90641 / MLX90621 з суттєво переробленим модулем fir, іоктли автофокусування OV5640 та новий тип потокової передачі image.ImageIO. Застарілий модуль CMSIS-NN nn та старі класи ImageReader / ImageWriter були видалені — ознайомтеся зі змінами, що порушують сумісність, нижче.
Основні нововведення¶
Arduino Nano 33 BLE Sense — новий порт nRF52840 з камерою, модулем PDM
audio,ulabта заморозженими драйверами датчиків.Теплові датчики — підтримка FLIR Lepton, MLX90641 та MLX90621 з переробленим модулем
fir(палітри, дзеркальне відображення, масштабування, радіометрія, FFC).Автофокус OV5640 — нові іоктли
sensor.IOCTL_*_AUTO_FOCUS.image.ImageIO— уніфікований тип потоку зображень (пам’ять або файл; read/write/seek/size/close), що замінюєImageReader/ImageWriter.Порушення сумісності: модуль CMSIS-NN
nnтаimage.ImageReader/image.ImageWriterбули видалені, а поведінкаfind_lines()/firзмінилася — дивіться зміни, що порушують сумісність.
Нові функції¶
Порт nRF / Arduino Nano 33 BLE Sense — новий порт nRF52840 та підтримка плати, з новим модулем
audio(audio.init(),audio.start_streaming(),audio.stop_streaming()), увімкненимulabта заморозженими драйверами датчиківapds9960/lps22h/lsm9ds1/hts221.image.ImageIO— новий тип потоку зображень, що підтримує як потоки в пам’яті, так і файлові потоки черезread()/write()/seek()/size()/close(), плюс приклади читання/запису/пам’яті ImageIO.FLIR Lepton — додано підтримку
FIR_LEPTONзfir.radiometric(),fir.trigger_ffc()таfir.register_vsync_cb().Теплові датчики — додано підтримку термопілюючих датчиків MLX90641 (
FIR_MLX90641) та MLX90621 (офіційні драйвери Melexis).Палітри / орієнтація
fir— додано константиfir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565, іfir.read_ir()тепер приймаєhmirror/vflip/transpose.Автофокус OV5640 — додано
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).Реорганізовано приклади Arduino по директоріях відповідних плат.
Інші зміни та покращення¶
Переключено на стислі повідомлення про помилки MicroPython (коротші рядки винятків); аргумент
typeфункціїfir.init()тепер автоматично визначається через сканування шини I2C, якщо не вказано; винятокxallocтепер повідомляє кількість запитаних байтів; UART 8 увімкнено на Portenta; приклади FIR консолідовано уthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py. Для економії флеш-пам’ятіimage.get_similarity()та вибіркове сканування вимкнено у збірці OpenMV 4, а бібліотека зображень тепер може бути зібрана без файлової системи (для плат без файлової системи).
Виправлення помилок¶
Камера та датчики:
Виправлено розрахунок PCLK OV5640, додано відсутні обробники переривань I2C (усунення зависань передачі I2C), перероблено читання/запис cambus I2C для надійності, зроблено шину I2C Lepton вибираною, переміщено виводи відновлення шини cambus до конфігурації окремих плат, повторна спроба сканування cambus перед невдачею та налагоджено роботу OpenMV PT (спільна шина I2C для Lepton + камера).
Теплові датчики:
Виправлено обчислення максимального значення в
firget_ir()/draw_ir()таimage.get_similarity()(FLT_MIN→-FLT_MAX), обробку AMG8833 12→16 біт та точність MLX90621 (офіційний драйвер Melexis).
Дисплей, аудіо та система:
Переміщено передачі SPI LCD STM32 до зворотних викликів HAL SPI (надійність дисплея), виправлено
audio.init()Nano 33 (HF-генератор + відношення PDM для роботи мікрофона), стан таймера H7 з новим HAL,gc_collectnRF та рання ініціалізація/деініціалізація плати, а також зупинено виведення зайвого повідомлення «uh oh, no preference for overlapping detection» під часfind_apriltags()/find_rects().
Апаратне забезпечення та підтримка плат¶
Arduino Nano 33 BLE Sense — нова плата nRF52840 (камера, PDM-аудіо,
ulab, заморожені драйвери датчиків).Теплові датчики FLIR Lepton, MLX90641 та MLX90621.
Автофокус OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 увімкнено.
Зміни API, що порушують сумісність¶
Видимі користувачу зміни API між v3.8.0 та v3.9.0. Область: C-модулі Python у modules/ та бібліотеки Python у scripts/libraries/.
Кожна зміна позначена рівнем впливу:
мажорний — стосується більшості скриптів, що використовували функцію; необхідно портувати код.
незначний — вузький API; стосується лише скриптів, що його використовували.
поведінковий — той самий API, інші результати; перевірте налаштовані скрипти.
Зміни згруповані за рівнем впливу у такому порядку. Якщо ви просто хочете портувати код, перейдіть до контрольного списку міграції в кінці. Кожен хеш коміту веде до його різниці на GitHub.
Модуль CMSIS-NN nn видалено (мажорний)¶
Модуль CMSIS-NN nn було видалено, включаючи nn.load(), net.forward(), net.search() та допоміжний клас nn_class. Інференс моделей переходить до модуля TensorFlow Lite (tf). Скрипти, що завантажували моделі .network за допомогою nn, необхідно портувати до tf з моделлю TensorFlow Lite.
Коміти: fbc767b36
ImageReader / ImageWriter замінено на image.ImageIO (мажорний)¶
image.ImageReader / image.ImageWriter та їхні методи next_frame() / add_frame() були видалені та замінені новим типом image.ImageIO, який підтримує як потоки в пам’яті, так і файлові потоки через read() / write() / seek() / size() / close(). Код, що використовує старі класи reader/writer, необхідно портувати до image.ImageIO (дивіться перейменовані приклади imageio_read.py / imageio_write.py).
Коміти: 783a78754
Ключове слово scale у fir.draw_ir() видалено (незначний)¶
fir.draw_ir() було переписано поверх нового конвеєра малювання зображень. Ключове слово scale=(min, max) видалено, додано аргументи hint, x_scale, y_scale, roi та позиційні зміщення x/y. Скрипти, що передавали scale=(min, max) до fir.draw_ir(), повинні прибрати це та використовувати нові аргументи.
Коміти: 0a29103b1
Апроксимація find_lines() (поведінковий)¶
image.find_lines() тепер апроксимує величину градієнта як (abs(gx) + abs(gy)) / 2 та пропускає величини нижче 126. Це швидше, але змінює набір виявлених ліній та значення акумулятора, тому повторно перевірте та налаштуйте threshold / theta_margin / rho_margin.
Коміти: 902ae3c98
fir.snapshot() перероблено (поведінковий)¶
fir.snapshot() було суттєво перероблено з новим API на основі ключових слів (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), а вбудовані приклади переписано. Попередня поведінка лише з позиційними аргументами / pixformat змінилася; портуйте скрипти FIR до нової форми з ключовими словами (дивіться оновлені приклади thermopile-shield).
Коміти: 53f2248b8
fir.init() генерує виняток при невдачі (поведінковий)¶
fir.init() тепер генерує виняток (та коректно деініціалізується) при відсутності теплового датчика, замість тихого продовження. Загорніть fir.init() у try / except (або переконайтеся, що датчик підключено) там, де раніше ви покладалися на відсутність генерування винятку.
Коміти: 4b2f972f3
Контрольний список міграції¶
Для чистого порту до v3.9.0 типова робота полягає в:
Портувати інференс моделей CMSIS-NN
nnдо модуля TensorFlow Litetf(видалення nn).Замінити
image.ImageReader/image.ImageWriterнаimage.ImageIO(зміна ImageIO).Прибрати ключове слово
scale=(min, max)зfir.draw_ir()та використати нові аргументи (зміна draw_ir).Повторно налаштувати параметри
find_lines()відносно апроксимованої метрики величини (зміна find_lines).Портувати скрипти FIR до нового API ключових слів
fir.snapshot()(зміна fir.snapshot) та обробити генерування виняткуfir.init()при відсутності датчика (зміна fir.init).
Усі інші скрипти працюють без змін.