Maixduino - доступное машинное зрение


Одним из наиболее интересных направлений в DIY электронике для меня являются платформы с поддержкой камеры. Для себя я веду список, куда заношу заинтересовавшие меня платы, на данный момент в этом списке 57 позиций, конечно, не все из них я планирую приобретать: некоторые слишком дороги, некоторые слишком сложны в использовании для неопытного пользователя. Моя коллекция не быстро, но пополняется, сейчас в ней 6 устройств:
1. OpenMV, о которой я рассказывал ранее и которая не раз будет упоминаться в данном обзоре.
2. Wiscam, о которой возможно еще расскажу.
3. ESP32-Cam, о которой рассказано много.
4. Raspberry Pi 3b + Camera, о которой рассказано очень много, а мне добавить нечего.
5. TTGO T-Camera mini – версия ESP32-Cam от компании LilyGO, о которой возможно тоже расскажу.
6. Maixduino — герой сегодняшнего обзора.

В конце 2018 года был анонсирован чип Kendryte K210. Kendryte K210 — это система на кристалле (SoC), которая объединяет: два 64-битных ядра RISC-V IMAFDC (RV64GC), каждое со встроенным независимым FPU и тактовой частотой от 400 до 600 МГц; Аппаратный ускоритель сверточных нейронных сетей (CNN) KPU; Аппаратный ускоритель аудио APU; SRAM 8 МБ.

Особенности Kendryte K210
— Kendryte K210 — двухъядерный 64-разрядный RISC-V процессор с частотой 400 МГц (разгоняемый до 800 МГц)
— Аппаратный ускоритель KPU CNN
— Аппаратный ускоритель APU с поддержкой до 8 микрофонов, частота дискретизации до 192 кГц
— FPIOA (Field Programmable IO Array), отображающий 255 функций для всех 48 GPIO на чипе.
— SRAM 8 Мбайт общего назначения, включая 5.9 МБ, используемые в качестве памяти AI SRAM
— AXI ROM для загрузки пользовательской программы из SPI-памяти
— Kendryte K210 поддерживает платформы глубокого обучения Tiny-Yolo, Mobilenet и TensorFlow Lite с идентификацией изображений QVGA с частотой 60fps или VGA — 30fps.

Типичные области применения:
Приложения Smart Home (Умный Дом), такие как роботы-уборщики, умные колонки, электронные дверные замки, домашний мониторинг;
— Приложения медицинской промышленности, такие как вспомогательная диагностика и лечение, распознавание медицинских изображений, экстренная сигнализация;
— Приложения Smart Industry, такие как промышленное оборудование, умная сортировка, мониторинг электрооборудования;
— Образовательные приложения, такие как образовательные роботы, интеллектуальные интерактивные платформы, проверка эффективности обучения;
— Сельскохозяйственные приложения, такие как сельскохозяйственный мониторинг, мониторинг вредителей и болезней, автоматизированный контроль и т. д.

Компанией Sipeed были анонсированы модули Sipeed M1 и Sipeed M1W на базе чипа kendryte k210. А в течение года появилось множество плат как от самой Sipeed так и от других компаний на основе данного чипа (в моем списке их 20). Я конечно не мог пройти мимо и активно следил за развитием платформ на его основе. Оптимальной по соотношению цены и комплектации, на мой взгляд, является платформа Maixduino, представленная компанией Seeedstudio. Maixduino представляет собой плату в форм-факторе Arduino uno, которая сочетает модуль Sipeed M1 и ESP32-WROOM-32. На плате также установлен mems микрофон и аудио усилитель. В комплекте идет камера OV2640 и дисплей с разрешением 320*240. Прошивка и питание платы осуществляется через разъем USB-C. За общение с ПК отвечает микросхема CH552, которая представляет собой двухканальный USB-UART конвертер. Таким образом мы можем отдельно получить доступ как к SIPEED, так и к ESP32.
Maixduino

Характеристики Maixduino
ПараметрЗначение
Модуль AISipeed M1 / Sipeed MAIX-I AIoT
Система на кристалле (SoC)Kendryte K210 (CPU+KPU+APU)
Процессор2 x 64-битных ядра RISC-V IMAFDC (RV64GC), каждое со встроенным независимым FPU, тактовая частота 400-600 МГц. 2 x 32Ki I-Cache (Кеш инструкций), 2 x 32Ki D-Cache (Кеш данных); Аппаратный ускоритель сверточных нейронных сетей (CNN) KPU; Аппаратный ускоритель аудио APU
ОЗУ8 МБ встроенной SRAM
ХранилищеСлот для карты Micro SD (TF); Встроенный Flash модуль на 16M
Видео вход24-контактный разъем камеры DVP; Поддерживает видео захват решением до 640×480 @ 30fps; Поддерживает форматы входного изображения YUV422 и RGB565
Видео выходМожет выводить изображения как на KPU так и на дисплей — 24-контактный разъем для 8-битного ЖК-дисплея MCU
Аудио входВстроенный всенаправленный цифровой I2S MEMS Микрофон MSM261S4030H0
Аудио выходDAC+PA: ЦАП TM8211: 16-битный динамический диапазон; Низкое гармоническое искажение; NS4150: выходная мощность 3 Вт, разъем динамика с шагом 1.25 мм; КПД до 90%;
Беспроводная связьМодуль ESP32: Поддерживает 2.4G 802.11.b/g/n 802.11 n (2,4 ГГц), скорость до 150 Мбит/с Полный стандарт Bluetooth v4.2, включая традиционный Bluetooth (BR/EDR) и Bluetooth Low Energy (BLE)
USB1 x USB 2.0 устройство тип C для питания и программирования как K210, так и ESP32 через двухканальный чип CH522
ПериферияArduino UNO-совместимые разъемы с цифровыми входами/выходами/ШИМ, I2C, UART, 6-кратными аналоговыми входами и сигналами питания
ПитаниеUSB Type-C; 6 — 12 В, >600 мА через разъем питания; 4.8 — 5.2 В через Vin
Кнопкисброса (reset) и загрузки (boot)
Индикаторы (LED)Питания (Power), TX-K210, RX-K210, TX-ESP32 и RX-ESP32
Форм-факторArduino Uno
Температурный диапазонот -30 °C до 85 °

Структурная схема Maixduino нанесена на обратную сторону самой платы.

Плата поставляется в пластиковом боксе с фирменной маркировкой Sipeed.

В комплекте сама плата, камера и дисплей

При подаче питания на плуту, если она в порядке, на дисплее появится приветственное сообщение на красном фоне.

Потребление при подключенном дисплее составляет порядка 220 мА.
При подключении к ПК, автоматически устанавливаются драйвера для CH552 — в системе появляются два виртуальных com-порта.

Работать с платой можно, используя предоставляемый производителем SDK, но этот путь для более опытных пользователей. Для менее опытных более удобным вариантом будет использование привычной Arduino IDE или Platformio. Но наиболее удобным вариантом будет использование специализированной IDE — MaixPy и языка MicroPython. MaixPy представляет собой адаптированную OpenMV IDE. Скачать MaixPy можно по ссылке.

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

При первом запуске MaixPy необходимо выбрать соответствующую плату.

Для подключения к Maixduino нужно нажать кнопку в левом нижнем углу и указать правильный com-порт, в моем случае — это первый их двух. При успешном подключении дисплей станет белым.
В отличие от OpenMV IDE MaixPy не содержит встроенных примеров кроме одного. Дополнительные примеры можно найти на Github. Также можно использовать большинство примеров для OpenMV.
Для запуска текущего скрипта необходимо нажать кнопку, расположенную ниже кнопки подключения.
Пример helloworld.py просто выводит изображение с камеры на дисплей и частоту кадров (FPS) в терминал. При активном буфере кадра в MaixPy FPS составляет около 14, буфер кадра можно заблокировать FPS при этом немного увеличится до 16.

Доступны примеры, которые позволяют записывать видео и сохранять фото на MicroSD карту. Также есть возможность воспроизводить видео, аудио и фото с карты памяти.

Kendryte K210 имеет встроенный ускоритель быстрого преобразования Фурье (FFT), работу которого можно проверить запустив скрипт demo_fft_spectrum.py, расположенный в папке hardware. В скрипте необходимо изменить пины шины I2S, к которым подключен микрофон: WS на 19 и SLCK на 18.

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

Для работы с некоторыми моделями нейронных сетей может потребоваться обновление прошивки Maixduino. Инструкция по обновлению прошивки есть на вики. Можно либо собрать прошивку из исходного кода, либо использовать готовый бинарный файл. Мы просто используем последнюю доступную версию 0.5.0_34.

В каталоге шесть файлов:
1. elf_maixpy_v0.5.0_34_ga1b47a3.7z — файл elf, используется для отладки при сбое;
2. maixpy_v0.5.0_34_ga1b47a3_m5stickv.bin — для AI-камеры M5Stack M5StickV;
3. maixpy_v0.5.0_34_ga1b47a3_minimum.bin — минимальный набор прошивок MaixPy, не поддерживаемый IDE MaixPy, не содержит алгоритмы, связанные с OpenMV;
4. maixpy_v0.5.0_34_ga1b47a3_minimum_with_ide_support.bin — минимальный набор прошивок MaixPy, c поддержкой IDE MaixPy, не содержит алгоритмы, связанные с OpenMV;
5. maixpy_v0.5.0_34_ga1b47a3.bin — полная версия прошивки MaixPy (MicroPython + API OpenMV);
6. maixpy_v0.5.0_34_ga1b47a3_with_lvgl.bin — полная версия прошивки MaixPy (MicroPython + API OpenMV + встроенная среда графического интерфейса LittlevGL);

Для прошивки необходимо загрузить kflash_gui для вашей операционной системы (Linux или Windows). На момент написания данной статьи последняя версия 1.5.5. После скачивания необходимо распаковать архив и запустить kflash_gui.exe. Изначально программа запускается на китайском языке, необходимо сменить язык, нажав на кнопку в левом верхнем углу, и перезапустить программу.
Обновление прошивки с помощью kflash_gui

Далее необходимо открыть файл прошивки с расширением *bin. Адрес прошивки по-умолчанию 0x00000. Необходимо выбрать плату и соответствующий com-port, указать бодрейт и скоростной режим прошивки. После того как все настройки указаны — нажать Download. При успешном завершении прошивки появится соответствующее сообщение. При возможных ошибках необходимо проверить соединение платы и компьютера а также правильность выбранного com-порта.
Kflash_gui можно не закрывать, она потребуется для загрузки модели нейронных сетей.
Теперь необходимо скачать предварительно обученные модели нейронных сетей. В данном каталоге три модели:
— face_model_at_0x300000.kfpkg
— mobilenet_0x300000.kfpkg
— mobilenet_7_5_224_tf.h5
«face_model_at_0x300000» — это предварительно обученная крошечная модель Yolo-v2 для обнаружения (человеческих) лиц, а две другие являются мобильными сетями. В данном примере будет запускаться демонстрация Yolo-v2.
Возвращаемся к kflash_gui:
Загрузка модели с помощью kflash_gui

Необходимо открыть файл модели «face_model_at_0x300000.kfpkg», адрес указывать при этом не нужно. Так как файл содержит саму модель и файл *json, в котором указан адрес её загрузки. Значения остальных параметров можно оставить без изменения и загрузить модель в плату нажав Download.
Теперь, наконец, можно переходить к проверке работы детектирования лиц. Для этого нужно запустить MaixPy IDE и открыть пример demo_find_face.py.
import sensor
import image
import lcd
import KPU as kpu
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
task = kpu.load(0x300000)
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    if code:
        for i in code:
            print(i)
            a = img.draw_rectangle(i.rect())
    a = lcd.display(img)
a = kpu.deinit(task)

Первая часть до sensor.run(1) предназначена для настройки камеры, а часть KPU запускается тремя строками:
task = kpu.load(0x300000)
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)

Первая строка загружает модель, которую мы только что прошили по адресу 0x300000. Вторая строка определяет якоря для Yolo V2. Это предопределенная ширина и высота для «приставок» Yolo. Более подробную информацию о значении якорей Yolo можно найти Github. Третья строка запускает Yolo в KPU с пятью параметрами:
— kpu_net: сетевой объект kpu
— threshold: предел вероятности
— nms_value: предел box_iou
— anchor_num: количество якорей
— anchor: параметры привязки, определенные ранее
В цикле while происходит захват изображения, запуск yolo, если лицо обнаружено, отрисовка прямоугольника вокруг лица, вывод результата на экран и повтор цикла. Можно модифицировать код и добавить выполнение определенных действий при обнаружении лица.
Пример работает со скоростью около 11 FPS, которая увеличивается при блокировании буфера кадра.

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

Sipeed запустили онлайн-сервис, с помощью которого можно создать собственную модель и поделиться ей, а также можно скачать модели созданные другими пользователями. Чтобы избежать коммерческого использования моделей, при скачивании необходимо использовать код, сгенерированный непосредственно платой на базе модуля Sipeed. С помощью данного кода скачанная модель привязывается к конкретной платформе, а в скрипте производится проверка соответствия кода.

Сначала необходимо скачать прошивку key_gen и разархивировать её, чтобы извлечь файл key_gen_v1.2.bin.
Используя kflash_gui необходимо загрузить данную прошивку в плату maixduino.

После этого нужно подключиться к maixduino с помощью любой терминальной программы. Во второй строке сообщения от maixduino будет содержаться требуемый код. Если никакого сообщения нет, нужно, не отключаясь от последовательного порта, нажать кнопку reset на плате, чтобы её перезапустить.

Нужно скопировать данный код для дальнейшего использования.
Теперь необходимо зарегистрироваться на maixhub.com и войти на сайт. После этого можно скачать необходимую модель. При скачивании указывается полученный ранее код.
Скачанная модель загружается в плату с помощью kflash_gui.

Примечание: на самом деле файл *kfpkg представляет собой архив, в котором собраны три модели: FD, FE, KP, а также файл прошивки и файл с расширением *json, в котором указаны параметры загрузки всех файлов в память. В настоящее время не поддерживается использование модели распознавания лиц в полной версии прошивки Maixpy, поэтому необходимая прошивка включена в архив. Посмотреть содержимое файла с расширением *kfpkg можно просто поменяв его на *zip и разархивировав. Со временем, содержащаяся в архиве прошивка может устареть и тогда обновив её можно будет заново упаковать всё в файл *kfpkg.

Всё готово для распознавания лиц. Запускаем MaixPy, подключаемся к Maixduino и открываем скрипт demo_face_recognition.py.
Для запоминания лица при его обнаружении нужно нажать кнопку boot на плате. Модель позволяет запоминать 10 лиц. Если коротко, скрипт выполняет следующее:
загружает модели нейросети в оперативную память устройства.
task_fd = kpu.load(0x200000) 
task_ld = kpu.load(0x300000) 
task_fe = kpu.load(0x400000) 

В задаче распознавания лиц используются три модели: — первая (FD) для нахождения лиц, вторая (FE) для нахождения face landmarks (нос, губы, глаза и тд). Затем зная местонахождение face landmarks выравниваем лицо в стандартную позицию и затем при помощи третьей модели (KP) высчитываются так называемые face feature vectors, цифровые репрезентации уникальных черт лица человека. На финальном этапе высчитывается расстояние между двумя векторами и если расстояние достаточно мало, это одно и то же лицо. Нейросеть только высчитывает векторы из изображения, в процессе сравнения векторов нейросеть не участвует.
Работа алгоритма показана на видео. Распознавание работает не всегда корректно, вероятно, влияет освещение и другие факторы.

На maixhub.com можно скачать другие модели. На видео ниже показан пример работы модели, обученной детектировать 20 объектов. Человека детектирует уверенно, а кота и собаку иногда путает.

Немного лучше ракурс и только кот.

Мои впечатления
Maixduino однозначно заслуживает внимания, тех кто интересуется электроникой и в частности технологиями машинного зрения. Она выделяется на фоне ближайших конкурентов OpenMV и Pixy аппаратной поддержкой нейронных сетей и в целом является фаворитом по остальным параметрам.
Параметр/ПлатаMaixduinoOpenMV M7PixyESP32-Cam
ПроцессорKendryte K210STM32F765VILPC4330ESP32
Количество ядер2122
Архитектура64323232
Частота400216204160
Поддержка нейронных сетей на уровне «железа»естьнетнетнет
WiFi нетнетнетесть
Память RAM8192Кб512Кб264Кб512Кб
Память Flash16Мб2Мб2Мб16Мб
GPIO4810636
Пины АЦП01018
ПериферияSPI, I2C, I2S, UARTSPI, I2C, CANSPI, I2C, USBSPI, I2C, I2S, UART, CAN

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

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

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

Примеры машинного зрения в целом работают корректно.
Наверняка могу сказать, что это не последняя моя плата на Kendryte k210.
У меня есть множество идей проектов базе Maixduino, которые, сразу оговорюсь, носят не прикладной, а скорее развлекательный и развивающий характер:
— Замок с распознаванием лица;
— Детектор домашних животных: я хочу натренировать нейронную сеть различать двух моих котов и собаку;
— Термокамера с детектором температуры людей на базе сенсора MLX90640;
— Счетчик людей, автомобилей и пр.;
— Считывание автомобильных номеров;
— Считывание показаний счетчиков и т.д.
Планирую купить +63 Добавить в избранное +94 +153
+
avatar
  • Totka
  • 12 апреля 2020, 23:57
+8
Плата отличная, но есть и конкуренты.

В первую очередь это Teensy 4.0:
www.pjrc.com/store/teensy40.html

Она в США стоит крайне дешево, но вот в других местах найти по адекватной цене дорого. И у многих есть 3.6 версия этой платы, код вполне совместим, ну правда распиновка другая. Она немного греется.

Потом почему-то в статье сравнение с OpenMV M7, когда уже давно есть OpenMV H7 и скоро будет H7 plus (уже доступен, впрочем) с лучшей камерой. Да и устройства абсолютно разные. OpenMV совсем другой софт для разработки использует, в питоне пару строчек кода — против полноценного сишного кода. Также она хороша теми же модулями и своим крошечным весом, то есть мастхэв для авиамоделей.

Ну и конечно не стоит забывать, что raspberry pi 4b 2Gb стоит 40-50 баксов. И к ней не SPI мусорный оверпрайс дисплей 320 на 240 и с трудом добываемый ips + контроллер старый, а полноценный mipi->hdmi 2560 на 1440 за 25 долларов на таобао (главное без снятой для 3д принтеров длпшных или как их там задней части не купить по ошибке, а фулл подсветка и плита), ну на али кстати почти в 2 раза дороже контролер тошибовский + дисплей. Любой дюймовки, от 5.5, 6 есть, 8 есть и 10+, а также сенсорную панель. Также есть 4к диплеи, но на 4к надо 4Гб малинку брать, а она как раз на 20 баксов дороже стоит.

Да, нагрев и потребление тока выше, но достаточно 1 раз взглянуть на дисплей, как стоит навсегда попрощаться с этими огрызками 320 на 240, которые еще программировать подачу кадров уметь нужно, чтобы фпс не потерять.
+
avatar
  • Lucky13
  • 13 апреля 2020, 00:07
+1
Потом почему-то в статье сравнение с OpenMV M7, когда уже давно есть OpenMV H7 и скоро будет H7 plus
Да вы правы, есть более мощные версии OpenMV, просто у меня есть именно M7. А сравнение в целом с OpenMV, потому что прошивка Maixduino поддерживает алгоритмы машинного зрения OpenMV. Тоже самое и с IDE: MaixPy — это адаптированная OpenMV IDE.
+
avatar
  • Totka
  • 13 апреля 2020, 00:12
+1
А, так она тоже это умеет. Тогда совсем другое дело.

На таобао H7 толкают по 400 юайней (/7 в долларах), а плюс вообще за 600. А эта платка стоит в районе 150 юаней.

Модули для крепления дисплея опенмв тоже оверпрайс жуткий, правда флир лептон плата камеры стоит недорого, но его и самому сделать легко там 3 питальника, кондеры и резисторы простейшая обвязка для SPI и i2c.

Тогда можно за исключением дронов нафиг послать openmv, если живешь не в США, где он стоит дешевле Китая.
+
avatar
  • Lucky13
  • 13 апреля 2020, 00:19
0
Тогда можно за исключением дронов нафиг послать openmv
Если критичен вес и размеры, можно выбрать другой вариант платы на Kendryte 210, например m1n

Размеры 22x25 мм и цена порядка 15$
+
avatar
  • Totka
  • 13 апреля 2020, 00:38
0
Ого, а что это за монстр. М.2 слот какой-то странный с сочетанием таких размеров и веса. Вот это мне нравится, надеюсь к ней наклепают креплений на раму и переходников под парочку SPI через GPIO пины.

Выглядит как новый хит на ближайшие 3 года по характеристикам. Только бы без багов и перегрева.
+
avatar
  • Agitech
  • 13 апреля 2020, 10:39
0
del
+
avatar
  • manatu
  • 16 апреля 2020, 23:49
0
А где такая продается Kendryte 210?
+
avatar
+1
полноценный mipi->hdmi 2560 на 1440 за 25 долларов на таобао
ссылку дайте, пожалуйста
+
avatar
0
А попробуйте ей фотопортрет дать — распознает лицо ;)?
+
avatar
  • Lucky13
  • 13 апреля 2020, 00:08
0
С фото работает примерно так же. А чтобы запомнить реальное «живое» лицо и подсунуть фото нужно проверить.
+
avatar
  • Romureg
  • 13 апреля 2020, 00:18
0
Однозначно плюс за статью. Будет также интересно ознакомиться с проектами на ее основе.
Какой угол обзора у камеры? С таким разрешением боюсь рабочее расстояние будет очень небольшим. Ну для развлечения или в образовательных целях конечно это менее важно…
+
avatar
  • Lucky13
  • 13 апреля 2020, 12:38
0
Какой угол обзора у камеры?
Если я не ошибаюсь, угол обзора у камеры составляет 62°
+
avatar
  • deem0n
  • 13 апреля 2020, 00:49
+1
А как машинное зрение применяется для мониторинга электрооборудования? Это имеется ввиду считывание показаний счётчиков, положений автоматов? Или что то другое?
+
avatar
+4
Никак. Я в своё время весь интернет перерыл. Либо всё коммерческое, либо невнятные куски кода, например на хабре, которые имеют не то, что подводные камни, а целые подводные горы.
Или я не прав? Есть, например, код для esp32-cam делающий хоть что-то полезное, кроме детектинга лица?
А учитывая то, что невозможно эти операции по анализу и распознаванию видео делать оффлайн, то оно вообще мало кому надо становится.
+
avatar
  • Lucky13
  • 13 апреля 2020, 12:51
0
Есть, например, код для esp32-cam делающий хоть что-то полезное, кроме детектинга лица?
Да, я не встречал других примеров из машинного зрения для ESP32-cam кроме детектинга и распознавания лиц. Но оно как бы для этого особо не предназначено, а для чего оно вообще предназначено, это конечно вопрос. У меня тоже есть в наличии пара плат с камерой на ESP32. Планировал как раз использовать в качестве дешевых ip-камер, для временного мониторинга каких-либо процессов или для какой-нибудь машинки на радиоуправлении.
А учитывая то, что невозможно эти операции по анализу и распознаванию видео делать оффлайн, то оно вообще мало кому надо становится.
Особенностью платформ на основе Kendryte k210 как раз является то, что операции по машинному зрению выполняются оффлайн.
+
avatar
+2
не встречал других примеров из машинного зрения для ESP32-cam кроме детектинга и распознавания лиц.
Ну детектинг я видел и сам пробовал. Зачем оно просто не представляю. Ну один кейс — если кто-то движется, то можно определить человек ли это или кто-то другой. Ну чисто теоритически. На практике сто пудов фигня получится. А по распознаванию лиц проектов не встреал. Вернее встречал, но они все начинаются — "… вот подключаем эту вот облачную систему, она всё сделает сама...", а ESP со всеми приблудами это лишь фотик, который туда картинку сливает, ни больше ни меньше. Такое не интересно совсем, ибо все мы знаем, что технологии шагнули вперёд, и кто-то нам всегда может что-то сделать.., но я не хочу зависеть от этого «Кто-то».

Особенностью платформ на основе Kendryte k210 как раз является то, что операции по машинному зрению выполняются оффлайн.
Да, читал. Даже было на хабре про это. Но это, имхо, фуфло. Примеров кода 0,000. Ни одного. Совсем. Ни одного рабочего примера, где произошло бы распознавание цифры какого-либо счётчика, или распознавание лица, или код который мог бы отличить человека от шкафа, или кота от табуретки.
Ну к примеру, я производитель железки. Я её сделал, я заявляю суперфункционал. Я заинтересован чтоб железка продавалась? Наверное да. Как увеличить продажи? Наверное доказать всем, что она реально работает, дать людям рабочий компект и возможность выбора функционала (железка + хотябы несколько библиотек которые работают из коробки). Ну что я говорю… Есть Ардуино, взлетела, всё просто и всем понятно.
Тут производитель тупо налепил чипов на плату, пихнул это в свой магазин, и говорит — «берите, плата огонь, потом сами разберётесь что к чему. Или нет. Мне пофиг.»
Я вообще один раз только видел что плата работает. Один какой-то азиат показал это на ютубе. Всё. Ни кода, ни примеров, ни объяснений. Вот работает, посмотрели? Круто! Вааау… До свидания.

P.S. Я сейчас очень хочу оказаться не прав. Я очень хочу чтоб мне сейчас написали — «Да ты балбес, учись гуглить, вот тебе десяток готовых кодов, залил — работает! Вот сайт, вот ещё восемь сайтов. Вот стопитсот три библиотеки. А вот семьдесят шесть реальных проектов. Всё же работает!!» Но, чёт кажется, что не будет такого. Ещё очень долго не будет. А по сему не вижу смысла даже смотреть на эти железки, если ты реально не написал с нуля ни одного проекта по компьютерному зрению, сам, с нуля.
+
avatar
  • leonbk
  • 13 апреля 2020, 02:54
+1
Открыл для себя новую интересную тему
+
avatar
  • Hector
  • 13 апреля 2020, 06:34
0
Идея проекта,:
— собрать самому Tesla
+
avatar
  • Megapey
  • 13 апреля 2020, 12:46
+1
и запустить на орбиту с манекеном и под музычку
+
avatar
+7
Хочу, чтобы отличало чужого кота и брызгало в него водичкой
+
avatar
+8
Получился обзор «возможностей» платы. Вот есть такая штука, вот так она может работать. Вот также я полтора года назад увидел рекламу esp32-cam, увидел как всё круто и красиво и кинулся с деньгами к продавцам.
А уже когда плата на стенде оказалась увидел насколько всё плачевно. Примеров кода практически нет, и это делает плату бесполезной для 99% купивших, ибо далеко не все программисты, и уж тем более не все работают в области машинного зрения. Ну да ладно, есть пример тупо камеры, решил как микро ip камеру юзать. А не тут-то было. Через 3 минуты выяснилось, что оно просто адски греется и начинает виснуть, работать длительно можно только на сверхнизком разрешении — 120х80, и, как оказалось, длительно это около 30минут. Потом опять перегревается и падает. Потом помехи. Всё изображение в помехах и полосах, которые то бывают, то отсутствуют. В итоге оно просто несколько дней проработало у меня ip фотиком, делало фотки счетчика воды. Потом отправилось в долгий ящик. Сейчас использую в одном ресурсоёмком проекте не связанным с компьютерным зрением, просто в этом модуле дофига оперативки и есть слот под sd.
+
avatar
0
Проектов интернет радио для него еще нет?
+
avatar
  • Lucky13
  • 13 апреля 2020, 12:52
0
Не встречал.
+
avatar
  • Sanja
  • 13 апреля 2020, 12:59
+1
Если хочется поиграть в embedded AI, лучше Jetson Nano нету. Да, ценник выше, но зато за продуктом стоит NVIDIA, горы документации, коммьюнити. А с подобными поделками велик риск, что вы настолько закопаетесь в вопрос «как это заставить работать», что до дела не дойдёт.

NVIDIA же с полоборота предлагает отличные курсы, бесплатно — как завести PyTorch, как клепать регрессионные модельки, классификаторы: courses.nvidia.com/courses/course-v1:DLI+C-RX-02+V1/about

+
avatar
0
Если хочется поиграть в embedded AI, лучше Jetson Nano нету.
Ну да. Конечно.
продуктом стоит NVIDIA
И что? Ну стоит. Мне от этого чего? Сегодня стоит. Год покажет, что продалось семь плат из тысячи произведённых, проект похоронят. И уже не стоит.
горы документации, коммьюнити.
NVIDIA же с полоборота предлагает отличные курсы, бесплатно
Ну круто. Очень круто. А они к обучению с десяток самых востребованных примеров работающих из коробки приложить не хотят? И что-то я не вижу кучи проектов, кучи обзоров. Чтоб куча самоделкиных трезвонила — вот, смотрите, делаю обзор на этот проект и плату, вот оно находит а потом распознаёт лица, А вот тут она номера автомобилей логирует. А вот код проекта…
А такого нет. И не будет ровно до тех пор, пока производитель не выложит САМ подобный код с открытым доступом для всех. Но почему они этого не делают? Не знаю. Либо это тупо не работает с технической точки зрения. Либо работает, но все разработчикам дают заработать. Потому что я видел различные проекты по определению цифр со счётчиков, по определению лиц, но в описании было типа того — " Вася. Умею писать проги по тех зрению, выполню любой ваш заказ. [email protected]".
А с подобными поделками велик риск, что вы настолько закопаетесь в вопрос «как это заставить работать», что до дела не дойдёт.
Как и вообще с любой железкой, для которой производитель не предоставил рабочий код с реальными примерами, можно долго сидеть на форумах, долго переписываться с производителем, долго искать решения. А должно быть так, что решения искать не нужно. Решение сразу должно лежать в коробке с готовым изделием. И именно то решение, на столько максимальное, на сколько круто производитель позиционирует плату, а не на половину и не на чуть-чуть.
+
avatar
  • Sanja
  • 13 апреля 2020, 16:01
+3
Если вы не знаете, каким боком Nvidia к AI (подсказка — гуглить по словам «tensor cores») — то вы или пробыли в тайге пять лет, или катастрофически не в теме.
+
avatar
-1
вы или пробыли в тайге пять лет, или катастрофически не в теме
Я катастрофически не в теме. Но не думаю, что это моя проблема. Скорее это проблема с маркетингом и раскруткой у нвидиа. Ведь я знаю об ардуино. Я знаю о esp32-cam, я наслышан о Kendryte k210. Также я слышал и о джетсоне, но меньше. Тут может цена роль играет, всётаки 6$ и овер$110 вещи разные. Но меня лично даже 300-500 баксов не пугают, если гарантирован 100% результат. Ну как бы купил, выбрал из репозитория скетч, залил — работает, но такого никто не предлагает.
+
avatar
  • Sanja
  • 13 апреля 2020, 19:15
+1
Если верить этому графику, у NVIDIA всё хорошо — компания уделывает остальной NASDAQ по росту даже в нынешние обвальные времена:



Но не думаю, что это моя проблема.
К сожалению, таки ваша. Весь этот машинлёрнинг ещё не совсем опустился на уровень «собери из кубиков». Если простому потребителю нынче надо распознавать лица в дверной глазок — то ему продают готовую камеру Ring, которая всё это сделает «из коробки»:



Самое простое, что сейчас есть уровня «из кубиков» — это studio.azureml.net/

Если хотите «hello, world» — то без вкуривания либо docs.opencv.org/master/d9/df8/tutorial_root.html, либо книжки по PyTorch или TensorFlow всё таки никак.
+
avatar
  • Sanja
  • 13 апреля 2020, 16:09
+1
По поводу готовых примеров — учите английский.

Вот сейчас, например, тыкаю палочкой только что прилетевший отличный проект github.com/devendrachaplot/Neural-SLAM#active-neural-slam — статья, моделька под PyTorch, видео, рабочие материалы — всё выложено, бери играйся.



Картинки интерьера, кстати, собраны с помощью Locobot — это такая совершенно опенсорсная платформа на NUC и Kobukibase, чертежи и все исходники софта доступны бесплатно:

+
avatar
+2
По поводу готовых примеров — учите английский.
Пусть гугл учит, чтоб мог для меня успешнее переводить ))
Да, Вы правы. Примеры есть. Но опять полистал по лазил, ну не то всё. Я не встретил банального вселенского примера, который как «Hello world!» на ардуинах, который как любой ардуинщик метеостанцию делал, так и тут — пример распознавания цифр с автомобильного номера, или пример распознования цифр со счётчика воды, или пример распознавания (не поиска) лица. Нет их. Есть мелкие наработки. Опять же туториалы с большим входным порогом, типа установите это, вот это и вон то, а это соберите сами, и вот потом сделайте так. Ну нет ничего с низким входным порогом, что-то типа: тут качни образ для флехи, залей его на флеху. всунь её в Raspberry, ВСЁ, готово, ваш, условно хоум ассистент уже работает.
А как только дело доходит до действительно банального и нужного кода, то вот:
Дополнительная информация


А что ж там за такой крутой проект? Определяет лица людей, заносит в базу, определяет национальность и примерный возраст? Может скорость транспортных средств определяет и их номера? Нет. Ничего подобного.
Определяет только тип транспортного средства и считает их количество. Всё.

Но тем не менее автор оценивает свою работу высоко. Имеет права, да и не мне судить, я ничего подобного не сделал. Но для общего понимания объясню — в камерах Bosch серии 5000 есть встроенная видеоаналитика, да, прям в камерах, это идеология Bocsh, делать аналитику именно в камере. Камера имеет акселерометр. Камера знает знает свою высоту установки и угол к горизонту (калибруем при установке) и далее камера самостоятельно определяет: тип объекта(человек, животное, транспортное средство(велосипеды, мотоциклы, легковые автомобили, автобусы, грузовики....)) цвет объекта, размер объекта(довольно точно). И может считать сразу или пересчитывать потом информацию по количеству, по цвету, по размеру, и т.д. С этими камерами я познакомился около пяти лет назад. Мне дико смотреть когда это покрывают коммерческой тайной. Также дико как пять лет назад один форум по ESP8266 прошивки продавал, типа вот с датчиком температуры бесплатно, а если ещё и влажность хочешь, то сотку доплати. Но благо для ESP сделали возможность кодить в Arduino IDE, и вся коммерция отвалилась. Надеюсь скоро подобная революция и в сфере технического зрения произойдёт. Снимется монополия с узкого круга программистов, и не только они и государство сможет вести свою аналитику. Прогресс неизбежен.

+
avatar
+4
буквально этот мем
+
avatar
  • bazis13
  • 13 апреля 2020, 22:47
0
А почему нельзя использовать старый телефон на андроиде? Мощности не хватит?
Распознавание лиц уже в операционку встроено. Камеры прекрасные, софт писать — куча примеров.
Плата телефона без аккумулятора и дисплея меньше ардуины. GPIO можно через OTG вывести.
+
avatar
  • Lucky13
  • 13 апреля 2020, 23:08
0
Мощности, я думаю, хватит с лихвой. Но написать софт куда сложнее, чем на ардуино или том же MicroPython, по крайней мере для меня. С примерами тоже всё не очень, большинство уроков программирования на андроид заканчиваются «Hello world». Системы визуального программирования также не дают доступа к таким функциям как работа c USB и распознавание лиц. Облачная обработка изображений с камеры требует наличия интернет-соединения. Плату телефона без дисплея вы вряд ли запустите. Это как я вижу.
+
avatar
  • bazis13
  • 13 апреля 2020, 23:26
0
с разбитыми экранами работают телефоны. Правда полностью отключать контроллер дисплея я не пробовал. В крайнем случае можно этот шлейф оставить.
С такими платами для таких серьезных задач лично мне не захотелось бы связываться прежде всего из-за малого сообщества и небольшой поддержки от производителя. Через год платы будут другие и к этой уже никаких обновлений софта, а программа на андроиде более универсальная и живучая.
+
avatar
  • Shara
  • 25 апреля 2020, 04:01
0
Вся беда — с драйверами.

Вот проект с попыткой переиспользовать смартфонное железо janos.io/
Поддерживается чуть более, чем ничем.