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 / стандартных модулей.
Аргумент ImageIO update_jpeg_buffer удалён (minor)¶
Обновление буфера JPEG в ImageIO было переработано так, чтобы получать буфер из аргумента-источника изображения, а явный аргумент update_jpeg_buffer был удалён. Скрипты, передававшие update_jpeg_buffer в ImageIO, должны убрать этот аргумент.
Коммиты: 5c6937bd1
Контрольный список миграции¶
Для чистого переноса на v4.0.0 типичная работа такова:
Замените любое использование удалённого потокового режима новым API многобуферности
sensor.set_framebuffers()(потоковый режим удалён).Перепроверьте вызовы
sensor.set_windowing()в соответствии с переработанной, более гибкой обработкой аргументов (изменение окна).Перепроверьте скрипты, зависящие от специфичного для версии поведения MicroPython, относительно MicroPython 1.15 (переход на новый MicroPython).
Уберите аргумент
update_jpeg_bufferиз вызовов ImageIO (изменение ImageIO).
Все остальные скрипты работают без изменений.