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

WebBLE — приложение, которое позволяет обмениваться данными, сохраняя права на них и сведения об их происхождении.
В этом приложении можно открыть сайт на JavaScript, который взаимодействует с вашими устройствами Bluetooth с низким энергопотреблением (BLE).
Так можно писать собственные приложения для работы с устройства на iOS.
На примере волшебной палочки ниже подробно показано, как выполнить трансферное обучение в 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)