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().

  • SSIMimage.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 (з прикладом MQTT через WiFi) та режим network.WINC.MODE_BSP для програмування мікропрограми WINC через відладочний UART.

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

Інші зміни та вдосконалення

  • 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. Область застосування: C-модулі Python у modules/ та бібліотеки Python у scripts/libraries/.

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

  • major (значний) — стосується більшості скриптів, що використовували функцію; потрібне портування коду.

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

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

Зміни згруповано за рівнем впливу у вказаному порядку. Якщо вам потрібно лише портувати код — перейдіть до контрольного списку міграції у кінці. Кожен хеш коміту посилається на його різницю на GitHub.

sensor.set_auto_gain() перероблено до дБ (значна)

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() перероблено до мікросекунд (значна)

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

Коміти: 7be0a7a18

find_displacement() / розміри кадрів FFT перероблено (значна)

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

Коміти: c78f91b42, 213396d09

sensor.set_auto_whitebal() перероблено до дБ (незначна)

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 (незначна)

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

Коміти: aeb023804

Інструменти мікропрограми WINC потребують шляху до файлу (незначна)

Інструменти мікропрограми 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 (поведінковий)

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

Коміти: 4d09a13f3

Знак z_rotation() тегів AprilTag змінено (поведінковий)

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).

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