Как мы автоматизировали процесс заказа воды в офис

Материал подготовили специалисты из Hey Machine Learning. Компания специализируется на создании IT-решений в областях компьютерного зрения и искусственного интеллекта в целом. Инженеры компании превращают данные в полноценные приложения для стратапов и состоявшихся бизнесов по всему миру.

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

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

Решить подобную проблему может ИИ. 

Курс по нейронным сетям
Идет набор в группу 49 900 ₽

Необходимые для проекта технологии

Для автоматизации доставки нам необходимо решить две задачи: определить, когда заканчивается вода, и заказать её. 

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

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

Как происходит все на практике – рассмотрим дальше.

Computer Vision, чтобы распознать пустые бутылки

Для распознавания бутылок мы использовали инструмент YOLO 3: Real-Time Object Detection. You only look once (YOLO) – это нейронная сеть для обнаружения объектов в режиме реального времени, написанная на языке C. Работает она достаточно точно и быстро: на видеокарте Pascal Titan X обработка изображений происходит при кадровой частоте 30 FPS и имеет mAP 57,9% на COCO test-dev. Также сеть не требует огромного датасета для обучения.

Рабочая зона для сети выглядит так:

Камеру мы прикрепили к полке с помощью изоленты. 

Изначально в обучающем наборе у нас было 14 размеченных картинок с разным расположением пустых и полных бутылей. Однако этого количества было недостаточно: нейронная сеть обучилась определять полными только те бутылки, на которых был пакет, вместо того, чтобы анализировать по крышке. 

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

Мы расширили датасет до 42 изображений, меняя положение бутылей, освещение и наличие пакетов. Уже через час обучения она показала хороший результат:

Результат работы сети на датасете из 42 картинок. Указанные на изображении дата и время являются некорректными

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

Курс по Machine Learning
Идет набор в группу 44900 ₽

Natural Language Processing, чтобы поговорить с оператором

Если звонить и вести диалог с оператором будет не человек, то какая технология пригодится? NLP, она же «обработка естественной речи». За основу мы взяли наш прошлый проект – Pizza Bot.

Для обработки речи мы попробовали три сервиса: Google Cloud Speech-to-Text, Amazon Transcribe и Yandex SpeechKit. С каждым из них можно реализовать два варианта обработки аудио и перевода его в текст.

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

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

Для этого мы решили сравнивать абсолютные величины амплитуд звука. Когда оператор что-то говорит, а затем наступает тишина, длительностью 0,5 секунд, то можно считать фразу законченной и отправлять её на обработку.

Выбор пал на первый вариант обработки и облачное решение Google Cloud Speech-to-Text, которое распознает человеческую речь в режиме реального времени, и переводит её в текст. Также API умеет извлекать из слов смысл и анализировать контекст.

Когда бот получил фразу, системе необходимо её обработать и принять решение, что ответить. За обработку у нас отвечает сервис Dialogflow, а за озвучивание принятого решения – технология Text-to-Speech, которая преобразовывает текст в речь. Мы использовали сервис Google Cloud Text-to-Speech, включающий в себя множество естественно звучащих голосов для различных языков.

Диалог бота и оператора службы доставки воды

Напоследок

Практическое применение подобного решения – безгранично. Изменив идентификаторы объектов, его можно настроить под любую необходимую задачу и требуемый язык. Например, обнаружив пустые места в зале конференции, система уведомит организаторов, что можно пригласить еще желающих послушать доклад. Или распознав ключи от машины на тумбочке – напомнит вам их забрать. 

Поделиться:
Опубликовано в рубрике Авторская Колонка

SkillFactory.Рассылка