С 2018 я работаю над пет проектом, системой распознания нервных импульсов.
Началось все с того, что в 2017 я чуть не лишился руки. Несколько месяцев было неясно, с каким количеством рук я выйду из ситуации. В итоге получилось две. В результате этого нелегкого процесса бесконечных операций, я, будучи программистом и вообще человеком любопытствующим, сильно увлекся темой протезов, а именно управления ими. Так как рынок протезов очень мал, развивается он слабо относительно ПК или смартфонов. Особенно плохо дело с протезами руки, которые фактически не позволяют выполнять сложные манипуляции, даже если имеют пять пальцев и напоминают руку терминатора.
Я подумал, могу ли я что-то сделать для ускорения прогресса подобных систем.
Самая продвинутая система управления протезом, которую можно купить, назвывается Coapt.
Работает она по принципу классификации выхода многоканального усилителя электрического сигнала, снимаемого с кожи.
По моим данным, она стоит порядка 10-15К долларов, в зависимости от страны покупки. Это, конечно, идет в дополнение к цене самого протеза.
Используя Coapt, пользователь может непосредственно контролировать две-три степени свободы протеза. Большинство же протезов управляются либо механическими тягами, либо позволяют выбрать один из доступных хватов, листая заготовленный список жестов особым напряжением мышц. Выбрал жест перебором — можешь его или открывать или закрывать, напрягая одну из крупных групп мышц руки.
Принцип похож на менюшки в старых играх, в которых ты давишь select, пока не найдешь нужный пункт меню. Только выбираешь его практически вслепую. Мне показалось такое положение дел недопустимым в 21 веке.
Я решил начать работу над открытой системой нейроконтроля, которая была бы дешевой и достаточно производительной, чтобы вбирать в себя современные наработки в сфере машинного обучения.
Хотелось заложить проект так, чтобы специалисты из распостраненных отраслей IT имели возможность внести вклад, каждый в своей области.
Выросло несколько задач:
- получить сигнал нервов(например, предплечья)
- применить к сигналу магию машинного обучения, поняв намерение юзера
- вывести сигнал обратно в физический мир через моторы
Как получить сигнал нервов
Любое наше действие мы выполняем с помощью мышц. При этом через кожу можно считать электрический сигнал нервов, усиленный мышцами. Технология называется электромиография (ЭМГ). Технологии много лет, можно даже купить усилитель биоэлектропотенциалов в виде микросхемы, например такой.
Мой боевой товарищ Андрей создал компактный датчик, базирующееся на этой восьмиканальной микросхеме. Устройство питается и общается по USB.
Кому интересно — есть результаты классификации жестов руки на данных с этого датчика.
К слову, кто подскажет, как сделать достойный браслет с металлическими контактами в полевых условиях?
Машинное обучение на носимом компьютере
Тут я решил сесть на поезд смартфонов. Каждый год они обрастают ядрами, увеличивают батарею. Существует Tensorflow Lite для использования машинного обучения на мобилках.
Если можно к смартфону подключить датчик и контроллер моторов с батарейкой, почему бы не попробовать сделать протез на основе смартфона? Ну хотя бы для начала=)
Проект начался с создания связки приложения под андроид и сервера, тренирующего модель классификатора для юзера.
Приложение может работать с датчиками нервной активности по USB либо Bluetooth. Данные пользователя записываются и отправляюся на сервер для тренировки модели. Натренированная модель скачивается и работает в режиме офлайн. С приложением очень помогли garastard и ArsenyChernyaev.
Сервер получает запись нервов юзера, крутит скрипт на Питоне и создает модель Tensorflow Lite, которая предназначена для мобильных устройств.
Обратно в физический мир
Здесь план создать паверанк для телефона, к которому можно также подлючить датчик и моторы протеза, в обход родной электроники. Вещь в разработке, ссылки пока нет.
Как сделать хорошую модель распознания нервной активности
Нужны данные и возможность проверять гипотезы. Вышеупомянутый скрипт на Питоне — это типичный ML код. Он может работать самостоятельно на заготовленных заранее записях ЭМГ, что позволяет продвигаться с машинным обучением отдельно от кастомного железа.
Для сбора данных датчика с ПК и создания экспериментов с ними, планируется допиливать десктопное приложение.
P.S.
Тут очень много дел. Если вам интересна тематика, пишите. Проект публикуется в открытую под лицензией Apache и другими свободными лицензиями. Особенно интересно познакомиться с хардкорными машинообучателями.
P.P.S.
Недавно компания CD Project Red устроила конкурс косплея по их игре Cyberpunk2077. Я решил, что было бы круто скооперироваться с креативным классом, и поучаствовать с костюмом, в котором правда будет нейроинтерфейс. Моторы крутила Raspberry Pi. Элементы костюма управлялись с телефона нервами косплеера. Вот что у нас получилось:
Автор: Кирилл Ящук