v4.0.0

v4.0.0 — это крупный выпуск с v3 на v4. В нём представлен современный API многокадровой буферизации sensor (двойная / тройная буферизация и видео-FIFO), функция обратного вызова завершения кадра, модуль Bluetooth (стек NimBLE) с поддержкой Portenta, первоначальный драйвер камеры MT9M114, захват с камеры с переносом на MDMA, поддержка Bayer/JPEG в image.draw_image() и переход на MicroPython 1.15. Устаревший потоковый режим был удалён, а sensor.set_windowing() была переработана — ознакомьтесь с несовместимыми изменениями ниже.

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

  • Многокадровая буферизацияsensor получает двойную буферизацию, тройную буферизацию и режим видео-FIFO для более высокой и плавной частоты кадров.

  • Функция обратного вызова завершения кадра — регистрация функции обратного вызова, срабатывающей при готовности нового кадра, для неблокирующих конвейеров захвата.

  • Bluetooth — модуль bluetooth, построенный на стеке NimBLE, включённый на Arduino Portenta H7 (с примером BLE).

  • MT9M114 — первоначальный драйвер датчика камеры.

  • Более быстрый захват — перенос захвата данных камеры на MDMA; draw_image() теперь принимает источники/приёмники Bayer и JPEG.

  • MicroPython 1.15 — встроенный MicroPython обновлён с 1.13 до 1.15.

  • Несовместимое: устаревший потоковый режим был удалён, а sensor.set_windowing() была переработана — см. несовместимые изменения.

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

  • Многобуферность датчика — добавлены sensor.set_framebuffers() / sensor.get_framebuffers() и режимы SINGLE_BUFFER / DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO, а также sensor.get_frame_available() для двойного, тройного захвата и захвата через видео-FIFO.

  • Функция обратного вызова завершения кадра — добавлена sensor.set_frame_callback(), чтобы функция обратного вызова Python запускалась при завершении каждого нового кадра.

  • Bluetooth — добавлен модуль bluetooth на основе стека NimBLE (подмодуль NimBLE, драйвер CYW-BT), включённый на Arduino Portenta H7 с примером BLE.

  • MT9M114 — добавлен первоначальный драйвер датчика камеры MT9M114.

  • draw_image — добавлена поддержка дебайеризации и копирования JPEG, так что image.draw_image() принимает изображения-источники/приёмники Bayer и JPEG.

  • Перенос захвата на MDMA — захват данных камеры переносится на MDMA для более высокой пропускной способности.

  • Аргумент цветовой палитры теперь можно отключить, передав -1 (поскольку None зарезервировано как допустимый аргумент).

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

  • Переход на новую программную реализацию I2C; согласование с апстримом MicroPython; конфигурация ulab для каждой платы; включены базовые встроенные модули для OpenMV 2; более справедливая блокировка считывания буфера кадра; поддержка мьютексов расширена на Cortex-M0/M0+ с тайм-аутом блокировки.

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

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

  • Исправлены надёжность инициализации FLIR Lepton на плате Pure Thermal, обработка буфера JPEG / паузы в ImageIO, настройки vflip/hmirror HM01B0, сброс буфера JPEG при аннулировании изображения, а также флаг cropped, который устанавливался при недопустимом размере кадра.

Система и связь:

  • Исправлены опустошение командного буфера USB и команда сброса в загрузчик, инициализация мьютекса, источник тактирования UART, определение кодовой страницы FatFS, обработка внеполосного ACK WINC1500, отладка WiFi и USB PID Nano33; изолированы выделенные аналоговые контактные площадки.

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

  • Датчик камеры MT9M114 (первоначальный драйвер).

  • Arduino Portenta H7 — включён Bluetooth (NimBLE) с примером BLE.

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense — флаг отладки WiFi отключён там, где не поддерживается; добавлен пример blinky; исправлен USB PID.

Несовместимые изменения API

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

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

  • major — затрагивает большинство скриптов; вам почти наверняка потребуется адаптировать код.

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

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

Изменения сгруппированы по влиянию в этом порядке. Если вы хотите просто адаптировать свой код, перейдите к контрольному списку миграции в конце. Каждый хэш коммита ведёт к его diff на GitHub.

Потоковый режим удалён (major)

Устаревший потоковый режим датчика был удалён в пользу нового API многокадровой буферизации. Код, включавший потоковый режим, должен перейти на sensor.set_framebuffers() с DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO и управлять захватом через sensor.snapshot() / sensor.get_frame_available().

Коммиты: a42f3a647

sensor.set_windowing() переработана (behavior)

sensor.set_windowing() стала гораздо более гибкой: теперь она принимает несколько форм аргументов (кортеж региона, или центрированные ширина/высота, или x, y, w, h) и определяет окно относительно текущего разрешения. Скрипты, передававшие аргументы окна в старой фиксированной форме, могут выбрать другой регион, и их следует перепроверить.

Коммиты: 3e9c43554

MicroPython 1.13 → 1.15 (behavior)

Встроенное ядро MicroPython обновлено с 1.13 до 1.15 (через 1.14). Поведение стандартной библиотеки и языка соответствует апстриму MicroPython 1.15; перепроверьте скрипты, зависящие от специфичного для версии поведения micropython / стандартных модулей.

Коммиты: 364eea6c7, 26c5376b0

Аргумент ImageIO update_jpeg_buffer удалён (minor)

Обновление буфера JPEG в ImageIO было переработано так, чтобы получать буфер из аргумента-источника изображения, а явный аргумент update_jpeg_buffer был удалён. Скрипты, передававшие update_jpeg_buffer в ImageIO, должны убрать этот аргумент.

Коммиты: 5c6937bd1

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

Для чистого переноса на v4.0.0 типичная работа такова:

  1. Замените любое использование удалённого потокового режима новым API многобуферности sensor.set_framebuffers() (потоковый режим удалён).

  2. Перепроверьте вызовы sensor.set_windowing() в соответствии с переработанной, более гибкой обработкой аргументов (изменение окна).

  3. Перепроверьте скрипты, зависящие от специфичного для версии поведения MicroPython, относительно MicroPython 1.15 (переход на новый MicroPython).

  4. Уберите аргумент update_jpeg_buffer из вызовов ImageIO (изменение ImageIO).

Все остальные скрипты работают без изменений.