v2.4.0¶
v2.4.0 переписує find_lines() як детектор на основі перетворення Хафа, додає find_line_segments(), декодування матриць даних find_datamatrices(), sensor.set_vsync_output(), читання/запис зрізів зображення та багато нових масштабованих розмірів кадрів для вищої частоти кадрів. find_lines(), match_descriptor() та skip_frames() змінилися — прочитайте розділ про несумісні зміни нижче.
Основне¶
find_lines()— переписано як детектор ліній на основі перетворення Хафа, що повертає об’єкти ліній (тепер працює з RGB565, а не лише з відтінками сірого).find_line_segments()— виявлення кінцевих відрізків.find_datamatrices()— декодування матриць даних.sensor.set_vsync_output()— вивід VSYNC на вивід введення/виведення для синхронізації камери.Більше розмірів кадрів — багато додаткових масштабованих роздільних здатностей для вищої частоти кадрів.
Несумісні зміни:
find_lines(),match_descriptor()таskip_frames()змінилися — дивіться розділ про несумісні зміни.
Нові функції¶
image.find_line_segments()— знаходження кінцевих відрізків; об’єкти ліній отримали аксесор.length().image.find_datamatrices()— декодування матриць даних з прикладами скриптів.sensor.set_vsync_output(pin)— виведення сигналу VSYNC на вивід GPIO для синхронізації камери (OpenMV 2 / OpenMV 3).Зрізи зображення — підписки до зображення / протокол буфера тепер підтримує читання та запис зрізів даних зображення.
Додано багато додаткових комбінацій масштабованих роздільних здатностей / розмірів кадрів для підтримки вищої частоти кадрів;
clock.fps()тепер скидає акумулятори кожні 2 с, щоб відображена FPS відповідала останній частоті.
Інші зміни та покращення¶
OV7725 вікується до QVGA при роздільній здатності ≤ VGA (менше пропущених кадрів при високій частоті захоплення), а його PLL встановлено на 6× зі зменшеним зовнішнім тактовим сигналом (OpenMV 2 48 МГц, OpenMV 3 54 МГц), що змінює часові характеристики датчика.
Виправлення помилок¶
Зображення:
Виправлено помилку розміру буфера
compress_for_ide()(маркери початку/кінця), декодування QR (а також виправлення від upstream quirc: індексування bitmap комірок та межі шаблону вирівнювання).
Датчик і підключення:
Знижено тактовий сигнал датчика OpenMV 2 для роботи з вищим PLL датчика (ініціалізація/синхронізація камери), а
socket.recvfrom()WINC тепер повертає фактичний отриманий розмір (викидаючи помилку при від’ємному або нульовому розмірі замість повернення застарілого значення).
Апаратне забезпечення та підтримка плат¶
Вивід VSYNC на вивід GPIO (OpenMV 2 / OpenMV 3) для
sensor.set_vsync_output().OpenMV 3 — увімкнено
pyb.UARTUART1.
Несумісні зміни API¶
Видимі для користувача зміни API між v2.3.0 та v2.4.0. Область: Python C-модулі в modules/ та бібліотеки Python у scripts/libraries/.
Кожна зміна позначена за ступенем впливу:
major — стосується більшості скриптів, що використовували цю функцію; знадобиться перенесення коду.
minor — вузький API; стосується лише скриптів, що його використовували.
behavior — той самий API, інші результати; перевірте налаштовані скрипти.
Зміни згруповані за ступенем впливу у такому порядку. Якщо вам потрібно лише перенести код, перейдіть до контрольного списку міграції наприкінці. Кожен хеш коміту є посиланням на diff на GitHub.
find_lines() переписано як детектор Хафа (major)¶
image.find_lines() було переписано як детектор на основі перетворення Хафа. Він більше не повертає список кортежів (x1, y1, x2, y2) — він повертає об’єкти ліній (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — і тепер також працює з RGB565 (а не лише з відтінками сірого). Аргумент threshold змінився з числа з плаваючою комою 0.0–1.0 на цілочисельну суму магнітуд меж, line.magnitude тепер є цілим числом, а нові ключові слова theta_margin / rho_margin були додані. Перенесіть код розпакування кортежів на об’єкти ліній та перевірте threshold.
match_descriptor() повертає об’єкт відповідності (minor)¶
image.match_descriptor() (ORB) тепер повертає об’єкт kptmatch з аксесорами .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() замість простого 8-кортежу. Об’єкт досі підтримує підписки/зрізи, тому позиційна індексація продовжує працювати, але код, що використовував isinstance(result, tuple) (або методи кортежу), повинен перейти на нові аксесори.
Commits: e960546b6
sensor.skip_frames() тепер базується на часі (behavior)¶
sensor.skip_frames() було перероблено для прийому ключового слова time= (за замовчуванням ~300 мс) і тепер за замовчуванням базується на часі, а не виконує фіксовану кількість кадрів, зупиняючись достроково після закінчення часу. Скрипти, що покладалися на точну кількість кадрів, повинні передати явний лічильник та/або відповідно встановити time=.
Commits: a039b5d1c
Контрольний список міграції¶
Для коректного перенесення на v2.4.0 типовий обсяг роботи такий:
Перенесіть розпакування кортежів
find_lines()на об’єкти ліній та перевірте цілочисельнийthreshold(переписування find_lines).Використовуйте аксесори
kptmatchзамість обробки результатівmatch_descriptor()як кортежу (зміна match_descriptor).Передайте явний лічильник та/або
time=уsensor.skip_frames(), якщо ви покладалися на фіксовану кількість кадрів (зміна skip_frames).
Усі інші скрипти працюють без змін.