Начало работы с платой Maixduino на базе Sipeed M1 и Grove AI HAT для Raspberry Pi


В прошлом году был выпущен процессор Kendryte K210 с ядром RISC-V и с ускорителями искусственного интеллекта для машинного зрения и слуха. Вскоре после этого был запущен модуль Sipeed M1 с процессором за 10 долларов.

Затем, в том же году, появились платы для разработки с модулем Sipeed M1, такие как Maixduino или Grove AI Hat. Компания Seeed Studio прислала нам последние две платы для обзора. Итак, начнем с того, что покажем полученные устройства, а затем рассмотрим, как начать работу с кодами MicroPython и Arduino. Обратите внимание, что мы будем использовать Ubuntu 18.04, но также возможна разработка с Windows.

Распаковка

Мы получили две коробки — одна с комплектом Maixduino и другая «Grove AI HAT для граничных вычислений».

Grove AI HAT для граничных вычислений

Начнем со второго. Плата представляет собой Raspberry Pi HAT с модулем Sipeed M1, 40-контактным разъемом Raspberry Pi, 6-ью разъемами Grove, а также разъемами для камеры и дисплея. Порт USB-C используется для программирования и питания в автономном режиме.

Есть также разъемы для платы, во время распаковки их не видно. 

На нижней стороне нет ничего, кроме нумерации выводов ввода-вывода и места крепления камеры.

Позже мы также получили камеру для платы.

Комплект Maixduino

Вторая коробка включает в себя плату, совместимую с Maixduino Arduino, с модулем Sipeed M1 и модулем ESP32. Камера уже подключена к плате, и 2,4-дюймовый цветной дисплей (разрешение QVGA) также является частью комплекта.

На нижней стороне платы находится подписи-названия выводов разъемов, а также изображение блок-схемы платы.

Начало работы с Maixduino Kit с использованием MicroPython

Начнем с Maixduino, попробуем следовать инструкциям из Вики и других Интернета-ресурсов, поскольку иногда он бывает неполным или неточным.

Существует 4 метода разработки/SDK :

  • MaixPy (MicroPython)
  • Maxduino (Arduino)
  • Kendryte SDK, официальный SDK Kanji, предоставляющий базовый API
  • RT_Thread — поддержка RT-Thread

Мы будем использовать первый. 

Но, сначала давайте подключим кабель USB тип C и посмотрим, что произойдет.

Появляется приветствие «Welcome to MaixPy», написанное на красном фоне.

Обновление прошивки

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

Мы просто используем последнюю доступную версию.

В каталоге четыре файла:

  • elf_maixpy_v0.4.0_39_g083e0cc.7z — файл elf, используется для отладки при сбое
  • maixpy_v0.4.0_39_g083e0cc_m5stickv.bin — для AI-камеры M5Stack M5StickV
  • maixpy_v0.4.0_39_g083e0cc_minimum.bin — минимальный набор прошивок MaixPy, не поддерживаемый IDE MaixPy, не содержит алгоритмы, связанные с OpenMV
  • maixpy_v0.4.0_39_g083e0cc.bin — полная версия прошивки MaixPy (MicroPython + API OpenMV + встроенная среда графического интерфейса LittlevGL)

Используем их позже, но прежде чем двинуться дальше, самостоятельно добавим  dialout и установим некоторые правила udev, чтобы иметь доступ к / dev / ttyUSB? как обычный пользователь:

Создаем файл /etc/udev/rules.d/50-usbuart.rules со следующей строкой:

Теперь загружаем последнюю версию программы kflash_gui для вашей операционной системы (Linux или Windows). Мы получили версию 1.5.3, распаковали ее и запустили:

Теперь мы можем открыть файл прошивки, выбрать Sipeed Maixduino, а также последовательный порт. Для этого заглянем в журнал ядра (dmesg), чтобы узнать:

Мы мельком просмотрели и заметили только последнюю строку с ttyUSB1, где имеются некоторые ошибки …

Попытаемся проделать тоже самое с помощью утилиты командной строки Python, и те же результаты:

Мы задали вопрос компании Seeed Studio, и нам посоветовали использовать другой порт, и это сработало!

Глядя на журнал ядра выше, мы видим, что ttyUSB0 и ttyUSB1 заданы Maixduino, и оглядываясь назад, это, вероятно, объясняется тем, что мы можем получить доступ к процессорам ESP32 и Kendryte K210 через разные последовательные порты через один USB-кабель.

Однако, когда мы подключаемся к / dev / ttyUSB0 через Minicom (115200 8N1), кажется, что проблема с прошивкой:

MaixPy версии 0.4.0, которую мы использовали, является предварительной версией прошивки, поэтому переходим на MaixPy 0.3.2, которая считается стабильной версией. На этот раз мы используем инструмент командной строки:

Давайте посмотрим вывод с последовательной консоли:

Все хорошо. Давайте попробуем получить больше информации с help():

Появляется список модулей, и мы можем, используя help (‘<module_name>’) получить список функций для каждого модуля. Это не самый удобный способ обучения, поэтому давайте вернемся к Wiki и проверим образец, чтобы сделать снимок и показать его на дисплее:

Фактический выход в терминале:

Мы действительно можем видеть выход камеры на прикрепленном дисплее.

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

Мы хотели использовать последнюю версию MaixPy IDE 0.2.4, для которой требовалось встроенное ПО 0.4.0 или выше. Нам не повезло с 0.4.0.39. Мы обратили внимание на то, что новая версия была построена 16 августа, поэтому сохраняем ее:

На этот раз плата загрузилась. Устанавливаем и запускаем MaixPy IDE в Ubuntu 18.04:

Последняя строка запускает IDE с программой hello world по умолчанию.

Теперь мы должны выбрать Maixduino в Инструменты-> Выбрать плату :

Нажимаем на значок зеленой скрепки в левом нижнем углу идентификатора и выбираем /dev/ttyUSB0, чтобы подключиться к плате, и как только это будет сделано, нажимаем кнопку «Play» внизу, чтобы загрузить и запустить пример Hello World на Maixduino.

В верхней правой зоне показан фактический буфер кадра, а также три зоны под гистограммами R, G и B.

Основной особенностью процессора K210 является его KPU AI/ ускоритель машинного зрения. Есть документация.

Сначала давайте загрузим модели:

Есть три:

«Модель лица» — это предварительно обученная крошечная модель Yolo-v2 для обнаружения (человеческих) лиц, а две другие являются мобильными сетями. Мы будем запускать демонстрацию Yolo-V2.

Мы можем вернуться к kflash_gui, загрузить модель и нажать «Загрузить», чтобы перенести ее на плату.

Теперь мы можем написать (скопировать/вставить) код Yolo2 в IDE:

Первая часть до sensor.run (1) предназначена для настройки камеры, как мы это делали в предыдущем примере, а часть KPU запускается тремя строками:

Первая строка загружает модель, которую мы только что прошили по адресу 0x300000. Вторая строка определяет якоря для Yolo V2. Это предопределенная ширина и высота для «приставок» Yolo. Более подробную информацию о значении якорей Yolo можно найти на Github. Третья строка запускает Yolo в KPU с пятью параметрами:

  • kpu_net : сетевой объект kpu
  • threshold : предел вероятности
  • nms_value : предел box_iou 
  • anchor_num : количество якорей
  • anchor : параметры привязки, определенные ранее

Цикл while в значительной степени говорит сам за себя: захват изображения, запуск yolo, если лицо обнаружено, очертите прямоугольник, выведите результат на экран и повторите цикл.

Но действительно ли это работает?

Да. Распознавание выполняется в среде IDE со скоростью около 11 кадров в секунду, но оно будет быстрее при работе в автономном режиме. Поэтому мы добавили код, который нашли в демо-версии MaixPy Dock от Тициано Фиорензани, показывающей fps в левом верхнем углу экрана:

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

Обнаружение/отслеживание лица выполняется со скоростью от 15 до 18 кадров в секунду, и наш друг-панда не был обнаружен, но это, вероятно, скорее функция, чем ошибка, так как модель должна быть обучена на обнаружение человеческих лиц. В наши предыдущие попытки, панда, периодически, обнаруживалась, но не так хорошо, как человеческое лицо.

Вы можете использовать функции ESP32, такие как WiFi и/или Bluetooth, но, к сожалению, для этого нет документации. Мы обратились к руководству ESP32 Micropython для настройки WiFi, но он не работал:

Мы полагаем, это нормально, так как мы запускаем это в K210 вместо ESP32. Мы надеялись, что разработчики как-то адаптировали его. Взглянув в раздел help, реализовано лишь несколько функций:

Невозможно использовать /dev/ttyUSB1 для подключения к ESP32, поэтому может потребоваться немного больше работы ..

Если вы хотите обучать и запускать свои собственные модели на Maixduino, используя Keras, сообщение на форуме содержит рекомендации, как это сделать.

Начало работы с Grove AI HAT

Автономный режим

Давайте переключимся на другую плату: Grove AI HAT, которая работает как в автономном режиме, так и подключенная к Raspberry Pi. Мы обратились к Wiki в, где показано, как использовать плату в автономном режиме с Arduino IDE, пропустив материал GPIO/Grove и переходя непосредственно к разделу камера, дисплей и компьютерное зрение.

Подключаем камеру типа «рыбий глаз», вставляем контактный разъем и позаимствуем дисплей из комплекта Maixduino. Обратите внимание, что вы также можете использовать камеру Maixduino с Grove AI HAT, но, обнаружение лиц и отслеживание не работают.

Мы предполагаем, что вы уже установили Arduino IDE на свой хост-компьютер. Для справки, мы используем Arduino 1.8.9 в Ubuntu 18.04.

Сначала нам нужно перейти в File-> Preferences и отредактировать «URL-адреса диспетчера дополнительных плат» со следующим URL-адресом, чтобы добавить поддержку плат Seeed Studio:

Также обратите внимание на путь «Дополнительные настройки можно редактировать прямо в файле», так как позже мы увидим этот каталог.

Теперь перейдите в Tools-> Board-> Boards Manager и найдите «k210». Нажмите «Установить», когда увидите «Grove AI HAT for Edge Computing от Seeed Studio».

Через некоторое время у вас все получится, и вы можете выбрать Seeed K210 Pi и убедиться, что выбран «k-flash» программатор и / dev / ttyUSB0, как показано ниже.

Теперь установите автономный SDK Kendryte в свой рабочий каталог:

Файл модели необходимо вручную перенести на плату(здесь мы используем путь в настройках, как указано выше):

Вот вывод последней команды, если все идет по планам:

Теперь вернитесь в свой рабочий каталог и создайте папку и пустую схему с тем же именем, в нашем случае «face_detect»:

Скопируйте содержимое face_detect из SDK:

Теперь откройте face_detect.ino в Arduino IDE. Это автоматически откроет кучу других файлов, включая board_config.h, который нам нужно изменить, чтобы включить датчик OV2640 и плату LICHEEDAN, как показано ниже.

Вы можете перейти на main.c для изучения кода, но для его понимания потребуется немного больше усилий, чем для примера Maixduino MicroPython. Если вы просто хотите попробовать, вы можете проверить, компилируется ли он. У нас было несколько предупреждений из-за неиспользованных переменных:

Но скомпилировано нормально:

Теперь мы можем загрузить схему прямо из IDE:

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

Дисплей был вверх ногами. Исправлено небольшое изменение в коде (см. Строку 5 ниже):

Это похоже на демонстрацию Maixduino выше, но вместо того, чтобы полагаться на MicroPython, мы сделали это в Arduino IDE.

Grove AI HAT и Raspberry Pi 4

Поскольку у нас есть плата HAT, было бы стыдно, если бы мы не использовали ее с платой Raspberry Pi. Поэтому, вставляем плату в Raspberry Pi 4 SBC. Убедитесь, что перемычка RPI 5В на верхней части платы Grove AI HAT установлена ​​в положение ON.

Первое, что нам показалось интересным, — это разработка кода непосредственно на Raspberry Pi 4. Поэтому, устанавливаем Arduino 1.8.9 для Arm 32-bit и загружаем URL-адрес платы Seeed Studio на основе приведенных выше инструкций.

Но, когда мы попытались установить «Grove AI HAT для Edge Computing от Seeed Studio», мы быстро столкнулись с препятствием:

Сообщение выше: «Инструмент kflash недоступен для вашей операционной системы», а также «Инструмент kendryte-standalone-sdk недоступен для вашей операционной системы». Не удивительно, что инструменты Kendryte K210 (пока) недоступны для Arm.

В качестве примечания, используя Raspberry Pi 4 с 1 ГБ, запускать Chromium было бы не очень хорошей идеей, даже с одной вкладкой и Android IDE, поскольку памяти недостаточно, и он полностью заполнит 512 МБ на карте microSD. Даже с ZRAM нет никакой надежды, поэтому, если вы когда-нибудь рассматривали возможность запуска Arduino IDE на Raspberry Pi 4 (например, для плат Arduino), а также просматривали документацию, приобретайте версию RAM объемом 2 ГБ или 4 ГБ.

Тем не менее, еще один способ использования Grove AI HAT с Raspberry Pi — это отображение данных. Как объясняет Seeed Studio в своем демонстрационном руководстве по подсчету лиц . Давай попробуем.

Установили Arduino IDE и установили демо-прошивку face. Теперь мы можем просто установить программу Face Count на Raspberry Pi:

Однако, при запуске возникает ошибка:

Давайте посмотрим на setup.sh:

Мы видим, как Grove AI HAT связывается с платой Raspberry Pi через SPI,  и изменяется файл /boot/config.txt. Поэтому перезагружаем систему, но проблема та же. Каталог установщика содержит множество бинарных библиотек, которые были протестированы на Raspberry Pi 3 B + с Debian Wheezy, поэтому переход на Raspberry Pi 4 с Debian Buster, вероятно, привел к ошибкам. Мы сообщили об этом в Seeed Studio, и они изучают это.

Завершим обзор демонстрацией видео по распознаванию лиц, запущенной на Grove AI HAT, к которой снова присоединились несколько «друзей».

Все работает примерно так, как и ожидалось. Отфильтровалось большинство наших друзей, не являющихся людьми, и получилось до 3-4 лиц одновременно с фотографии.

Покупка плат, дисплеев и камер

Хотелось бы поблагодарить Seeed Studio за отправку платы и предоставленной нам возможности поэкспериментировать с платформами Kendryte K210/Sipeeed M1 с использованием MicroPython и Arduino. Если вы хотите воспроизвести наш опыт, вы можете купить Grove AI Hat за 28,90 долларов, камеру «рыбий глаз» OV2640 за 7,60 долларов и/или комплект Maixduino с платой, дисплеем и камерой за 23,90 долларов.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.