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).
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 обычно требуется следующее:
Перенести
set_auto_gain()наgain_db=+get_gain_db()и обрабатыватьValueError(переработка авто-усиления).Перенести
set_auto_exposure()наexposure_us=+get_exposure_us()(переработка авто-экспозиции).Обновить
find_displacement()под объект смещения и переименовать константы размеров кадра FFT (переработка find_displacement).Перенести
set_auto_whitebal()наrgb_gain_db=+get_rgb_gain_db()(переработка баланса белого) и перестать проверять возвратset_hmirror()/set_vflip()(изменение зеркалирования/переворота).Передать путь к прошивке инструментам WINC
fw_*(изменение инструментов WINC).Передать
roiразмером 28x28 вfind_number()(изменение find_number) и скорректировать вычисления угла AprilTag для инвертированного знакаz_rotation()(изменение z_rotation).
Все остальные скрипты работают без изменений.