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; вирівнювання з upstream MicroPython; конфігурація ulab для кожної плати; базові вбудовані модулі увімкнено для OpenMV 2; чесніше блокування зчитування кадрового буфера; підтримку мьютексу розширено до Cortex-M0/M0+ з тайм-аутом блокування.

Виправлення помилок#

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

  • Виправлено надійність ініціалізації FLIR Lepton на платі Pure Thermal, обробку буфера JPEG / призупинення в ImageIO, налаштування вертикального/горизонтального дзеркалювання 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. Область: Python C-модулі в modules/ та бібліотеки Python у scripts/libraries/.

Кожна зміна позначена за впливом:

  • major — торкається більшості скриптів; майже напевно потрібне портування коду.

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

  • behavior — той самий API, інші результати; перевірте налаштовані скрипти.

Зміни згруповано за впливом у відповідному порядку. Якщо ви хочете просто портувати код, перейдіть до контрольного списку міграції в кінці. Кожен хеш коміту посилається на його різницю на 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). Поведінка стандартної бібліотеки та мови відповідає upstream MicroPython 1.15; перевірте скрипти, що залежать від версійно-специфічної поведінки micropython / стандартних модулів.

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

Аргумент update_jpeg_buffer ImageIO видалено (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).

Всі інші скрипти працюють без змін.