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 з підтримкою знімків та нові розміри кадрів
sensor.WVGA(720x480) /sensor.WVGA2(752x480).Обробка зображень —
image.find_circles()отримала ключові словаr_min/r_max/r_step(швидший Хаф),find_keypoints()та Haarfind_features()тепер приймають RGB-зображення, аimage.compress()/ JPEG-кодування тепер підтримує бінарні (bitmap) зображення.Завантаження —
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; придушено шумnnprintf під час завантаження мережі; реорганізовано репозиторій (приклади →scripts/, інструменти →tools/, каскади Haar →ml/). Модульnnнедоступний на OpenMV 2 (недостатньо флеш-пам’яті).
Виправлення помилок#
Обробка зображень:
Виправлено
fast_atan2fдля x≤0 (раніше завжди 0 — перевірте кути пляма / лінія / ключова точка), обробку пам’ятіfind_apriltags()(втрачений вміст та поганий realloc при нестачі пам’яті), рядкові покажчики бінарних/bitmap на bpp (пошкоджені бінарні результати),find_edges(EDGE_CANNY)з областю інтересу (ROI), макросTO_GS_PIXEL(інтегральний / морф), потокову передачу bitmap/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. Область застосування: Python C-модулі у 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)#
Методи send / recv / sendto / recvfrom сокета WINC1500 раніше завжди повертали 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).
Всі інші скрипти працюють без змін.