v1.2.0¶
v1.2.0 — это основополагающий, очень крупный выпуск, который формирует большую часть классического API обработки изображений OpenMV: методы рисования, операции бинаризации / морфологии, дескрипторы ключевых точек (FAST / FREAK / LBP), преобразования цвета и image.statistics, файловый ввод-вывод BMP / PPM / JPEG, модули lcd, mjpeg, gif и тепловой mlx, камеру OV7725 и множество элементов управления sensor. Некоторое базовое поведение sensor изменилось — ознакомьтесь с критическими изменениями ниже.
Основные моменты¶
API рисования —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Бинаризация / морфология —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Ключевые точки — дескрипторы FAST / FREAK / LBP с
match_descriptor()/save_descriptor()/load_descriptor().Поддержка камеры OV7725;
image.statistics; файловый ввод-вывод BMP/PPM/JPEG.Критическое: поведение
sensor.reset(),sensor.snapshot()иsensor.set_pixformat()изменилось — см. критические изменения.
Новые возможности¶
Рисование — добавлены
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()с именованными аргументами (цвет, толщина, …).Бинаризация / морфология — добавлены
image.binary(),invert(),and()/nand()/or()/nor()/xor()/xnor(),erode()/dilate()/morph(),negate()/difference(),pixels(),centroid(),orientation_radians()/orientation_degrees()иwidth()/height()/format().Ключевые точки / дескрипторы — извлечение ключевых точек FAST через
find_keypoints(), унифицированныеmatch_descriptor()иsave_descriptor()/load_descriptor()для FREAK / LBP, а также каскад Haar/LBP для профиля лица.Цвет / статистика —
image.statisticsи функции преобразования цвета (rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb).Файловый ввод-вывод — загрузка и сохранение BMP / PPM (P2/P3/P5/P6) / JPEG (включая JPEG в оттенках серого и субдискретизацию цветности 4:2:0 / 4:2:2).
Модули — новые модули
lcd(LCD-шилд),mjpeg(запись видео), цветнойgif(сGif.loop()) и тепловойmlx, каждый с примерами скриптов.Датчик — добавлены
sensor.get_id()(+ константы PID для OV9650/OV2640/OV7725),sensor.set_special_effect()(константы SDE_*),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), размер кадраHQVGAиimage.set_pixel(x, y, …).WiFi — добавлены драйвер WiFi ATWINC1500 и основа BSP для OpenMV 1/2, а также пример BLE.
Прочие изменения и улучшения¶
Буфер кадра теперь сжимается в JPEG перед потоковой передачей в OpenMV IDE (меньше полосы пропускания); сжатие JPEG выполняется на месте; масштабирование по H/V для OV7725 обеспечивает произвольное масштабирование; улучшено (ускорено) обнаружение лиц по Haar, работающее на QVGA.
Исправления ошибок¶
Обработка изображений:
Исправлены вычисление интегрального изображения, повреждение фильтром
median(), вычисление центроида, фильтры RGB skin / черно-белый на RGB-входе, а также ускорены чтение/запись BMP/PPM в оттенках серого.
Датчик и система:
Исправлены таймеры
pyb.Servo(Servo теперь работает), разрешение HQVGA, надежность инициализации SD-карты, повторная инициализация хранилища после программной перезагрузки и повторный запуск REPL при отсутствии скрипта.
Аппаратное обеспечение и поддержка плат¶
Датчик камеры OV7725.
LCD-шилд (модуль
lcd), тепловая камераmlxи основа WiFi ATWINC1500.
Критические изменения API¶
Видимые пользователю изменения API между v1.1.0 и v1.2.0. Область: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.
Все три критических изменения — это изменения поведения основных функций sensor (тот же API, другое поведение) — перепроверьте затронутые скрипты. Каждый хеш коммита ведет на его diff на GitHub. (Подавляющее большинство этого выпуска — новый API, построенный в диапазоне v1.1→v1.2, и поэтому он дополняющий, а не критический.)
sensor.reset() больше не применяет конфигурацию по умолчанию (поведение)¶
sensor.reset() больше не применяет встроенную конфигурацию по умолчанию (pixformat / framesize / framerate / усиление / контрастность / яркость / насыщенность). Скрипты, которые полагались на то, что reset() оставляет пригодные для использования значения по умолчанию, теперь должны явно вызывать sensor.set_pixformat() и sensor.set_framesize() (и любые другие настройки) после reset().
Коммиты: d1e782df3
sensor.snapshot() вызывает исключение при тайм-ауте (поведение)¶
sensor.snapshot() теперь вызывает RuntimeError("Sensor Timeout!!"), когда датчик превышает тайм-аут, вместо бесконечного зависания. Оберните snapshot() в try / except RuntimeError, если вам нужно допускать тайм-ауты.
Коммиты: e3f41d674
sensor.set_pixformat() вызывает исключение при неподдерживаемом формате (поведение)¶
sensor.set_pixformat() теперь вызывает исключение при передаче неподдерживаемого формата пикселей вместо возврата False. Код, проверявший возврат False, должен вместо этого перехватывать исключение.
Коммиты: e0c5822c2
Контрольный список миграции¶
Для чистого переноса на v1.2.0 типичная работа такова:
Явно установите
sensor.set_pixformat()/sensor.set_framesize()послеsensor.reset()(изменение reset).Оберните
sensor.snapshot()вtry/except RuntimeError, если вам нужно допускать тайм-ауты датчика (изменение snapshot).Перехватывайте исключение из
sensor.set_pixformat()вместо проверки наFalse(изменение set_pixformat).
Все остальные скрипты работают без изменений.