Автоматический заказ воды с помощью технологий ИИ

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

Сейчас у нас нет офис-менеджера, и бывают дни, когда «ответственный» за доставку может забыть её заказать ввиду более важных на этот период рабочих дел. Впоследствии мы страдаем, так как даже чаю попить невозможно.

А вода из-под крана с фильтром абсолютно непригодна для употребления. Ну и конечно, хочется в очередной раз посмотреть на технологии в деле.

Автоматический заказ воды с помощью технологий ИИ

Подумали об осуществлении, прикинули затраченное время и приступили.

Какие технологии пригодятся

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

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

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

Схематично весь процесс заказа выглядит так:

Автоматический заказ воды с помощью технологий ИИ

На практике все немного сложнее. Разберем.

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 картинок. Указанные на изображении дата и время являются некорректными
Результат работы сети на датасете из 14 картинок. Указанные на изображении дата и время являются некорректными

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

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

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

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, включающий в себя множество естественно звучащих голосов для различных языков.

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

В заключение

Такое решение легко масштабируется. Его можно настроить под любую необходимую задачу, так как CV и NLP на сегодняшний день многое уже умеют. Мы вот с их помощью автоматизировали процесс заказа воды в офис.

4040
45 комментариев

Оператора предупредили что ему будет робот позванивать?

8
Ответить

Вы подняли такой важный этический вопрос: а почему вы считаете, что следует предупреждать?

1
Ответить

Ахаха... обожаю забивать микроскопом гвозди! У меня один знакомый использовал OpenCV для того, чтобы контролировать когда закипит чайник... Чайник электрический, а значит в момент его отключения, будет снижаться энергопотребление и размыкаться сеть. Триггер же есть для сигнала. По поводу воды... ОСМОС на полгода позволяет забыть об этом в офисе.

6
Ответить

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

1
Ответить

Вы крутые :)

2
Ответить

Спасибо ^_^

Ответить

Подумали и решили проблему! Здорово! Может пригодится)
А для канцтоваров нечто можно сделать? Часто сталкиваемся с тем ,что бумага кончилась и пр)

1
Ответить