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()перероблено).Об’єктні API —
find_blobs(),get_histogram(),get_statistics()тепер повертають об’єкти з іменованими аксесорами.QR-коди — додано виявлення
image.find_qrcodes().OpenMV Cam M7 — початкова підтримка плати.
Sensor —
set_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та оцінкою обертання; збереження/завантаження ключових точок.Об’єктні API —
image.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 зі зміненими значеннями за замовчуванням.
Перейменування автофункцій датчика (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()) тощо).
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 або розмір кадру.
Масштабування lens_corr() тепер функціонує (behavior)¶
image.lens_corr() тепер справді застосовує аргумент zoom (раніше він парсився, але не діяв), тому результат відрізняється для скриптів, що передавали нестандартне масштабування. Перевірте налаштування lens_corr().
Commits: d6b49adef
Контрольний список міграції¶
Для коректного перенесення на v2.1.0 типовий обсяг роботи такий:
Замініть
image.FREAKнаimage.ORB, видаліть аргумент типу дескриптора та оновіть розпакування кортежуmatch_descriptor()/draw_keypoints()для об’єкта ключових точок (переробка ORB).Перейменуйте
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()на формиset_auto_*(перейменування автофункцій).Перенесіть код гістограми/статистики на об’єктні методи (переробка гістограми/статистики).
Перейменуйте
find_features()scale=наscale_factor=(перейменування find_features).Використовуйте аксесори об’єктів плям і замініть
find_markers()наfind_blobs(merge=True, ...)(зміна find_blobs); замінітьimg.copy_to_fb()ключовим словомcopy_to_fb=(зміна copy_to_fb).Обмежте якість
compress()до 1–100 і перевірте розміри JPEG на OpenMV 3 (зміна compress); перевірте масштабуванняlens_corr()(зміна lens_corr).
Усі інші скрипти працюють без змін.