К содержимому
  1. Главная
  2. Документация
  3. Камеры для Arduino и MCU
  4. Как сделать волшебную палочку на Arducam Pico4ML-BLE с Edge Impulse

Как сделать волшебную палочку на Arducam Pico4ML-BLE с Edge Impulse

Документация Arducam · перевод arducam-russia.ru

1. Почему Arducam Pico4ML-BLE?

Хотите сделать собственную волшебную палочку? Для этого нужна только плата Arducam Pico4ML-BLE.

Pico4ML-BLE — это Pico4ML с добавленным модулем BLE для связи по Bluetooth.

Плата чем-то похожа на Arduino Nano 33 BLE. По данным Arducam, с этим обновлением Pico4ML стал самым универсальным комплектом разработчика для машинного обучения на рынке. Добавлен только Bluetooth, но благодаря веб-клиенту на основе WebBLE плата умеет беспроводной сбор данных, обучение и обновление модели. Собранные данные скрипт конвертации от Arducam переводит в формат, который читает Edge Impulse, после чего выполняется трансферное обучение модели.

Плата Arducam Pico4ML, артикул B0330
Pico4ML, артикул B0330

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

В этом приложении можно открыть сайт на JavaScript, который взаимодействует с вашими устройствами Bluetooth с низким энергопотреблением (BLE).

Так можно писать собственные приложения для работы с устройства на iOS.

СоветEdge Impulse — ведущая, по оценке Arducam, платформа разработки машинного обучения для периферийных устройств: бесплатная для разработчиков, ей доверяют предприятия. Платформа занимается обучением и развёртыванием искусственного интеллекта на периферийных (встраиваемых) устройствах и упрощает работу с ИИ. В Arducam считают, что она станет следующим отраслевым стандартом (как Arduino, сильно повлиявшая на встраиваемые системы), и поддерживают Edge Impulse, чтобы расширить её аудиторию.

На примере волшебной палочки ниже подробно показано, как выполнить трансферное обучение в Edge Impulse и развернуть модель на Pico4ML-BLE.

2. Сбор данных для собственного проекта волшебной палочки

КраткоВ этом разделе вы запишете собственные жесты, а в следующем — обучите на них свой проект волшебной палочки.

2.1. Загрузка файла magic_wand.uf2

Скачайте файл magic_wand.uf2 в любую удобную папку.

2.2. Прошивка файла magic_wand.uf2

Нажмите и удерживайте кнопку BOOTSEL, подключите Arducam Pico4ML к компьютеру кабелем micro-USB и отпустите кнопку — плата перейдёт в режим USB-накопителя (USB Mass Storage).

На компьютере появится окно RPI-RP2 — перетащите в него файл magic_wand.uf2. Если появится всплывающее окно устройства, запись прошла успешно.

2.3. Включение доступа к Bluetooth

Проверьте, что в настройках компьютера включён Bluetooth.

Откройте в браузере Chrome страницу chrome://flags/#enable-experimental-web-platform-features — появится окно, как на рисунке ниже. Включите параметр Experimental Web Platform features.

2.4. Страница записи жестов волшебной палочки

Откройте в Chrome страницу https://www.arducam.com/magic_wand/.

Ошибка This browser doesn't support Web Bluetooth. Try using Chrome. — браузер не поддерживает эту технологию.

В Arducam обнаружили, что в старых версиях Chrome и в Linux нужно обязательно включить экспериментальные функции веб-платформы.

Если проблема не исчезает, проверьте, что страница открыта по https://. По какой-то причине без защищённого протокола Web Bluetooth не работает.

2.5. Подключение по Bluetooth

Нажмите кнопку Bluetooth — появится всплывающее окно с запросом на сопряжение, как на рисунке ниже.

Выберите своё устройство — оно называется ATB1103 MIDI XXXX, где XXXX у каждого устройства своё, — и нажмите кнопку сопряжения.

Иногда этот шаг приходится повторить дважды. После подключения кнопка Bluetooth станет зелёной.

2.6. Запись жестов

После сопряжения с Pico можно записывать жесты. Каждый раз, когда вы двигаете Pico и останавливаете её, записывается новый жест.

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

Эти паузы — как пробелы между словами: закончив жест, остановите палочку, чтобы он чётко завершился.

ПримечаниеНаправление жеста очень важно: например, вращение по часовой стрелке и против неё — разные жесты.

2.7. Разметка жестов

Нарисованные жесты выводятся в списке справа. По отображаемым там фигурам видно, чётко ли нарисован жест.

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

Чтобы удалить запись, нажмите значок корзины в правом верхнем углу записи жеста. Возможно, придётся удалить много ложных записей — они возникают, когда вы переносите Pico в исходное положение между жестами.

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

По опыту Arducam, для успешного обучения приложения палочки достаточно собрать около 20 примеров для каждого из 2–3 разных жестов.

Чтобы было проще следить за числом записанных жестов, в правом верхнем углу экрана показан счётчик (например, число 1 на рисунке ниже).

По опыту Arducam, хорошо работают жесты вроде круга (O) или знака Зорро (Z).

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

2.8. Сохранение данных

Собрав все данные, нажмите синюю кнопку Download Data — автоматически скачается файл JSON со всеми жестами.

В следующем разделе этот файл понадобится в Edge Impulse для обучения вашей модели.

Если закрыть или обновить страницу, записанные жесты пропадут, поэтому обязательно сохраните их кнопкой Download Data.

2.9. Преобразование данных

  • Скачайте репозиторий Pico4ML-Magic-Wand.
 cd ~/
 git clone https://github.com/Arducam/Pico4ML-Magic-Wand.git --recursive
  • Перейдите в папку ~/Pico4ML-Magic-Wand/tool.
cd ~/Pico4ML-Magic-Wand/tool 
  • Установите зависимости Python.
 pip install -r requirements.txt
  • Преобразуйте скачанный ранее файл JSON в файлы PNG.
 python json2png.py --dataset <path>/wanddata.json

Преобразованные файлы PNG появятся в папке datasets.

3. Обучение собственной модели волшебной палочки

В этом разделе вы обучите собственную модель волшебной палочки на только что записанных жестах.

3.1. Подготовка платформы Edge Impulse

  • Зарегистрируйтесь на официальном сайте Edge Impulse и войдите в аккаунт.
  • Создайте новый проект.
  • Откройте раздел Keys, выберите API Key и скопируйте ключ API. Через ключ API утилита командной строки (CLI) подключается к платформе. Ключ имеет вид ei_XXX и у каждого пользователя свой — на рисунке ниже он скрыт мозаикой.

3.2. Загрузка данных

Есть два способа.

Способ 1. Загрузка через веб-интерфейс Studio

Данные можно загрузить прямо из веб-интерфейса. Откройте страницу Data acquisition и нажмите значок загрузки. Здесь же можно выбрать файлы, категории и метки.

Способ 2. Загрузка через CLI

  • Установите Edge Impulse CLI.

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

a. Установите Python 3.

b. Установите Node.js v14 или новее.

c. Установите утилиту CLI.

 npm install -g edge-impulse-cli
  • Пройдите аутентификацию по ключу API.
 edge-impulse-uploader --api-key ei_XXX
  • Загрузите файлы через CLI.
 edge-impulse-uploader --api-key ei_... path/to/a/file.png
  • Загрузите сразу несколько файлов.
 edge-impulse-uploader --api-key ei_... path/to/many/*.png

3.3. Настройка модулей обработки

  • Откройте страницу Impulse design.
  • Задайте размер изображения по умолчанию 32 × 32.
  • Выберите блок Images — это значит, что классифицируются и обучаются изображения (на этой платформе можно классифицировать также звуки, видео и т. д.).
  • Выберите Neural Network (Keras), чтобы задать модель обучения.

3.4. Предобработка изображений

Нажмите Image в меню слева, задайте формат цвета RGB и нажмите Save.

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

3.5. Настройка модели трансферного обучения

  • Нажмите NN classifier в меню слева.
  • Задайте Number of training cycles — по умолчанию 50.
  • Задайте скорость обучения (learning rate) 0.0005.
  • Минимальный порог уверенности (minimum confidence rating) — по умолчанию 0.5.
  • Архитектуру нейросети можно оставить по умолчанию или настроить.
  • Нажмите Start training — обучение занимает около 4–5 минут.
  • После обучения модели можно посмотреть точность, матрицу ошибок и ожидаемую производительность на устройстве.

3.6. Экспорт модели

После настройки и обучения модели её можно экспортировать.

  • Откройте страницу DEPLOYMENT.
  • Выберите C++ library и нажмите Build — архив будет создан автоматически.

4. Развёртывание обученной модели

4.1. Распаковка файлов

Распакуйте архив, скачанный на предыдущем шаге, и скопируйте содержимое в папку ~/Pico4ML-Magic-Wand.

Файл CMakeLists.txt не копируйте.

4.2. Компиляция

Создайте папку build и выполните компиляцию.

mkdir build && cd build
 cmake .. && cmake --build . --parallel

4.3. Прошивка файла magic_wand.uf2

Нажмите и удерживайте кнопку BOOTSEL, подключите Arducam Pico4ML к компьютеру кабелем micro-USB и отпустите кнопку — плата перейдёт в режим USB-накопителя (USB Mass Storage).

На компьютере появится окно RPI-RP2 — перетащите в него файл build/magic_wand.uf2.

4.4. Проверка

Откройте программу для отладки по последовательному порту и проверьте свою модель.

Напомним: монитор порта выводит только что выполненный жест в виде ASCII-графики, а под ним — наиболее подходящую метку и оценку уверенности от 0 до 100.

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

................................
................................
................................
................................
................................
................................
................................
................##..............
..............##.##.............
.............#.....#............
.............#.....#............
............#..###.#............
...........#......##............
...........#........#...........
..........#.........##..........
..........#..........#..........
.........#...........#..........
.........#............#.........
........#.............#.........
........#.............#.........
........#.............#.........
.......##.............#.........
.......#.............#..........
.......#.............#..........
.......#.............#..........
.......#............##..........
........#...........#...........
........#..........#............
.........#........##............
..........###...##..............
............####................
................................

Edge Impulse standalone inferencing (Raspberry Pico 2040) run_classifier returned: 0 Predictions

(DSP: 0 ms., Classification: 910 ms., Anomaly: 0 ms.): 0: 1.00 1: 0.00 2: 0.00 3: 0.00 4: 0.00 5: 0.00 6: 0.00 7: 0.00 8: 0.00 9: 0.00 Found 0 (99.61)

Запросить цену

Укажите количество — пришлём коммерческое предложение.