Нейробармен из Raspberry Pi с использованием нейронных сетей

Мы компания Hey Machine Learning. И мы продолжаем всячески автоматизировать наш офис. У нас уже и вода заказывается, и известно, кем моется посуда. Но наступило лето, вместе с ним и корпоративы. Что бы кто ни говорил, но отдых — важная часть рабочего процесса. И если «делу время, а потехе час», то давайте автоматизируем этот час.

Раньше мы использовали только камеры и алгоритмы, но в этом проекте решили пойти дальше и добавили микрокомпьютер Raspberry Pi 3 Model B.

Мы сконструировали автономное устройство, которое с помощью компьютерного зрения умеет распознавать лица и жесты «палец вверх» и «палец вниз», а также запоминать пользователей.

Используя рекомендательную систему на основе лайка и дизлайка, мы наделили устройство способностью составлять персонализированную карту коктейлей, а с помощью микрокомпьютера и дополнительных деталей — наливать эти коктейли.

В итоге у нас получился офисный робот-бармен, которого мы назвали Бендер.

Бендер
Бендер

А теперь подробно о том, как мы это сделали.

Железо Бендера

Чтобы собрать нашего мини-робота, мы купили несколько необходимых деталей:

Необходимые детали
Необходимые детали

Из всего этого следует выделить микрокомпьютер Raspberry Pi 3 Model B. Он был представлен в феврале 2016 года, это самая ранняя модель Raspberry Pi третьего поколения.

Одноплатный компьютер версии Pi 3 B оснащен ARM-процессором Broadcom BCM2837. Устройство имеет 1 ГБ оперативной памяти, разъемы HDMI и Ethernet, четыре USB-порта, а также встроенный модуль беспроводной связи Wi-Fi и Bluetooth.

Четырехъядерного процессора достаточно для создания различных электронных устройств: от радиоприемников и медиаплееров до роботов и «умных» домов.

<p>Основные элементы платы Raspberry Pi 3 Model B</p>

Основные элементы платы Raspberry Pi 3 Model B

Raspberry Pi 3 — мощное устройство, но его ресурсов недостаточно для всех нейросетевых вычислений. Поэтому мы ускорили его с помощью Intel Movidius Neural Compute Stick.

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

Устройство оборудовано процессором Vision Processing Unit (VPU) Myriad 2, который обладает производительностью 100 гигафлопс и энергопотреблением 1 Вт. Такие характеристики позволяют Movidius работать полностью автономно, без доступа к интернету и облачным сервисам.

Нейробармен из Raspberry Pi с использованием нейронных сетей

Для распознавания лиц и жестов мы использовали оригинальную камеру Raspberry Pi Camera Module V2, оснащенную 8-мегапиксельной матрицей Sony IMX219. Устройство имеет фиксированный фокус и позволяет записывать видео в трёх режимах: 1080p30, 720p60 и VGA90.

Raspberry Pi Camera Module V2
Raspberry Pi Camera Module V2

Чтобы определять наличие стакана в устройстве и активировать систему, встроили ультразвуковой дальномер HC-SR04. Он определяет расстояние до объектов, генерируя звуковые импульсы на частоте 40 кГц и слушая эхо.

Ultrasonic sensor HC-SR04
Ultrasonic sensor HC-SR04

Программная часть Бендера

Что касается возможностей робобармена — тоже по порядку.

Компьютерное зрение

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

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

Чтобы работать с Movidius, мы взяли открытую библиотеку компьютерного зрения OpenCV и фреймворк OpenVINO с модулями dnn и dldt, предназначенных для работы с нейросетями.

Для рекомендательной системы также необходимо распознавать жесты лайка и дизлайка. С этой целью мы создали систему на основе компактной нейронной сети для обнаружения объектов Tiny-YOLO 3, которая умеет распознавать жесты «палец вверх» и «палец вниз». Проект получил название Rate Me и доступен для скачивания с GitHub.

Сеть для Rate Me тренировали с помощью фреймворка Darknet на 3000 размеченных в LabelImg изображениях. Также, чтобы запустить алгоритм на языке программирования Python, мы использовали DNN-модуль библиотеки OpenCV.

В итоге решение имеет mAP = 85,19%, среднее IoU = 73,89% и работает со скоростью 6–7 FPS на процессоре Intel Core TM i5-4300M при частоте 2.60 ГГц.

Именно на основе оценок пользователя «лайк» и «дизлайк» система составляет персональную карту коктейлей.

Нейробармен из Raspberry Pi с использованием нейронных сетей

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

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

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

Когда мини-бармен видит человека, не показывающего никаких жестов, и распознает этого человека, он должен ему приготовить коктейль. Но прежде чем наливать что-то, нужно проверить наличие стакана на необходимой позиции. Это мы делаем с помощью ультразвукового дальномера HC-SR04.

Если стакан на месте, тогда система передает данные рекомендательной системе, которая и выбирает релевантный коктейль. Потом устройство его готовит и ждет оценку.

Рекомендательная система

Рекомендательная система (РС) — это алгоритм, который на основе данных о пользователе подбирает наиболее релевантные для него товары и услуги, а в нашем случае — алкогольные коктейли. Обычно в РС используют один из двух подходов: коллаборативную фильтрацию или рекомендации на основе контента.

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

Рекомендательная система на основе контента предлагает релевантные коктейли, основываясь на ингредиентах напитка и индивидуальных предпочтениях пользователя.

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

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

Данные пользователя
Данные пользователя
<p>Рекомендации для пользователя</p>

Рекомендации для пользователя

Еще важный момент. Количество бутылок в устройстве ограничено. Чтобы создать карту, необходимо знать, какие конкретно коктейли делать. Распарсив сайт TheCocktailDB, мы получили датасет из 578 различных напитков. Теперь его необходимо почистить и привести в требуемый вид.

Мы проверили ингредиенты и напитки на дубликат, а также преобразовали различные типы алкоголя в общие наименования: например, белый, золотой и темный ром стали просто ромом, бурбон и скотч — виски.

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

Полностью проработав данные, мы выбрали те коктейли, в которых совпадение алкогольных напитков максимальное. В нашем боте восемь позиций для бутылок: их заняли биттер, ром, джин, бурбон, вермут, Coca-Cola, апельсиновый сок и тоник. Из такого сета, с добавлением различных нельющихся компонентов, можно создать 57 коктейлей. Для начала достаточно.

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

Часть итогового датасета
Часть итогового датасета

Результат

С тем, как работает Бендер, можно ознакомится в видеоролике ниже.

2929
22 комментария

Кайф. Люблю, когда в ML и CV врывается синяя изолента и нужно спаять MVP на макетной плате. Не останавливайтесь!

4
Ответить

Только вперёд 🙃

Ответить

Технически отлично заморочились, ещё бы внешний вид причесать :)

2
Ответить

Спасибо!)
Но главное же то, что внутри!)))) А снаружи улучшить всегда можно)

2
Ответить

Спасибо. Это прекрасно :)

2
Ответить

Спасибо))

Ответить

Можно такой же заказать для Лонг Айленда?

2
Ответить