v4.6.0

v4.6.0 — крупный функциональный выпуск. Главное в нём: модуль камеры переименован из sensor в csi (с сохранением обратно совместимого псевдонима sensor), новый модуль ml.postprocessing, поддержка событийного датчика Prophesee GenX320, PAG7936 и тепловизионных камер FLIR Boson, новый загрузчик DFU на базе TinyUSB, аппаратное ускорение Nema GPU и MicroPython 1.24. Также изменён диапазон alpha при рисовании, поэтому ознакомьтесь с обратно несовместимыми изменениями ниже.

Основные моменты

  • sensor теперь также csi — модуль камеры был переименован в csi; sensor остаётся обратно совместимым псевдонимом (изменять код пока не требуется).

  • Новый модуль ml.postprocessingfomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess.

  • Новые датчики — событийная камера Prophesee GenX320, PAG7936 и тепловизоры FLIR Boson 320/640.

  • Новый загрузчик DFU — стандартный загрузчик DFU на базе TinyUSB заменяет устаревший CDC-загрузчик на всех платах.

  • Nema GPU — ускоренная 2D/векторная графика на STM32.

  • MicroPython обновлён до 1.24.0.

  • Обратно несовместимое изменение: диапазон alpha при рисовании изменён с 0–256 на 0–255 (см. изменение диапазона alpha).

Новые возможности

  • ml.postprocessing — новый модуль декодирования выходных данных модели: декодер FOMO (fomo_postprocess, find_blobs + NMS, настраиваемый threshold) и yolo_v2_postprocess / yolo_v5_postprocessthreshold, anchors, nms_threshold, nms_sigma).

  • Визуализация событийной камеры — новые методы Image.to_evt_dark() / Image.to_evt_light() и цветовые палитры PALETTE_EVT_DARK / PALETTE_EVT_LIGHT.

  • Визуализация глубины — новый метод Image.to_depth() и цветовая палитра PALETTE_DEPTH (для плат с поддержкой ToF).

  • Интроспекция датчика — новый ioctl IOCTL_GET_RGB_STATS, возвращающий кортеж канальной статистики (R, Gb, Gr, B).

  • Предустановки смещений GenX320 — новый ioctl IOCTL_GENX320_SET_BIASES с предустановками GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED.

  • omv.debug_mode() — новая функция для проверки того, активен ли USB-интерфейс отладки.

  • Nema GPU — интеграция драйвера NemaGFX/NemaVG для Cortex-M55 на STM32, с прямым GPU-ускорением на месте для draw_image.

  • PAG7936 — добавлены вывод цветовых полос, автоэкспозиция / автоусиление, спящий режим и режим MIPI.

Прочие изменения и улучшения

  • MicroPython обновлён до 1.24.0; ulab обновлён до 6.7.3 (добавлено keepdims).

  • Общий загрузочный скрипт — STM32 / i.MX RT / RP2 теперь используют общий _boot.py, который автоматически создаёт файловую систему на флеш-памяти/SD с заданными по умолчанию main.py и README.txt и освобождает временные глобальные переменные при запуске.

  • Подготовка к STM32N6 — базовая поддержка STM32N6, драйвер XSPI, общий драйвер MPU и подписывание прошивки/загрузчика на STM32.

  • ВМ с computed-goto — включена на STM32 и nRF для ускорения интерпретатора.

Исправления ошибок

Камера и датчики:

  • Исправлен расчёт PCLK/экспозиции для OV5640 (две полосы MIPI, исправленная таблица делителей).

  • Вариант MT9V0xx с Bayer-CFA теперь принимает RGB565/BAYER/GRAYSCALE и выводит корректные необработанные данные Bayer вместо ошибки.

  • Включена коррекция виньетирования объектива для PAG7936 и исправлен сдвиг HD-изображения; set_framerate() теперь ограничивается для каждого разрешения.

  • Исправлен тепловизионный захват FLIR Lepton на i.MX RT1060 (исправлены VoSPI CPOL/CPHA), и снимки Lepton теперь возвращают конкретные коды ошибок.

  • Исправлено округление частоты GenX320.

Обработка изображений:

  • Исправлено повреждение памяти в to_ndarray() для изображений в оттенках серого.

  • Исправлено предсказание границ дебайеризации при преобразовании Bayer→RGB/оттенки серого.

  • Исправлен transpose в draw_image() на платах без SDRAM (буфер с разбиением на части).

  • Исправлена обработка булевых аргументов в Image.binary() и флага load_to_fb класса ml.Model.

Система:

  • Исправлена конфигурация выводов SPI только для приёма / только для передачи на STM32 и i.MX RT.

  • Буферы DMA Ethernet на Portenta H7 перемещены в SRAM3, чтобы Ethernet работал.

  • Исправлена потеря символа в текстовом выводе отладочного канала через USB; размеры динамического выделения памяти для ML округляются вверх во избежание недостаточного размера буферов модели.

Поддержка оборудования и плат

  • Prophesee GenX320 — событийный датчик зрения (STM32F7 + i.MX RT1060).

  • PAG7936 — датчик (с режимом MIPI).

  • FLIR Boson 320/640 — тепловизионные камеры (драйвер IDD 4).

  • Nema GPU — ускорение на STM32.

  • STM32N6 — подготовка загрузчика/XSPI.

  • VL53L5CX — добавлена поддержка вывода включения питания.

Обратно несовместимые изменения API

Изменения API, видимые пользователю, между v4.5.9 и v4.6.0. Область: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.

Каждое изменение помечено степенью влияния:

  • major — большинству скриптов, использовавших его, потребуются правки.

  • minor — узкий API; затрагивает только скрипты, использовавшие его.

  • behavior — тот же API, другие результаты; перепроверьте настроенные скрипты.

  • tooling — затрагивает только прошивку / хост-инструменты / доступность плат.

Изменения сгруппированы по влиянию в этом порядке. Если вам нужно только перенести свой код, перейдите к контрольному списку миграции в конце. Каждый хэш коммита ссылается на его diff на GitHub. Примечание: переименование модуля sensorcsi в этом выпуске не является обратно несовместимым — sensor по-прежнему работает как псевдоним.

Диапазон alpha при рисовании теперь 0–255 (major)

Аргумент alpha функции draw_image() и каждого наложения, принимающего его (FIR, ToF, дисплей, TV, MJPEG, таблицы alpha), теперь использует диапазон 0–255 вместо 0–256. Скрипты, передававшие 256 для полной непрозрачности или вычислявшие alpha относительно 256, необходимо масштабировать к диапазону 0–255.

Коммит: 1f87b5bb6

Константы ioctl для FLIR Lepton переименованы (minor)

Три константы ioctl для Lepton были укорочены: IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP. Прилагаемые примеры были обновлены.

Коммит: 12582d54d

Изменения в API постобработки ML (minor)

ml.postprocessing появился в этом выпуске, и его API менялся в процессе: ключевое слово конструктора score_threshold для yolo_v2_postprocess переименовано в threshold, а пустые результаты постобработки теперь возвращают () вместо []. Прилагаемая модель yolov5_rgb_person переименована в yolo_v5_224_nano. ml.apps.MicroSpeech теперь передаёт произвольные **kwargs в audio.init() вместо фиксированного gain_db=24.

Коммиты: d67bd1ad7, 979b4e8ee, b89b815b2, 6671d9df5, 5c2f4388c

AGAST — детектор углов по умолчанию (behavior)

find_keypoints() теперь использует AGAST вместо FAST в качестве детектора углов по умолчанию на всех платах. Наборы ключевых точек (и, следовательно, совпадения дескрипторов) отличаются от предыдущих выпусков — перепроверьте настроенные конвейеры ключевых точек. Потоковая передача буфера кадра в IDE также теперь ограничена 20 Гц для снижения нагрузки на USB.

Коммиты: da6bf6910, bc4e39246

Загрузчик, удалённые платы и функции (tooling)

Устаревший CDC-загрузчик заменён новым стандартным DFU-загрузчиком на базе TinyUSB на всех платах — механизм обновления прошивки изменился; соответствующим образом обновите свой рабочий процесс/инструменты прошивки. Плата OpenMV Pro, автономная сборка Raspberry Pi Pico и функция удалённой IDE через WiFi-отладку (wifidbg) были удалены.

Коммиты: a03fc90d8, c2e616aae, af3ea774b, f8bca9799, 59a38a0d3, 7edeb4fbe, d58d77fa2

Контрольный список миграции

Для чистого переноса на v4.6.0 обычно требуется:

  1. Масштабировать каждое значение alpha для рисования/наложения из диапазона 0–256 в 0–255 (изменение диапазона alpha).

  2. Переименовать любые константы ioctl для FLIR Lepton в их укороченные формы (переименование ioctl Lepton).

  3. Если вы использовали новые постобработчики ML, замените score_threshold на threshold, обработайте пустой результат () и обновите имя модели yolo_v5_224_nano (изменения ML).

  4. Перепроверить конвейеры на основе find_keypoints() с учётом смены детектора на AGAST (изменение детектора углов).

  5. Обновить рабочий процесс прошивки для нового загрузчика DFU (изменения загрузчика/плат).