v2.8.0

v2.8.0 — это масштабный выпуск. Он запускает OpenMV Cam H7 (STM32H7) с аппаратным кодировщиком JPEG и H7 ADC/DAC, проводит огромную переработку API image (толщина/заливка при рисовании, математические/двоичные операции, множество новых фильтров, пороговая обработка Otsu), многопоточность MicroPython и модуль версии omv. Порядок разбора аргументов Python был зафиксирован, а image.mask_ellipse() удалён — прочитайте раздел об изменениях, нарушающих совместимость, ниже.

Основные изменения

  • OpenMV Cam H7 — новая плата STM32H7 с аппаратным кодировщиком JPEG и H7 ADC / DAC.

  • Переработка image — толщина линий, заливка фигур, draw_arrow() / draw_image(), полный набор математических/двоичных операций и множество новых фильтров.

  • Пороговая обработка Otsuhistogram.get_threshold() и объект Threshold.

  • Многопоточность — поддержка _thread в MicroPython.

  • Модуль omv — информация о версии / плате.

  • Нарушает совместимость: порядок позиционных аргументов Python теперь строгий, а image.mask_ellipse() удалён — см. раздел об изменениях, нарушающих совместимость.

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

  • OpenMV Cam H7 — поддержка платы STM32H7 с аппаратным кодировщиком JPEG, H7 ADC и H7 DAC.

  • Рисование — добавлены толщина линии thickness, заливка фигур fill (прямоугольник / окружность), масштаб текста scale / кернинг, именованный аргумент mono_space в draw_string(), image.draw_arrow() и image.draw_image() (рисование спрайтов / масок).

  • Математические операции — добавлены add(), sub(), mul(), div(), min(), max(), difference(), blend(), replace()hmirror / vflip / mask) и remove_shadows(); базовые операции теперь принимают скалярное значение/цвет, применяемое ко всем пикселям.

  • Двоичные / морфологические операции — новый двоичный тип изображения и binary(); линейные операции и erode() / dilate() принимают маски; добавлены open() / close() / top_hat() / black_hat().

  • Фильтры — добавлены cartoon, flood_fill, bilateral, laplacian, псевдонимы blur / gaussian_blur и адаптивное выравнивание гистограммы (histeq(adaptive=, clip_limit=, mask=)).

  • Статистикаget_statistics() / get_histogram() принимают список порогов цвета и invert; добавлены histogram.get_threshold() по Otsu и объект Threshold.

  • CMSIS CNN — добавлен image.classify_object() с примером cnn.py (заменён модулем nn в v3.0.0).

  • Многопоточность — включён модуль _thread в MicroPython.

  • Модуль omv — добавлена информация о версии (version_string, arch, board_type, board_id); включены шина I2C4 модуля machine и специальные математические функции (erf, gamma, …); добавлены примеры motor-shield и множество новых примеров скриптов.

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

  • Внешняя тактовая частота датчика H7 была снижена до 48 МГц (лучшее качество изображения, меньший FPS); низкое/высокое качество JPEG теперь настраивается на уровне платы (и отлажено для H7); добавлено гейтирование функций по платам через imlib_config.h (все функции обработки изображений остаются включёнными в стоковой прошивке); обновлён встроенный MicroPython.

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

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

  • Исправлены: image.save() без расширения файла, отображение gain_db / gain_db_ceiling для OV2640 / OV7725 / OV9650 / MT9V034, чрезмерное усиление в sharpen(), краевой шум при морфологии, деление на ноль в операции над изображением и аварийное переполнение стека при слишком большом размере ядра фильтра (теперь — корректная ошибка).

Система:

  • Защищён буфер USB VCP атомарной секцией (повреждение данных по последовательному порту, #313), исправлены: связь по USB в Windows, монтирование внутренней файловой системы во флеш-памяти при сбое SD-карты, значение PLLP в cpufreq set_frequency() и ошибка прошивки прошивки в загрузчике.

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

  • OpenMV Cam H7 (STM32H7) — новая плата с аппаратным кодировщиком JPEG и H7 ADC / DAC.

  • machine — включена шина I2C4.

Изменения API, нарушающие совместимость

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

Оба изменения, нарушающих совместимость, относятся к категории minor и затрагивают только скрипты, использовавшие соответствующую возможность. Каждый хэш коммита ведёт к его diff на GitHub.

Порядок позиционных аргументов Python теперь строгий (minor)

Разбор аргументов во всех Python C-модулях (image / sensor / fir / gif / lcd / mjpeg) теперь читает позиционные аргументы перед именованными и фиксирует порядок позиционных. В сочетании с новыми именованными аргументами в методах рисования (draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() получили thickness / fill / scale / size), код, передававший параметры позиционно в неправильном порядке — или передававший позиционный color после одного из новых аргументов — должен использовать именованные аргументы или документированный позиционный порядок.

Коммиты: e0e112468, fc74e70c3

image.mask_ellipse() удалён (minor)

image.mask_ellipse() был удалён. Скрипты, вызывавшие его, должны убрать вызов или использовать вместо него явную ROI / изображение-маску.

Коммиты: d7159fba3

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

Передавайте аргументы по имени (или в документированном позиционном порядке), особенно color в методах рисования (изменение порядка аргументов), и удалите вызовы image.mask_ellipse() (удаление mask_ellipse). Все остальные скрипты работают без изменений.