v4.8.0¶
v4.8.0 — значний реліз із новими функціями. Ключові нововведення: повністю новий клас-орієнтований модуль csi для роботи з камерою та підтримкою кількох камер одночасно, плата OpenMV N6 (STM32N6) з Neural-ART NPU, бекенд інференсу на NPU, режим RAW-подій для event-камери GenX320, новий модуль crc, реорганізована бібліотека постобробки ML та MicroPython 1.26. Також видалено деякі застарілі API — модуль buzzer і керування FLIR Lepton у модулі fir — тому ознайомтесь із критичними змінами нижче.
Основні нововведення¶
Новий модуль
csiдля камери. Клас-орієнтований APIcsi.CSIз підтримкою кількох одночасних камер, представлений поряд із застарілим модулемsensor.OpenMV N6. Плата STM32N6 з Neural-ART NPU, потрійною буферизацією, Soft-CSI та модулем ToF.
Інференс на NPU. Бекенд ST Neural-ART (STAI) для апаратно-прискореного інференсу моделей.
Режим подій GenX320. RAW-вивід подій і
draw_event_histogram()для відображення даних event-камери.Реорганізована постобробка ML — постачальницькі підпакети (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) із новими детекторами BlazeFace / BlazePalm, а також ключових точок долоні й обличчя.Новий модуль
crc— апаратно-прискорений CRC-16 / CRC-32.MicroPython оновлено до версії 1.26.0.
Критична зміна: модуль
buzzerі керування Lepton через модульfirвидалено (Lepton тепер є звичайною камерою). Дивіться зміну fir/Lepton і видалення buzzer.
Нові функції¶
Новий модуль
csiдля камери — клас-орієнтований об’єктcsi.CSIіз підтримкою кількох одночасних камер (до трьох на N6), неблокуючим знімком, довільними розмірами кадрів(w, h)і зручним виведенням черезprint()/ repr. Він представлений поряд із застарілим модулемsensorі не є його повним замінником.crc—crc.crc16()іcrc.crc32(), апаратно-прискорені з програмним резервним варіантом, на платах OpenMV N6 та AE3.image.Image.draw_image()отримав ключове словоtransform=(двовимірна матрицяndarrayз числами з рухомою крапкою для афінних/перспективних перетворень із апаратним прискоренням на STM32 та Alif); те саме перетворення доступне при конвертації зображень.draw_event_histogram()— відображення гістограм event-камери.Режим RAW-подій GenX320 —
csi.IOCTL_GENX320_SET_MODEізcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, константи типів подій і нові приклади скриптів.ML — бекенд NPU ST Neural-ART (STAI);
ml.Modelотримав ключове словоpostprocess=(постпроцесор тепер автоматично запускається всерединіpredict()навіть без зворотного виклику);ml.postprocessingреорганізовано у постачальницькі підпакети —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo), таml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — старі назви у стилі snake_case залишаються як псевдоніми; доданоml.utils.draw_keypoints()іml.utils.draw_skeleton(); розширено вбудовані моделі ROMFS (BlazeFace, YOLO-LC, YOLOv8n, мітки долоні/руки/обличчя).audio— цифровий вхід мікрофона MDF на STM32N6.Дисплей — драйвер OLED SSD1351 з прикладом; контролери
SPIDisplayможуть перевизначати команди ініціалізації; конструктор SPI-дисплея отримав ключові словаhmirror/vflip.Профілювальник на пристрої — лічильники циклів/подій SysTick + Armv8.1-M PMU з інструментуванням на рівні функцій, що зчитуються через лінк налагодження (
pyopenmvотримав підтримку профілювання та ELF-символів).Нова підтримка датчиків — PixArt PS5520; FLIR BOSON на OpenMV H7 Plus; автовизначення GenX320.
Інші зміни та вдосконалення¶
MicroPython оновлено до версії 1.26.0.
Запуск камери — тактовий сигнал датчика відокремлено від стану CSI, виявлення камери під час завантаження стало швидшим (спершу перевіряється найпоширеніша конфігурація), а стандартну тактову частоту OV7725 для OpenMV 3 виправлено.
Якість зображення — програмна гамма-корекція ISP (Alif та STM32) і корекція бракованих пікселів (STM32) увімкнені за замовчуванням; датчики PAG7936 і PS5520 отримали керування автоматичним балансом білого.
Продуктивність —
image.Image.to_ndarray()прискорено за допомогою Helium SIMD, а постпроцесор FOMO векторизовано з ulab.Драйвер FLIR Lepton переписано для асинхронного прийому кадрів у фоновому режимі — тепер коректно працюють обертання/
transpose, відображення використовує білінійне масштабування, а скидання відбувається швидше.Пропускна здатність захоплення — CSI i.MX RT1062 тепер використовує повне розвантаження DMA, а STM32 N6 має апаратний GPU
draw_image().
Виправлення помилок¶
Камера та датчики:
Виправлено режими RGB565 / GRAYSCALE / BAYER / YUV422 для датчиків STM32, PAJ6100 на OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 і конфігурацію mono / RGB-YUV N6 CSI; програмна тестова камера тепер скидається детерміновано.
Автоматичний баланс білого більше не робить зображення зеленуватим при низькій або змінній частоті кадрів (250 мс ковзне середнє замінює вибірку кожні 100 кадрів), а миготіння яскравості PS5520 виправлено.
Обробка зображень:
Виправлено артефакт відображення ліній;
image.Image.flush()тепер очищає JPEG-буфер саме того зображення, на якому його викликано;Normalizationтепер коректно застосовує mean/stdev до дійсних вхідних даних; виправлено виділення пам’яті для зображень із файлу.
Захоплення кадрів:
Виправлено серйозне пошкодження зображень при передачах без JPEG (переривання кадру тепер вмикається лише в режимі JPEG), підтримку JPEG-режиму 3, а також блокування через розмір рядка DMA і малий буфер на STM32; синхронізація VOSPI / Lepton стала надійнішою, зокрема на N6.
Різне:
omv.board_id()повертає правильний UID на RT1060;YoloV2більше не аварійно завершується при конструюванні без явних якорів.
Апаратне забезпечення та підтримка плат¶
OpenMV N6 — STM32N6 з Neural-ART NPU, потрійною буферизацією, SPI LCD/TV-виходом, Soft-CSI, модулем
tofі вбудованими моделями ROMFS.Arduino GIGA — виведення зображення на дисплей MIPI DSI.
Нові датчики — PixArt PS5520; FLIR BOSON на OpenMV H7 Plus; автовизначення GenX320.
OpenMV Pure Thermal — FLIR Lepton тепер є звичайним (вторинним) датчиком камери.
Alif AE3 — програмна гамма-корекція ISP, модуль
crcі виправлення SPI.
Критичні зміни API¶
Видимі для користувача зміни API між v4.7.0 та v4.8.0. Охоплення: C-модулі Python у modules/ і бібліотеки Python у scripts/libraries/.
Кожна зміна позначена її впливом:
major (значна) — більшість скриптів, що використовували цей API, потребують редагування.
minor (незначна) — вузький API; стосується лише скриптів, що його використовували.
behavior (поведінка) — той самий API, інші результати; повторно перевірте налаштовані скрипти.
tooling (інструменти) — стосується лише інструментів хоста / збірки з вихідних кодів.
Зміни згруповані за впливом у тому самому порядку — major спершу, потім minor, behavior і tooling. Якщо ви просто хочете перенести код, перейдіть до контрольного списку міграції наприкінці для стислого переліку завдань. Кожен хеш коміту посилається на його різницю на GitHub.
FLIR Lepton перенесено з модуля fir (major)¶
FLIR Lepton тепер керується як звичайний датчик камери, а не через модуль fir. Керування Lepton видалено з fir: тип FIR_LEPTON та методи radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() і trigger_ffc() видалено. Захоплюйте зображення з Lepton як з будь-якої іншої камери (він з’являється як вторинний датчик на OpenMV Pure Thermal); приклад для Pure Thermal переписано під новий API. Датчики fir, що не є Lepton (Grid-EYE, MLX, AMG8833), не змінилися.
Модуль buzzer видалено (minor)¶
Модуль buzzer видалено з портів STM32 та i.MX RT. Замість нього використовуйте machine.PWM; додано приклад зумера для Pure Thermal із використанням PWM.
omv.disable_fb() видалено (minor)¶
Функцію omv.disable_fb() видалено; керування потоковою передачею кадрового буфера тепер здійснюється через API камери. Також видалено застарілі RPC-скрипти для ПК, що покладалися на неї.
csi — новий модуль, його API ще не зафіксовано (minor)¶
Модуль csi представлено у v4.8.0, і його API змінювався під час релізу: csi.fb() видалено, а csi.CSI.snapshot() (image=...) тепер вимагає змінюване зображення і малює/масштабує захоплений кадр у нього, замість виконання прямого глибокого копіювання. Ранні користувачі нового модуля повинні повторно протестувати свій код; застарілий API sensor не зазнав змін.
Режим потоку image.ImageIO та close() (minor)¶
image.ImageIO — аргумент mode тепер приймає лише рядки в нижньому регістрі 'r' / 'w' (верхній регістр відхиляється з оновленим повідомленням про помилку), а відкриття з 'w' завжди скорочує/відтворює файл замість збереження існуючого потоку. ImageIO.close() тепер є ідемпотентним (закриття вже закритого потоку більше не викидає виняток) і повертає None замість об’єкта потоку.
Повернуте значення BlazeFace / BlazePalm (minor)¶
Постпроцесори BlazeFace і BlazePalm (нові в цьому релізі) тепер повертають один список обмежувальних прямокутників замість повного списку на клас — виклики індексують результат безпосередньо, без [0].
Коміт: 75e16b573
Зворотний виклик постпроцесора ML отримує сирі тензори (behavior)¶
Зворотний виклик постобробки ml.Model predict() тепер отримує сирі (квантизовані) посилання на вихідні тензори замість попередньо конвертованих ndarrays із числами з рухомою крапкою — це запобігає вичерпанню пам’яті на великих моделях. Якщо зворотний виклик не задано, ndarray із числами з рухомою крапкою, як і раніше, повертається. Власні зворотні виклики повинні самостійно деквантизувати тензори (вбудовані постпроцесори вже це роблять).
Коміт: 84e6ee650
Тактовий сигнал камери відокремлено від стану CSI (behavior)¶
Тактовий сигнал датчика тепер незалежний від стану CSI. set_clock / set_frequency перелаштовує тактовий сигнал лише тоді, коли запитувана частота відрізняється більше ніж на допустиме відхилення, а get_clk_frequency приймає булевий аргумент для повернення точної (а не номінальної) частоти. Стандартна тактова частота — 24 МГц на OpenMV N6 та AE3, тому явний виклик set_clock() при завантаженні не потрібен. Скрипти, що перемикали тактовий сигнал для чутливих до часу захоплень, слід повторно перевірити.
Коміти: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
Протокол USB-налагодження та цілі мікропрограми (tooling)¶
Це не впливає на скрипти MicroPython. Застарілі команди USBDBG (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) видалено, а непідтримувані команди від старіших IDE тепер очищуються буфером замість аварійного завершення роботи плат TinyUSB при підключенні; застарілий цільовий UVC-мікропрограму STM32 видалено. Старіші інструменти хоста слід оновити; подробиці дивіться в репозиторії мікропрограми.
Контрольний список міграції¶
Для чистого переходу на v4.8.0 зазвичай потрібно виконати:
Якщо ви використовували FLIR Lepton через
fir, перейдіть на захоплення його як датчика камери (зміна fir/Lepton).Замініть будь-яке використання
buzzerнаmachine.PWM(видалення buzzer).Видаліть виклики
omv.disable_fb()(видалення omv.disable_fb()).Для
image.ImageIO: використовуйте нижній регістр'r'/'w'і очікуйте, що'w'скоротить файл (зміна ImageIO).Для власних зворотних викликів постобробки ML: деквантизуйте сирі посилання на тензори самостійно або покладайтеся на стандартний шлях із числами з рухомою крапкою (зміна зворотного виклику).
Повторно перевірте будь-який скрипт, що керував тактовим сигналом датчика для чутливих до часу захоплень (зміна тактового сигналу).