v2.5.0

v2.5.0 — насыщенный возможностями выпуск для обработки изображений: он добавляет find_rects(), find_circles(), get_regression() (подгонка линии/регрессии), find_number() (цифры LeNet), классы потоков ImageWriter / ImageReader, sensor.flush() / width() / height() и поддержку pyb.RTC. Загрузка изображений теперь опирается на буфер кадра — прочтите о несовместимых изменениях ниже.

Основное

  • image.find_rects() — детектор прямоугольников / четырёхугольников с выводом углов.

  • image.find_circles() — обнаружение окружностей методом Хафа.

  • image.get_regression() — подгонка линии методом наименьших квадратов и робастным методом (Тейла-Сена).

  • image.find_number() — распознавание цифр LeNet.

  • ImageWriter / ImageReader — запись и воспроизведение потоков изображений.

  • Поддержка pyb.RTC, а также sensor.flush() / sensor.width() / sensor.height().

  • Несовместимо: загрузка изображений теперь опирается на буфер кадра и вызывает исключение, если изображение слишком велико — см. несовместимые изменения.

Новые возможности

  • Обнаружение признаков — добавлены image.find_rects() (детектор четырёхугольников AprilTag; объекты прямоугольников с x / y / w / h / corners / magnitude), image.find_circles() (Хаф), image.get_regression() (подгонка линии методом наименьших квадратов + робастным методом Тейла-Сена) и image.find_number() (распознавание цифр LeNet), каждое с примерами скриптов.

  • Углы результата — добавлен атрибут corners к объектам результата QR-кода / AprilTag / data-matrix / штрихкода.

  • Потоки изображений — добавлены классы image.ImageWriter / image.ImageReader (формат фрагментов с выравниванием по 16 байт) с примерами image_writer.py / image_reader.py.

  • Датчик — добавлены sensor.flush() (отправка буфера кадра в IDE без снимка) и sensor.width() / sensor.height().

  • pyb.RTC — включена поддержка RTC с примером rtc.py.

  • Добавлены каскад Haar для морды кота и пример Servo-Shield (PCA9685); хост-инструмент openmv-cascade.py получил поддержку нового формата каскадов OpenCV XML.

Прочие изменения и улучшения

  • Буфер кадра был переработан так, что методы изображения copy_to_fb обновляют предпросмотр в IDE; пути HaarCascade() больше не требуют ведущего / (встроенный или файл определяется автоматически); запись GIF/MJPEG теперь поддерживает VGA (и GIF в формате BAYER); встроенный README.txt обновлён, а файл драйвера openmv.inf больше не создаётся в чистой файловой системе.

Исправления ошибок

Обработка изображений:

  • Исправлены накопление голосов find_circles(), смещение rho в get_regression() с ROI и утечка памяти, объединение отрезков в find_lines(), усреднение углов и цветовые границы по умолчанию (наименее ограничивающие) в find_blobs(), стабильность сортировки ключевых точек ORB / порядок дескрипторов и флаг совпадения, а также буферизованная загрузка каскада Haar (невыровненное чтение).

Система:

  • Включён pyb Servo 3 (P9) (#256), исправлена инициализация RTC, увеличен тайм-аут символа UART (#240) и исправлен неинициализированный флаг «enabled» буфера кадра датчика.

Поддержка оборудования и плат

  • Поддержка pyb.RTC и pyb Servo 3 (P9); пример Servo-Shield (PCA9685).

Несовместимые изменения в API

Видимые пользователю несовместимости API между v2.4.1 и v2.5.0. Область: Python C-модули в modules/ и библиотеки Python в scripts/libraries/.

Несовместимое изменение является изменением поведения (тот же API, другой результат) — перепроверьте затронутые скрипты. Каждый хеш коммита ведёт на его diff на GitHub.

Загрузка изображений опирается на буфер кадра (behavior)

image.Image / загрузка изображения теперь копирует загруженное изображение в основной буфер кадра и вызывает исключение, если изображение слишком велико, чтобы поместиться. Загрузки, которые ранее успешно выполнялись в буфер кучи, теперь могут завершаться неудачей — убедитесь, что загружаемые изображения помещаются в буфер кадра (или обработайте новую ошибку).

Коммиты: 87d53385a

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

Убедитесь, что загружаемые изображения помещаются в буфер кадра (или перехватывайте новую ошибку «image too large») там, где вы ранее полагались на загрузку изображений в буфер кучи (изменение загрузки изображений). Все остальные скрипты работают без изменений.