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; об’єкти rect із полями x / y / w / h / corners / magnitude), image.find_circles() (Хаф), image.get_regression() (підбір прямої методом найменших квадратів + робастний метод Тейл-Сен) та image.find_number() (розпізнавання цифр LeNet), кожен із прикладами скриптів.

  • Кути результатів — додано атрибут corners до об’єктів результатів QR-коду / AprilTag / матриці даних / штрих-коду.

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

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

  • pyb.RTC — увімкнено підтримку RTC з прикладом rtc.py.

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

Інші зміни та вдосконалення

  • Кадровий буфер було рефакторено так, щоб методи зображень 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 / впорядкування дескрипторів і прапорець збігу, а також буферизоване завантаження каскаду Хаара (невирівняне читання).

Система:

  • Увімкнено 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. Область застосування: C-модулі Python у modules/ та бібліотеки Python у scripts/libraries/.

Ця критична зміна є поведінковою (той самий API, інший результат) — перевірте відповідні скрипти. Кожен хеш коміту посилається на його різницю на GitHub.

Завантаження зображень використовує кадровий буфер (поведінка)

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

Коміти: 87d53385a

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

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