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).
Всі інші скрипти працюють без змін.