OpenMV — "Ардуино" для машинного зрения

  • Цена: 40.09$ + доставка
  • Какой ардуинщик не хотел подключить камеру к ардуино и получать изображение также легко и просто, как мигать светодиодом? Вот и я из тех, кто хотел, но увы все нет так просто. Однако не ардуино единым ограничивается DIY и есть множество куда более мощных микроконтроллеров способных справиться с этой задачей. В очередной раз изучая новинки с сфере DIY, я наткнулся на интересный проект — OpenMV. Вот официальная страница проекта — openmv.io.

    OpenMV Cam это небольшая плата с низким энергопотреблением, содержащая видеокамеру и микроконтроллер, предназначенная для бюджетной реализации машинного зрения. OpenMV работает под управлением MicroPython, который позволяет программировать OpenMV с использованием Python (точнее, Python 3). Это облегчает работу за счет применения языка высокого уровня с большим количеством уже готовых библиотек компьютерного зрения. Также с помощью Python можно управлять портами ввода-вывода OpenMV.

    Характеристики OpenMV

    Процессор STM32F765VI ARM Cortex M7 с рабочей частотой 216 МГц;

    512 Кбайт оперативной памяти;

    2 МБ флеш-памяти;

    Все порты ввода/вывода с напряжением логического уровня 3,3В толерантны к 5В;

    Процессор имеет следующие интерфейсы ввода/вывода:

    Интерфейс USB с полной скоростью (12 Мбит) для подключения к компьютеру. При подключении OpenMV отображается в системе как виртуальный COM-порт и USB-накопитель.

    Разъем μSD Card, обеспечивающий скорость чтения/записи в 100 Мбит/с, что дает возможность OpenMV записывать видео и легко переносить объекты машинного зрения с карты μSD.

    Шина SPI, которая может работать на скорости до 54 Мбит, позволяя передавать изображение на LCD, по WiFi на другой микроконтроллер или передавать композитное видео по радиоканалу 5,8 ГГц.

    Шина I2C, шина CAN и асинхронная последовательная шина (TX / RX) для взаимодействия с другими микроконтроллерами и датчиками.

    12-разрядный АЦП и 12-разрядный ЦАП.

    Три порта вывода ввода/вывода для управления серводвигателями.

    Прерывания и ШИМ доступны на всех портах ввода/вывода (на плате имеется 10 контактов ввода/вывода).

    RGB LED и два мощных ИК-светодиода с длиной волны излучения 850 нм.

    Матрица OV7725 способна выдавать 8-битные изображения в оттенках серого разрешением 640×480 или 16-битные изображения RGB565 разрешением 640×480, FPS при разрешении выше 320×240 составляет 60 кадров в секунду и 120 кадров в секунду, при разрешении ниже 320×240. Большинство простых алгоритмов будут работать с частотой выше 30 FPS.

    Камера OpenMV поставляется с 2.8-миллиметровым объективом на стандартном креплении M12. Можно использовать более специализированные объективы.

    Возможности OpenMV:

    Разделение кадров для обнаружения движение в сцене.

    Отслеживание цвета — до 16 цветов за один раз в изображении.

    Отслеживание маркеров — обнаружение групп цветов вместо независимых цветов.

    Обнаружение лиц с помощью Haar Cascades.

    Трекинг глаз.

    Оптический поток.

    Обнаружение/декодирование QR-кодов.

    Декодирование линейных штрих-кодов.

    Отслеживание AprilTag.

    Обнаружение линий, кругов, прямоугольников.

    Обнаружение шаблонов изображений.

    Захват изображения — разрешение до 640×480 в оттенках серого/RGB565 формат изображений — BMP/JPG/PPM/PGM.

    Запись видео — разрешение до 640×480 в оттенках серого/RGB565, формат видео — MJPEG или GIF (или RAW-видео).

    OpenMV поддерживает предварительно обученные нейронные сети, позволяющие реализовать распознавание лиц, текста и пр.

    На официальном сайте OpenMV продается по цене 65$, на Aliexpress много предложений по цене от 60$ и выше, нет никакой уверенности, что это оригинальные платы.

    Интересное предложение по цене около 40$ удалось найти на Banggood, после этого уже не было никакой возможности внутренней жабе противостоять желанию попробовать OpenMV в деле. Также пришлось смириться с тем, что цена в 40$ является акционной и никакие другие скидки не действуют.

    OpenMV поставляется в простом антистатическом пакете. В комплекте сама камера OpemMV, шилд для прототипирования с набором гребенок с возможностью сквозного подключения, а также добротный USB-MicroUSB кабель.

    OpenMV - "Ардуино" для машинного зрения

    При первом осмотре платы в глаза сразу бросились спаянные между собой ножки микроконтроллера, на странице товара получить вразумительный ответ не удалось. Пришлось смотреть схему с официального сайта, которая убедила, что так и должно быть.

    OpenMV - "Ардуино" для машинного зрения

    Версия платы M7 от 15.10.2016г. Размер OpenMV — 36×45 мм.

    OpenMV - "Ардуино" для машинного зрения

    OpenMV программируется с помощью IDE OpenMV, которая имеет текстовый редактор, средство просмотра кадрового буфера, позволяющее видеть то, что видит камера, последовательный терминал для отладки и отображение гистограммы для облегчения отслеживания цвета. OpenMV IDE поддерживает русский язык и интуитивно понятна.

    OpenMV - "Ардуино" для машинного зрения

    При первом подключении платы к OpenMV IDE, она предлагает обновить встроенную прошивку до актуальной версии, занимает процесс обновления не более пары минут.

    Одним из не очень приятных моментов является то, что OpenMV IDE просит зарегистрировать вашу плату OpenMV, регистрация естественно не бесплатная. Сообщение о необходимости регистрации появляется трижды при каждом подключении платы, после их закрытия функциональность никак не ограничивается.

    OpenMV IDE содержит множество примеров. Детектирование линий, кругов, лиц работает удовлетворительно.

    Пример отслеживания глаз почему-то не заработал. Я впервые столкнулся с языком Python и для меня не стало проблемой разобраться в примерах и редактировать их на свое усмотрение.

    Пример сохраненного изображения с камеры (в оригинальном разрешении).

    OpenMV - "Ардуино" для машинного зрения

    Примеры обнаружения линий и кругов (в оригинальном разрешении)

    OpenMV - "Ардуино" для машинного зрения

    OpenMV - "Ардуино" для машинного зрения

    Неожиданным моментом стало сильное искажение цветов в режиме изображения RGB565, и высокая чувствительность камеры к ИК-излучению. Я предположил, что на камере не установлен ИК-фильтр, хотя на странице товара об этом ничего не сказано и другие обзоры данного товара этого не подтверждают. С одной стороны это даже является плюсом, так как благодаря наличию на плате ИК-светодиодов есть возможность использования OpenMV в темноте, с другой стороны минус, так как примеры по отслеживанию цвета естественно не работают. Я также задумался дополнительно приобрести или вытащить откуда-нибудь объектив с ИК-фильтром.

    Пример детектирования лица работает с разрешением 240*160 и FPS порядка 22, при этом следует учесть, что параллельно выводится буфер кадра и это замедляет обработку. При блокировке буфера кадра, FPS возрастает более чем в 2 раза, это справедливо для всех алгоритмов.

    OpenMV поддерживает широкий набор периферии: дисплей, wi-fi модуль, ИК-матрицы, AV-шилд, сервоприводы и прочее. Однако цены на дополнительные модули на официальном сайте на мой взгляд весьма не гуманны, а на других площадках ничего найти не удалось.

    Так Wi-Fi-шилд основан на ATWINC1500 и стоит 30$ на официальном сайте, поэтому возникает закономерное желание использовать более дешевые ESP8266 и ESP32. На Aliexpress в продаже есть wi-fi шилд на базе ESP8266, но по цене он не уступает оригинальному, схему же и прошивку продавец не дает. Я планирую купить отдельно ATWINC1500, благо он есть в продаже по цене около 12$ и сделать Wi-Fi-шилд самостоятельно.

    Официальный LCD-шилд основан ан 1,8 TFT с разрешением 160*128 на базе контроллера ST7785, у меня есть в наличии есть лишь дисплей 2,2" 320*240 на контроллере ILI9343, поддержка которого реализована пользователями OpenMV. К сожалению заставить работать данный дисплей с OpenMV мне не удалось.

    У меня в наличии имеется ИК-матрица AMG8833 с разрешением 8*8, поддержка которой заявлена в OpenMV. На прото-шилде был собрана простая подключения AMG8833 к OpenMV по шине I2C. К сожалению, при сборке схемы я не учел необходимость соосного расположения камеры и ИК-матрицы.

    OpenMV - "Ардуино" для машинного зрения

    Есть несколько примеров работы с AMG8833: с выводом на дисплей, с наложением термального изображения на изображение камеры и прочие. Примеры работают, как ожидалось. К сожалению, в примерах не реализована интерполяции изображения с AMG8833, реализовать которую можно лишь на низком уровне, редактируя соответствующую библиотеку.

    Я еще только изучаю возможности OpenMV и языка Python, в планах разработка собственных плат расширения. Я хочу реализовать на OpenMV следующие проекты:

    1. Самонаводящаяся водяная/лазерная пушка.

    2. Счетчик машин (с измерением скорости при использовании допплеровского радара).

    3. GPRS-камера с использованием GPRS-модема.

    4. Тепловизионная камера для удаленного наблюдения.

    Резюмируя можно отметить главные достоинства OpenMV:

    1. Низкий порог вхождения.

    2. Обширная документация и большое количество примеров.

    3. Широкий набор периферийных устройств.

    4. Открытая архитектура.

    Одним из главных недостатков, на мой взгляд, является высокая цена на саму OpenMV и на платы расширения, однако открытость ПО и железа в некоторой степени компенсирует этот недостаток. Также на рынке появились достойные конкуренты OpenMV — Esp32-Cam, Sipeed Maix и прочие, которые однозначно заслуживают внимания.

    P.S

    Недавно на Kickstarter успешно завершилась компания по сбору средств на новую, более мощную версию OpenMV — OpenMV H7, сердцем которой является микроконтроллер STM32H743VI. OpenMV H7 уже доступна для предзаказа на официальном сайте, надеюсь и копии от китайских производителей не заставят себя долго ждать.

    OpenMV стала некоторого рода стандартом в машинном зрении для микроконтроллеров и портирована сторонними разработчиками на другие платформы, такие как i.mx1060 (NXP), k210 (Sipeed).

Оцените статью