Материал подготовили специалисты из Hey Machine Learning. Компания специализируется на создании IT-решений в областях компьютерного зрения и искусственного интеллекта в целом. Инженеры компании превращают данные в полноценные приложения для стратапов и состоявшихся бизнесов по всему миру.
Занимаясь разработкой различных приложений с использованием технологий искусственного интеллекта и машинного обучения, хочется поэкспериментировать с автоматизацией собственного офиса. Например, почему бы не обучить алгоритмы самостоятельно заказывать доставку воды?
Когда в компании отсутствует офис-менеджер, заказ совершает другой человек, «назначенный» на должность «ответственного за доставку воды». Но ввиду более важных рабочих дел на этот период он может забыть ее совершить, и впоследствии в компании некоторое время нет питьевой воды.
Решить подобную проблему может ИИ.
[course id=1073]
Необходимые для проекта технологии
Для автоматизации доставки нам необходимо решить две задачи: определить, когда заканчивается вода, и заказать её.
Первая задача выпонима с помощью компьютерного зрения. Всего у нас в офисе шесть тар для воды объемом по 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 размеченных картинок с разным расположением пустых и полных бутылей. Однако этого количества было недостаточно: нейронная сеть обучилась определять полными только те бутылки, на которых был пакет, вместо того, чтобы анализировать по крышке.
Мы расширили датасет до 42 изображений, меняя положение бутылей, освещение и наличие пакетов. Уже через час обучения она показала хороший результат:
Когда нейросеть определяет, что количество пустых бутылок равно пяти, а полных ноль, то автоматически запускается вторая часть проекта — голосовой бот.
[course id=1062]
Natural Language Processing, чтобы поговорить с оператором
Если звонить и вести диалог с оператором будет не человек, то какая технология пригодится? NLP, она же «обработка естественной речи». За основу мы взяли наш прошлый проект – Pizza Bot.
Для обработки речи мы попробовали три сервиса: Google Cloud Speech-to-Text, Amazon Transcribe и Yandex SpeechKit. С каждым из них можно реализовать два варианта обработки аудио и перевода его в текст.
Первый заключается в настройке потоковой передачи данных: отправить сервису аудиозапись по частям и обратно получить текст также по частям.
Второй вариант – отправить аудиофайл целиком и обратно получить целый распознанный текст. Но при таком подходе необходимо самостоятельно отслеживать тишину, чтобы понимать, когда оператор закончил фразу и бот может ему ответить.
Для этого мы решили сравнивать абсолютные величины амплитуд звука. Когда оператор что-то говорит, а затем наступает тишина, длительностью 0,5 секунд, то можно считать фразу законченной и отправлять её на обработку.
[read id=929]
Выбор пал на первый вариант обработки и облачное решение Google Cloud Speech-to-Text, которое распознает человеческую речь в режиме реального времени, и переводит её в текст. Также API умеет извлекать из слов смысл и анализировать контекст.
Когда бот получил фразу, системе необходимо её обработать и принять решение, что ответить. За обработку у нас отвечает сервис Dialogflow, а за озвучивание принятого решения – технология Text-to-Speech, которая преобразовывает текст в речь. Мы использовали сервис Google Cloud Text-to-Speech, включающий в себя множество естественно звучащих голосов для различных языков.
Диалог бота и оператора службы доставки воды
Напоследок
Практическое применение подобного решения – безгранично. Изменив идентификаторы объектов, его можно настроить под любую необходимую задачу и требуемый язык. Например, обнаружив пустые места в зале конференции, система уведомит организаторов, что можно пригласить еще желающих послушать доклад. Или распознав ключи от машины на тумбочке – напомнит вам их забрать.