v2.4.0¶
В v2.4.0 find_lines() переписан как детектор на основе преобразования Хафа, добавлены find_line_segments(), декодирование data-matrix find_datamatrices(), sensor.set_vsync_output(), чтение/запись срезов изображения и множество новых масштабированных размеров кадра для более высокого FPS. find_lines(), match_descriptor() и skip_frames() изменились — прочтите о несовместимых изменениях ниже.
Основное¶
find_lines()— переписан как детектор линий на основе преобразования Хафа, возвращающий объекты линий (теперь работает с RGB565, а не только с оттенками серого).find_line_segments()— обнаружение конечных отрезков линий.find_datamatrices()— декодирование data-matrix.sensor.set_vsync_output()— вывод VSYNC на вывод ввода-вывода для синхронизации камеры.Больше размеров кадра — множество дополнительных масштабированных разрешений для более высокого FPS.
Несовместимо:
find_lines(),match_descriptor()иskip_frames()изменились — см. несовместимые изменения.
Новые возможности¶
image.find_line_segments()— поиск конечных отрезков линий; объекты линий получили аксессор.length().image.find_datamatrices()— декодирование data-matrix, с примерами скриптов.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 (а также вышестоящие исправления индексации битовой карты ячеек quirc и границ шаблона выравнивания).
Датчик и подключение:
Понижена тактовая частота датчика 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) (или методы кортежа), должен использовать новые аксессоры.
Коммиты: e960546b6
sensor.skip_frames() теперь основан на времени (behavior)¶
sensor.skip_frames() был переработан для приёма ключевого слова time= (по умолчанию ~300 мс) и теперь по умолчанию основан на времени, а не на выполнении фиксированного числа кадров, останавливаясь досрочно по истечении времени. Скрипты, полагавшиеся на точное число кадров, должны передавать явное число и/или соответственно задавать time=.
Коммиты: a039b5d1c
Контрольный список миграции¶
Для чистого перехода на v2.4.0 типичная работа такова:
Адаптируйте распаковку кортежей
find_lines()к объектам линий и перенастройте целочисленныйthreshold(переписывание find_lines).Используйте аксессоры
kptmatchвместо обработки результатовmatch_descriptor()как кортежа (изменение match_descriptor).Передавайте явное число и/или
time=вsensor.skip_frames(), если вы полагались на фиксированное число кадров (изменение skip_frames).
Все остальные скрипты работают без изменений.