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

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

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

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

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

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

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

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

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

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

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

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

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

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 на сегодняшний день многое уже умеют. Мы вот с их помощью автоматизировали процесс заказа воды в офис.

0
45 комментариев
Написать комментарий...
Artem Belov

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

Ответить
Развернуть ветку
Marina Glayboroda
Автор

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

Ответить
Развернуть ветку
Yura Frolov

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

Гугл дуплекс предупреждает об этом.

Ответить
Развернуть ветку
Marina Glayboroda
Автор

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

Ответить
Развернуть ветку
Yura Frolov

Ну буквально это ложь, вы создаете впечатление человека, хотя это вовсе не человек.

Это как в полицейской одежде и останавливать машины и просить документы: "Мы никого не обманываем, вы сами подумали, что мы из полиции"

Проще и эффективнее было-бы сообщение им писать, чем тратить ресурсы на войс-бота.

Ответить
Развернуть ветку
Marina Glayboroda
Автор

Это не корректное сравнение. Переодеваясь в полицейского, человек имеет злой умысел. Его цель - нажива. Мы же автоматизировали процесс заказа воды. Мы платим за нее то, что должны и не имеем скрытых мотивов.

Ответить
Развернуть ветку
Stepanenko Kirill

Не переживайте, это просто бот. Он ругается, что его не представляют нигде, вот и борется за свои права

Ответить
Развернуть ветку
Yura Frolov

Обман тоже не очень классно, конечно, не так как воровать.
Но сказать вначале "здравствуйте, это бот по заказу воды" сделает этот звонок дружелюбнее и уважительнее к консультанту.

Ответить
Развернуть ветку
Artem Belov

У меня сложилось впечатление что оператор предупрежден, голос робота распознать не сложно, а он делает вид что все в порядке. Или ему каждый день роботы звонят?

Ответить
Развернуть ветку
Marina Glayboroda
Автор

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

Ответить
Развернуть ветку
Sergei Timofeyev

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

Ответить
Развернуть ветку
Вася Пражкин

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

Ответить
Развернуть ветку
Sergei Timofeyev

Он захотел не просто мониторить, но и понимать момент того, как он закипел, то есть должно наступить событие, триггер которого генерит OpenCV. У себя сделал проще - у меня есть свисток на чайнике.

Ответить
Развернуть ветку
Denis Shiryaev

Вы крутые :)

Ответить
Развернуть ветку
Marina Glayboroda
Автор

Спасибо ^_^

Ответить
Развернуть ветку
Shura Mashkova

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

Ответить
Развернуть ветку
Вася Пражкин

Конечно можно - поменяйте завхоза!

Ответить
Развернуть ветку
Shura Mashkova

Зачем? Если можно элегантно решить проблему)

Ответить
Развернуть ветку
Вася Пражкин

Вы правда считаете колхоз с распознаванием - элегантным решением проблемы бестолкового завхоза? ))

Ответить
Развернуть ветку
Marina Glayboroda
Автор

Можно) Если для бумаги, то распознавать высоту стопки: когда она достигнет минимального заданного предела – сообщать/заказывать. Все, что человек может увидеть - может увидеть и камера. Главное – освещение и качество изображения.

Ответить
Развернуть ветку
Diego Salvador

А, если имеется в виду бумага в рулонном исполнении? Задача то поважней чем чаю попить!

Ответить
Развернуть ветку
Константин Малафеев

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

Ответить
Развернуть ветку
Marina Glayboroda
Автор

С бумагой – можно. Это будет реально за счет того, что пачки складываются в стопку. Относительно воды: а когда количество заказываемых бутылок увеличится, расширять платформу? А если не увеличится? Используя ИИ достаточно изменить три параметра: количество полных бутылок, пустых бутылок и заказываемых.

Ответить
Развернуть ветку
Вася Пражкин

Марина, тут надо добавить ИИ для выбора поставщика воды на основе мониторинга отзывов и цен. Доработайте, пожалуйста, решение.

Ответить
Развернуть ветку
Михаил Ефремов

Заказывают обычно у тех с кем уже контракт. К тому же этот рынок очень конкурентный и выигрыш 5% цены того не стоит.

Ответить
Развернуть ветку
Дима Венглинский

Заплачу немножечко денежек за имплементацию такого к нам в офис (бутыли выглядят так же, только их обычно штук 15-20), камеру сам поставлю как скажете, вместо звонков просто алерт в слак нужен. Напишите мне на почту, умоляю [email protected]

Ответить
Развернуть ветку
Вася Пражкин

Как часто воду заказываете, в среднем?

Ответить
Развернуть ветку
Дима Венглинский

В том и проблема что сложно понять периодичность. Так-то по договору нам привозят раз в месяц 10 штук, но вот сейчас выходил на кухню смотрю 2 бутыля осталось из 10, а я помню что привозили вроде недавно. Звоню спросить когда следующая доставка, говорят 16 числа. А значит с понедельника мы полторы недели будем без воды. Если бы я сейчас не заказал допдоставку, была бы проблема с кассовым разрывом воды.

Заказывать дополнительную доставку можно, но нужно это делать за 3 рабочих дня ДО, потому что пока они ещё привезут. Плюс постоянно меняется потребление, допустим новые сотрудники появились, или какая неожиданность пришло лето и потребление вырастает в 2 раза резко.

А если б был алерт который говорит "Согласно последним данным водологов, потребление воды последнюю неделю на уровне 1.3 бутля в день, через 3 дня вода закончится, закажите ещё милорд (казне хватит 7 бутлей до новой плановой доставки)". Было б круто :)

Ответить
Развернуть ветку
Вася Пражкин

Ну тут все просто, милорд, раз в неделю считаете количество оставшихся полных бутылок, если их меньше трех - делаете заказ на 10. Тоже самое и с остальными ресурсами, но параметры подбираете под скорость расхода и срока доставки.
А камера на кухне - вещь полезная :)

Ответить
Развернуть ветку
Дима Венглинский

У меня 30 сотрудников и помимо работабщего бизнеса 2 стартапа из разных сфер жрущие нереальное количество времени и внимания, думаете мне не хватает приключений настолько что я хочу раз в неделю ходить на кухню считать бутылки? :D

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

Ответить
Развернуть ветку
Вася Пражкин

Дима, тогда Вам просто необходим завхоз - человек, который решает вопросы по хозяйству офиса. Также изветстен как менеджер по офису, обычно это симпатичная девушка ). Если 30 сотрудников в офисе - ей хватит работы на fulltime.

Ответить
Развернуть ветку
Дима Венглинский

Мммм... Я в Варшаве девушке такой буду платить допустим 5 злотых (это в Варшаве норм ЗП для офис-менеджера), плюс налоги, место, медстраховки, спортбенефиты и прочие плюшки, в итоге она будет обходиться в 8000 навскидку. Это где-то 2300 долларов в месяц или $27600 в год. А сколько мне единоразово будет стоить несколько автоматизированных процессов которые её заменят?

Штуки 3 я уже решил с помощью CRM в связке с Zapier и слаком.

А самое главное, ОНА ЖЕ БУДЕТ ПИТЬ ЭТУ ВОДУ ТОЖЕ :D

Ответить
Развернуть ветку
Вася Пражкин

Ну вообще-то за $2300 она же не только будет воду заказывать, верно?
Обычно у нее масса обязанностей - разбирать почту, отвечать на звонки, заказывать еду, контролировать уборку офиса, встречать гостей, заказывать билеты, организовывать корп. мероприятия, несложная деловая переписка. Или Вы это сами все делаете и Вас это устраивает?

"ОНА ЖЕ БУДЕТ ПИТЬ ЭТУ ВОДУ ТОЖЕ"
Возьмите миниатюрную девушку, ей маленькой бутылочкм на весь день хватит )).

Ответить
Развернуть ветку
Дима Венглинский

У нас нет почты которую нужно разбирать, не нужно отвечать на звонки, заказывать еду. Уборку офиса не надо контролировать, аутсорсеры бизнес-центра справляются и без контроля. Гостей у нас почти нет, а если кто и придет, то его встретит тот кто пригласил. Билеты заказывать не надо. Мероприятия организовывать тоже. Деловую переписку ведут специально обученные люди - account executive, sales manager, project manager, BD. Сам я делаю то что могу делать только я, занимаюсь развитием и стратегией, немного операционкой.

Так что ума не приложу зачем такая девушка, разве что для красоты, но это сексизм и заменяется вазоном с красивым растением :)

Ответить
Развернуть ветку
Вася Пражкин

Дима, проверка по понедельникам, сколько полных бутылей с водой осталось, займет у Вас ровно 5 секунд, пока Вы ждете Ваш утренний кофе с кофемашины. Еще полминуты - на заказ новых бутылей, если требуется. Итого за год - меньше часа на закрытие этого вопроса.

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

Ответить
Развернуть ветку
Дима Венглинский

Я уже обьяснял, логика и мотивы собственника совсем не такие. Вы просто не понимаете

со стороны кажется что вроде нет ничего такого в том чтобы 5 секунд уделить, но на самом деле это огромная проблема, потому что все такие мелочи приходится держать в голове, а для собственников крайне важно минимизировать шваль в голове.
Ответить
Развернуть ветку
Вася Пражкин

"логика и мотивы собственника совсем не такие"
Дима, я столько различных логик и мотивов у собственников повидал, что мне кажется, удивить меня нелегко ).
Поэтому наименее геморный вариант - это переложить вот такие мелочи на других людей, специально для этого нанятых.

Ответить
Развернуть ветку
Дима Венглинский

Что вы ко мне прицепились, я говорю я вертел держать это в голове и мне не упал завхоз. Что не ясно :)

Я свой способ ведения дел никому не навязываю

Ответить
Развернуть ветку
viktor Kozlov

Прикольно! Мне также нужно сделать в холодильнике. Как кончается колбаса, молоко, яйца итд, бот сразу звонит в Ашан и делает заказ курьеру. :D

Ответить
Развернуть ветку
Marina Glayboroda
Автор

Интересная идея. Можно такое сделать, но камер потребуется больше, чем одна)

Ответить
Развернуть ветку
Dmitriy Kuharev

mAP 57% означает что в половине случаев сетка ошибается? Или я не прав? Если да, то это значит каждое второе обращение в сервис ложное?

Ответить
Развернуть ветку
Marina Glayboroda
Автор

Intersection over Union (IoU) вычисляется как отношение:
в числителе - область пересечения между предсказанной ограничительной рамкой (то есть то, как ее нарисовала сеть, определяя объект) и ground-truth ограничительной рамкой (то есть то, как мы вручную разметили этот объект);
в знаменателе - область объединения, то есть область, охватываемая как предсказанной ограничительной рамкой, так и ground-truth ограничительной рамкой.

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

Mean average precision (mAP) рассчитывается как среднее значение между трешхолдами (порогами) IoU от 0.5 до 1 (шаг порога 0.1). IoU 0.5 показал высокую точность, что уже является отличным результатом. Далее рассчитывалась точность и для других порогов (трешхолдов), но с каждым повышением порога точность работы модели снижается. А 57,9% — это среднее значение между просчитанными IoU.

То есть это хороший результат, и она ошибается намного реже, чем в половине случаев.

Ответить
Развернуть ветку
Вася Пражкин

Приезжает такой курьер - "Примите воду". А ему - "Извини, дядька, это все ИИ напутал, недообучился, вот и заказал, дурачок. Но мы его уже наказали, скормили еще 1000 фоток пустых бутылей."

Ответить
Развернуть ветку
Денис Фоминов

а я бы с помощью поплавкового датчика решил бы :)

Ответить
Развернуть ветку
Diego Salvador

Это для контроля уровня в конкретном бутыле, а так достаточно поставить датчик подсчёта смены бутылей, который сопряжён с ДЦ.

Ответить
Развернуть ветку
42 комментария
Раскрывать всегда