v2.7.0

v2.7.0 модернизирует API авто-усиления / авто-экспозиции / баланса белого модуля sensor, переводя их на физические единицы (дБ / микросекунды), переделывает фазовую корреляцию find_displacement() (добавляя поворот/масштаб) и добавляет get_similarity() (SSIM), chrominvar() / illuminvar(), дополнительные буферы кадра и библиотеку MQTT. Это крупный выпуск, нарушающий совместимость — прочитайте раздел об изменениях ниже.

Основные изменения

  • Современный API датчикаset_auto_gain() / set_auto_exposure() / set_auto_whitebal() теперь используют дБ / микросекунды, с соответствующими get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Фазовая корреляция — переработанный find_displacement() с поворотом / масштабом и find_rotscale() / linpolar() / logpolar().

  • SSIM — структурное сходство image.get_similarity().

  • Дополнительные буферы кадраsensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — новая библиотека MQTT.

  • Нарушает совместимость: API усиления/экспозиции/баланса белого датчика, find_displacement() / размеры кадра FFT, find_number(), инструменты прошивки WINC и z_rotation() для AprilTag — всё изменилось; см. раздел об изменениях, нарушающих совместимость.

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

  • Датчик — добавлены sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), именованный аргумент gain_db_ceiling в set_auto_gain(), поддержка hmirror / vflip для MT9V034, а также sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() для дополнительных буферов кадра в RAM.

  • Изображение — добавлены remove_shadows(), min() / max() (разностное вычитание кадров), get_similarity() (SSIM) с примером структурного сходства, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), именованные аргументы threshold / offset / invert для адаптивных фильтров mean() / mode() / median() / midpoint(), len() / индексирование для объекта ключевых точек и метод доступа .match() для объекта соответствия ключевых точек.

  • Библиотеки / сеть — добавлены библиотека MQTT (с примером WiFi MQTT) и режим network.WINC.MODE_BSP для программирования прошивки WINC по отладочному UART.

  • Примеры — добавлены примеры с низким энергопотреблением deep_sleep.py / stop_mode.py, продвинутый оптический поток и скрипты с линейными/логарифмическими полярными координатами; прошивка теперь при загрузке разбирает uart.ini для включения REPL по UART.

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

  • get_regression() получил именованные аргументы area_threshold / pixels_threshold и более быструю устойчивую регрессию (для следования по линии / гонок); get_pixel() теперь поддерживает изображения Bayer; добавлены заготовки для STM32H7 (заголовки CMSIS / HAL / загрузчик — плата H7 пока неработоспособна); обновлена встроенная прошивка WINC1500 (19.4.4 / 19.5.2).

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

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

  • Исправлены: ошибка выхода за границы при поиске «ромбом» в find_template(), повреждение в logpolar / linpolar и сбой illuminvar() на значениях цвета, близких к нулю.

Датчик и система:

  • Исправлены: ошибки автоматического управления усилением, восстановлен размер MAIN_FB при snapshot() (так что copy_to_fb с другим разрешением, изменение размера FB и пулинг оптического потока снова работают), тайм-аут gethostbyname для WINC, очистка статуса pydfu на загрузчике H7 и режимы низкого энергопотребления stop/standby.

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

  • STM32H7 — заготовки (CMSIS / HAL / загрузчик); плата OpenMV H7 пока неработоспособна в этом выпуске.

  • WINC1500 — обновлена встроенная прошивка.

Изменения API, нарушающие совместимость

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

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

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

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

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

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

sensor.set_auto_gain() переработан под дБ (major)

sensor.set_auto_gain() больше не принимает целочисленный именованный аргумент value= и больше не возвращает True / False. Используйте sensor.set_auto_gain(False, gain_db=...) (значение в дБ с плавающей точкой), считывайте его обратно новым sensor.get_gain_db() и оборачивайте вызов в try / except, так как при сбое теперь возникает ValueError.

Коммиты: b906c5f19

sensor.set_auto_exposure() переработан под микросекунды (major)

sensor.set_auto_exposure() больше не принимает целочисленный именованный аргумент value= и больше не возвращает True / False. Используйте sensor.set_auto_exposure(False, exposure_us=...), считывайте его обратно новым sensor.get_exposure_us() и обрабатывайте ValueError, возникающий при сбое.

Коммиты: 7be0a7a18

find_displacement() / размеры кадра FFT переработаны (major)

Фазовая корреляция была переработана. image.find_displacement() теперь возвращает объект смещения (с x_translation() / y_translation() — ранее x_offset / y_offset — плюс rotation() / scale() и новыми именованными аргументами logpolar / fix_rotation_scale); отдельный объект поворота-масштаба был удалён, а find_rotscale() добавлен. Константы размеров кадра FFT были переименованы/удалены: sensor.B40x30 удалён полностью, а sensor.B64x32 / B64x64 переименованы в верхний регистр sensor.B64X32 / B64X64 (с новыми B128X64 / B128X128).

Коммиты: c78f91b42, 213396d09

sensor.set_auto_whitebal() переработан под дБ (minor)

sensor.set_auto_whitebal() заменил целочисленный именованный аргумент value=[r, g, b] на rgb_gain_db=[r, g, b] (дБ с плавающей точкой) и теперь возвращает None (вызывая ValueError при сбое) вместо True / False. Используйте новый sensor.get_rgb_gain_db(), чтобы считать усиления обратно.

Коммиты: 30ecbdc4f

set_hmirror() / set_vflip() возвращают None (minor)

sensor.set_hmirror() и sensor.set_vflip() теперь возвращают None и вызывают ValueError при сбое вместо возврата статуса True / False. Удалите весь код, который ветвится по их возвращаемому значению.

Коммиты: aeb023804

Инструменты прошивки WINC требуют путь к файлу (minor)

Инструментарий прошивки network.WINC изменился: wlan.fw_dump() / wlan.fw_update() теперь принимают обязательный аргумент с путём к файлу прошивки, а WINC открывается в режиме программирования (network.WINC(mode=...)). Обновите вызовы без аргументов, чтобы передавать путь (например, wlan.fw_update("/winc_19_5_2.bin")).

Коммиты: fcc3b0b9c

image.find_number() требует ROI размером 28x28 (behavior)

image.find_number() (LeNet) теперь требует ROI размером ровно 28x28, которая помещается внутри изображения, и в противном случае вызывает ошибку (вместо запуска на произвольной/полнокадровой ROI). Передавайте явный roi=(x, y, 28, 28).

Коммиты: 4d09a13f3

Знак z_rotation() для AprilTag инвертирован (behavior)

z_rotation() для AprilTag (и связанный rotation()) теперь использует правостороннюю систему координат, поэтому возвращаемый угол имеет противоположный знак по сравнению с прежними выпусками. Скрипты, зависящие от старого знака, должны инвертировать значение или скорректировать свои вычисления углов.

Коммиты: 7673aaf74

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

Для чистого переноса на v2.7.0 обычно требуется следующее:

  1. Перенести set_auto_gain() на gain_db= + get_gain_db() и обрабатывать ValueError (переработка авто-усиления).

  2. Перенести set_auto_exposure() на exposure_us= + get_exposure_us() (переработка авто-экспозиции).

  3. Обновить find_displacement() под объект смещения и переименовать константы размеров кадра FFT (переработка find_displacement).

  4. Перенести set_auto_whitebal() на rgb_gain_db= + get_rgb_gain_db() (переработка баланса белого) и перестать проверять возврат set_hmirror() / set_vflip() (изменение зеркалирования/переворота).

  5. Передать путь к прошивке инструментам WINC fw_* (изменение инструментов WINC).

  6. Передать roi размером 28x28 в find_number() (изменение find_number) и скорректировать вычисления угла AprilTag для инвертированного знака z_rotation() (изменение z_rotation).

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