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() та Haar find_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; придушено шум nn printf під час завантаження мережі; реорганізовано репозиторій (приклади → 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

find_apriltags() обмежена 64K пікселів (behavior)

image.find_apriltags() тепер генерує виняток, якщо зображення (або ROI) перевищує 64K пікселів, та повертає порожній список для зображень менших за 4x4. Масштабуйте великі зображення (використовуйте менший framesize або передайте явний roi) перед викликом find_apriltags().

Коміти: bd77afbc0

Контрольний список міграції

Для чистого портування на v3.0.0 типова робота включає:

  1. Замініть image.find_number() / image.classify_object() модулем nn (міграція на nn).

  2. Оберніть sensor.sleep() / sensor.reset() у try / except замість перевірки булевого повернення (зміна sensor.sleep).

  3. Обробляйте реальну кількість байт із сокетів WINC send / recv (зміна сокетів WINC).

  4. Використовуйте зображення, повернуте image.binary(), замість очікування мутації на місці (зміна binary).

  5. Масштабуйте зображення перед find_apriltags(), щоб не перевищити 64K пікселів (обмеження find_apriltags).

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