v3.0.0¶
v3.0.0 — это крупный выпуск перехода v2 → v3. В нём представлены OpenMV Cam M7 (STM32F7) и новый модуль нейронных сетей nn на базе CMSIS-NN (заменяющий старые жёстко зашитые методы find_number() / classify_object()), добавлена поддержка датчиков MT9V034 с глобальным затвором и FLIR Lepton, размеры кадра sensor.WVGA, а ядро обновлено до MicroPython 1.9.4. Изменилось поведение нескольких возможностей image / sensor / WiFi — см. описание несовместимых изменений ниже.
Основное¶
OpenMV Cam M7 — новая плата на STM32F7.
Модуль
nn— вывод на CMSIS-NN:nn.load(),Net.forward(),Net.search(), с конвертером моделей и примерами.Новые датчики — MT9V034 с глобальным затвором (запуск по FSIN) и FLIR Lepton.
Обновление ядра до MicroPython 1.9.4.
Несовместимое изменение: удалены жёстко зашитые
image.find_number()/image.classify_object(),sensor.sleep()теперь вызывает исключение, сокеты WINC возвращают реальное число байтов,image.binary()возвращает новое изображение, аfind_apriltags()ограничен 64K пикселей — см. несовместимые изменения.
Новые возможности¶
nn— новый модуль нейронных сетей на CMSIS-NN:nn.load(path),Net.forward(img, roi=, softmax=, dry_run=)(возвращает числа с плавающей точкой 0.0–1.0),Net.search()для обнаружения с разным масштабом/положением иNet.test(), а также конвертер моделей CMSIS-NN (nn_convert.py/nn_quantizer.py), встроенные модели CIFAR-10 / LeNet / smile и примеры скриптов NN / NN-search.Датчики — поддержка MT9V034 с глобальным затвором (снимок по запуску FSIN) на OpenMV 4, обновлённый драйвер FLIR Lepton со снимком Lepton, а также новые размеры кадра
sensor.WVGA(720x480) /sensor.WVGA2(752x480).Обработка изображений —
image.find_circles()получил ключевые аргументыr_min/r_max/r_step(более быстрое преобразование Хафа),find_keypoints()и Haar-методfind_features()теперь принимают RGB-изображения, аimage.compress()/ кодирование JPEG теперь поддерживает бинарные (растровые) изображения.Загрузка —
boot.pyтеперь выполняется до инициализации USB, поэтому может переопределять режим USB (например, HID).Примеры — добавлены примеры AprilTag с малым/высоким разрешением, пример I2C LIDAR-Lite V3, а также инструменты для работы с наборами данных (
augment_images.py/make_patches.py).
Прочие изменения и улучшения¶
Встроенный MicroPython обновлён до 1.9.4 (с откатом разбора/компиляции/исполнения pyexec и исправлением PendSV); более понятные сообщения об ошибках нехватки памяти
fb_alloc/xalloc; подавлен шум printf модуляnnпри загрузке сети; реорганизован репозиторий (примеры →scripts/, инструменты →tools/, Haar-каскады →ml/). Модульnnнедоступен на OpenMV 2 (недостаточно флеш-памяти).
Исправления ошибок¶
Обработка изображений:
Исправлены
fast_atan2fпри x≤0 (ранее всегда 0 — перепроверьте углы блобов / линий / ключевых точек), управление памятью вfind_apriltags()(потеря содержимого и неверный realloc при нехватке памяти), указатели строк по битам на пиксель для бинарных/растровых изображений (повреждённые бинарные результаты),find_edges(EDGE_CANNY)с ROI, макросTO_GS_PIXEL(интеграл / морфология), потоковая передача растра/JPEG для кадров в оттенках серого (bpp==0),pop_frontдля списков ключевых точек/блобов и результатыmatch_descriptor.
Система и камера:
Исправлены номера интерфейса/конечной точки USB HID, динамическое изменение частоты XCLK во время работы, возврат правильного числа выходов из
Net.forward()и аппаратный сбой при прерывании разбора скрипта.
Поддержка оборудования и плат¶
OpenMV Cam M7 (STM32F7) — новая плата.
Датчик с глобальным затвором MT9V034 (OpenMV 4, запуск по FSIN).
FLIR Lepton — обновлённый драйвер с поддержкой снимка.
Несовместимые изменения API¶
Видимые пользователю несовместимые изменения API между v2.9.0 и v3.0.0. Область охвата: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.
Каждое изменение помечено степенью влияния:
major — затрагивает большинство скриптов, использовавших возможность; потребуется адаптация кода.
minor — узкий API; затрагивает только скрипты, использовавшие его.
behavior — тот же API, но другие результаты; перепроверьте настроенные скрипты.
Изменения сгруппированы по влиянию в этом порядке. Если вы просто хотите адаптировать код, перейдите к контрольному списку миграции в конце. Каждый хеш коммита ведёт на его diff на GitHub.
image.find_number() / image.classify_object() удалены (major)¶
Жёстко зашитые методы image.find_number() (LeNet) и image.classify_object() (CMSIS CNN) были удалены в пользу нового модуля nn. Замените их на net = nn.load('/model.network'); out = net.forward(img).
Коммиты: d151f7e38
sensor.sleep() / sensor.reset() вызывают исключение при сбое (minor)¶
sensor.sleep() и sensor.reset() теперь при сбое вызывают исключение вместо возврата True / False. Код, проверявший логический результат sensor.sleep(), должен вместо этого обернуть вызов в try / except.
Коммиты: 7d16d008f
Сокеты WINC возвращают реальное число байтов (behavior)¶
Методы сокетов WINC1500 send / recv / sendto / recvfrom ранее всегда возвращали 0; теперь они возвращают фактическое число переданных байтов. Код, предполагавший возврат 0 (или зацикливавшийся/блокировавшийся на нём), должен учитывать реальные значения.
Коммиты: a07fb2f60
image.binary() возвращает новое изображение (behavior)¶
image.binary() получил ключевые аргументы to_bitmap / copy и теперь возвращает новый объект изображения вместо возврата/изменения исходного изображения на месте. Код, полагавшийся на изменение оригинального изображения функцией binary(), должен использовать возвращаемый объект (и передавать copy=True для поведения без изменения на месте).
Коммиты: 8a44f0cd9
Контрольный список миграции¶
Для чистого переноса на v3.0.0 обычно требуется следующее:
Замените
image.find_number()/image.classify_object()модулемnn(миграция на nn).Оберните
sensor.sleep()/sensor.reset()вtry/exceptвместо проверки логического результата (изменение sensor.sleep).Обрабатывайте реальное число байтов от сокетов WINC
send/recv(изменение сокетов WINC).Используйте изображение, возвращаемое
image.binary(), вместо ожидания изменения на месте (изменение binary).Уменьшайте изображения перед
find_apriltags(), чтобы оставаться в пределах 64K пикселей (ограничение find_apriltags).
Все остальные скрипты работают без изменений.