v2.1.0

v2.1.0 — це масштабний реліз з модернізацією API. Він замінює дескриптор ключових точок FREAK на ORB, переробляє find_blobs() / гістограми / статистику на об’єктно-орієнтовані API, перейменовує функції автоматичної витримки/підсилення/балансу білого sensor, додає виявлення QR-кодів і корекцію об’єктива OV7725, а також надає підтримку плати OpenMV Cam M7. Багато API змінилося — прочитайте розділ про несумісні зміни нижче.

Основне

  • Ключові точки ORB — дескриптор FREAK замінено на ORB (find_keypoints() / match_descriptor() перероблено).

  • Об’єктні APIfind_blobs(), get_histogram(), get_statistics() тепер повертають об’єкти з іменованими аксесорами.

  • QR-коди — додано виявлення image.find_qrcodes().

  • OpenMV Cam M7 — початкова підтримка плати.

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (перейменовано) та set_lens_correction().

  • Несумісні зміни: змінено API ключових точок/дескрипторів, плям/гістограм/статистики, автофункцій датчика та деяких інших — дивіться розділ про несумісні зміни.

Нові функції

  • OpenMV Cam M7 — додано початкову підтримку плати OpenMV 3 (M7).

  • QR-коди — додано image.find_qrcodes() з прикладом qrcodes.py.

  • Ключові точки ORB — нова система дескрипторів ORB: find_keypoints() з аргументом corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor; match_descriptor() з ключовим словом filter_outliers та оцінкою обертання; збереження/завантаження ключових точок.

  • Об’єктні APIimage.get_histogram() / get_statistics() / get_percentile() повертають об’єкти гістограми/статистики; find_blobs() повертає об’єкти плям (rect() / cx() / cy() / code() / area() / pixels()) з параметрами area_threshold / pixels_threshold / merge / margin / invert та x_stride / y_stride.

  • Sensor — додано sensor.set_lens_correction(enable, radi, coef) для корекції затінення OV7725, sensor.set_windowing() тепер також приймає кортеж (w, h) (автоцентрування), а також image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Додано приклади скриптів для відстеження кольору, Arduino SPI/I2C-slave, ключових точок та гістограм/статистики.

Інші зміни та покращення

  • IDE тепер може перервати виконання main.py; прискорено find_blobs() / find_qrcodes() / get_statistics(); ORB використовує відстань Хеммінга з підрахунком бітів; корекція об’єктива витрачає менше RAM; правило udev для Linux запобігає захопленню послідовного порту ModemManager.

Виправлення помилок

Камера та зображення:

  • Виправлено очищення/інвалідацію кешу DMA для M7 (пошкоджені кадри), зайвий рядок наприкінці кожного кадру, переповнення буфера JPEG, звільнення кадрового буфера при збої compress(), точність/ROI/обробку порожнього набору в ORB, а також геометрію load_image(copy_to_fb=True).

Система:

  • Виправлено підтримку ADC для F7, назву регістра OV7725, таймінг завантажувача/USB; використовується WFI під час очікування знімків; приклад MJPEG-стрімера зроблено неблокуючим із тайм-аутами для кожного клієнта.

Апаратне забезпечення та підтримка плат

  • OpenMV Cam M7 (OpenMV 3) — початкова підтримка плати.

  • OV7725 — підтримка корекції об’єктива (затінення).

Несумісні зміни API

Видимі для користувача зміни API між v2.0.0 та v2.1.0. Область: Python C-модулі в modules/ та бібліотеки Python у scripts/libraries/.

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

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

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

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

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

FREAK замінено на ORB; API дескрипторів перероблено (major)

Дескриптор ключових точок FREAK було видалено та замінено на ORB: image.FREAK більше не існує (використовуйте image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() більше не приймають провідний аргумент типу дескриптора (він визначається з об’єкта), match_descriptor() тепер повертає кортеж із 8 елементів (cx, cy, x, y, w, h, match_count, rotation) (останній елемент — сирий лічильник, а не відсоток), а draw_keypoints() вимагає об’єкт ключових точок замість списку (x, y, angle). find_keypoints() отримала corner_detector / max_keypoints / scale_factor зі зміненими значеннями за замовчуванням.

Commits: e2d0c4840, bba8e5a9e, 6000684cb

Перейменування автофункцій датчика (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() було перейменовано на sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (старі назви видалено). Кожна функція отримала необов’язкове ключове слово value= для встановлення ручного значення замість автоматичного.

Commits: 1b22a2961

Гістограма / статистика перероблена на об’єктні API (major)

Поверхня гістограми/статистики була перероблена на об’єктно-орієнтовані image.get_histogram() / get_statistics() / get_percentile(), що повертають об’єкти гістограми/статистики. Старі плоскі результати гістограми/статистики та методи bin_count / l_bin_count / a_bin_count / b_bin_count були видалені (використовуйте len(histogram.bins()) тощо).

Commits: 011108412, 9f37c83de

find_features() scale перейменовано (major)

image.find_features() (Haar) перейменувало ключове слово scale= на scale_factor=. Оновіть виклики find_features(cascade, scale=...) на scale_factor=....

Commits: 96e4f770c

find_blobs() повертає об’єкти; find_markers() видалено (minor)

image.find_blobs() тепер повертає об’єкти плям з іменованими аксесорами (індексний доступ досі працює для зворотної сумісності), а image.find_markers() було видалено — замість нього використовуйте find_blobs(..., merge=True, margin=...). Зворотний виклик розширеного фільтра плям кольору більше не підтримується.

Commits: af15ec6eb

img.copy_to_fb() замінено (minor)

Метод img.copy_to_fb() було замінено ключовим словом copy_to_fb= у image.Image / load_image(). Використовуйте image.Image(path, copy_to_fb=True) для завантаження великих зображень безпосередньо у кадровий буфер.

Commits: 1645ab94b

compress() відхиляє якість поза допустимим діапазоном (behavior)

image.compress() / compressed() тепер викидають помилку, якщо quality виходить за межі 1–100, замість тихого обрізання. Обмежуйте quality до 1–100 перед викликом. Окремо, буфер JPEG OpenMV 3 був зменшений з 64 КБ до 23000 байт, тому великі кадри тепер можуть викликати помилку нестачі пам’яті — знижте якість JPEG або розмір кадру.

Commits: 9efd7474a, 9a7c3defc

Масштабування lens_corr() тепер функціонує (behavior)

image.lens_corr() тепер справді застосовує аргумент zoom (раніше він парсився, але не діяв), тому результат відрізняється для скриптів, що передавали нестандартне масштабування. Перевірте налаштування lens_corr().

Commits: d6b49adef

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

Для коректного перенесення на v2.1.0 типовий обсяг роботи такий:

  1. Замініть image.FREAK на image.ORB, видаліть аргумент типу дескриптора та оновіть розпакування кортежу match_descriptor() / draw_keypoints() для об’єкта ключових точок (переробка ORB).

  2. Перейменуйте sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() на форми set_auto_* (перейменування автофункцій).

  3. Перенесіть код гістограми/статистики на об’єктні методи (переробка гістограми/статистики).

  4. Перейменуйте find_features() scale= на scale_factor= (перейменування find_features).

  5. Використовуйте аксесори об’єктів плям і замініть find_markers() на find_blobs(merge=True, ...) (зміна find_blobs); замініть img.copy_to_fb() ключовим словом copy_to_fb= (зміна copy_to_fb).

  6. Обмежте якість compress() до 1–100 і перевірте розміри JPEG на OpenMV 3 (зміна compress); перевірте масштабування lens_corr() (зміна lens_corr).

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