Автоматический заказ воды с помощью технологий ИИ
Занимаясь разработкой различных приложений с использованием технологий ИИ хочется поэкспериментировать с автоматизацией собственного офиса. Мы попробовали определить, кто чаще моет посуду, и нам это удалось. Теперь, может, автоматизировать процесс заказа воды в офис?
Сейчас у нас нет офис-менеджера, и бывают дни, когда «ответственный» за доставку может забыть её заказать ввиду более важных на этот период рабочих дел. Впоследствии мы страдаем, так как даже чаю попить невозможно.
А вода из-под крана с фильтром абсолютно непригодна для употребления. Ну и конечно, хочется в очередной раз посмотреть на технологии в деле.
Подумали об осуществлении, прикинули затраченное время и приступили.
Какие технологии пригодятся
Для автоматизации доставки нам необходимо решить две задачи: определить, когда заканчивается вода, и, собственно, сделать заказ на доставку.
Первую задачу можно решить с помощью компьютерного зрения. Всего у нас в офисе шесть тар, одна из которых используется в кулере. Остальные пять занимают место под столешницей. Когда все незадействованные бутыли пустые, пора делать заказ на доставку.
Вторую задачу мы решим с помощью бота. Чтобы в офис привезли воду, нужно позвонить в службу и пообщаться с оператором. Он или она задаст перечень стандартных вопросов несмотря на уже имеющуюся у них информацию о нас, которая подтягивается по номеру телефона.
Схематично весь процесс заказа выглядит так:
На практике все немного сложнее. Разберем.
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 изображений, меняя положение бутылей, освещение и наличие пакетов. Один час обучения сети — и она показала хороший результат:
Когда нейросеть определяет, что количество пустых бутылок равно пяти, а полных ноль, то автоматически запускается вторая часть проекта — бот.
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 на сегодняшний день многое уже умеют. Мы вот с их помощью автоматизировали процесс заказа воды в офис.
Оператора предупредили что ему будет робот позванивать?
Вы подняли такой важный этический вопрос: а почему вы считаете, что следует предупреждать?
Ну во-первых это честно. Во-вторых он не будет пытаться говорить как с обычным человеком.
Гугл дуплекс предупреждает об этом.
Насчет честности – так мы же никого не обманываем. Бот звонит и заказывает воду. Мы получаем и оплачиваем. Насчет того, что оператор не будет говорить как с обычным человек. Бот понимает сказанное и внятно отвечает. Зачем оператору подстраиваться под разговор с машиной?
Ну буквально это ложь, вы создаете впечатление человека, хотя это вовсе не человек.
Это как в полицейской одежде и останавливать машины и просить документы: "Мы никого не обманываем, вы сами подумали, что мы из полиции"
Проще и эффективнее было-бы сообщение им писать, чем тратить ресурсы на войс-бота.
Это не корректное сравнение. Переодеваясь в полицейского, человек имеет злой умысел. Его цель - нажива. Мы же автоматизировали процесс заказа воды. Мы платим за нее то, что должны и не имеем скрытых мотивов.
Не переживайте, это просто бот. Он ругается, что его не представляют нигде, вот и борется за свои права
Обман тоже не очень классно, конечно, не так как воровать.
Но сказать вначале "здравствуйте, это бот по заказу воды" сделает этот звонок дружелюбнее и уважительнее к консультанту.
У меня сложилось впечатление что оператор предупрежден, голос робота распознать не сложно, а он делает вид что все в порядке. Или ему каждый день роботы звонят?
Да, у нас были случаи, когда бот откровенно тупил и оператор спрашивал, человек это или робот. Как правило, люди не обращают внимание на произношение слов и расставленные ударения, да и просто не ожидают, что с ними может говорить бот.
Ахаха... обожаю забивать микроскопом гвозди! У меня один знакомый использовал OpenCV для того, чтобы контролировать когда закипит чайник... Чайник электрический, а значит в момент его отключения, будет снижаться энергопотребление и размыкаться сеть. Триггер же есть для сигнала. По поводу воды... ОСМОС на полгода позволяет забыть об этом в офисе.
Ну к слову, первые вебкамеры так и появились, что кто-то захотел мониторить, когда закипит чайник. Так что лень таки иногда двигает прогресс.
Он захотел не просто мониторить, но и понимать момент того, как он закипел, то есть должно наступить событие, триггер которого генерит OpenCV. У себя сделал проще - у меня есть свисток на чайнике.
Вы крутые :)
Спасибо ^_^
Подумали и решили проблему! Здорово! Может пригодится)
А для канцтоваров нечто можно сделать? Часто сталкиваемся с тем ,что бумага кончилась и пр)
Конечно можно - поменяйте завхоза!
Зачем? Если можно элегантно решить проблему)
Вы правда считаете колхоз с распознаванием - элегантным решением проблемы бестолкового завхоза? ))
Можно) Если для бумаги, то распознавать высоту стопки: когда она достигнет минимального заданного предела – сообщать/заказывать. Все, что человек может увидеть - может увидеть и камера. Главное – освещение и качество изображения.
А, если имеется в виду бумага в рулонном исполнении? Задача то поважней чем чаю попить!
Можно по весу стопок контролировать. И заказывать, когда вес становится равным весу одной пачки.
Также можно было и с водой, сделать платформу, на которой стоит вода и контролировать их вес.
С бумагой – можно. Это будет реально за счет того, что пачки складываются в стопку. Относительно воды: а когда количество заказываемых бутылок увеличится, расширять платформу? А если не увеличится? Используя ИИ достаточно изменить три параметра: количество полных бутылок, пустых бутылок и заказываемых.
Марина, тут надо добавить ИИ для выбора поставщика воды на основе мониторинга отзывов и цен. Доработайте, пожалуйста, решение.
Заказывают обычно у тех с кем уже контракт. К тому же этот рынок очень конкурентный и выигрыш 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 секунд уделить, но на самом деле это огромная проблема, потому что все такие мелочи приходится держать в голове, а для собственников крайне важно минимизировать шваль в голове."логика и мотивы собственника совсем не такие"
Дима, я столько различных логик и мотивов у собственников повидал, что мне кажется, удивить меня нелегко ).
Поэтому наименее геморный вариант - это переложить вот такие мелочи на других людей, специально для этого нанятых.
Что вы ко мне прицепились, я говорю я вертел держать это в голове и мне не упал завхоз. Что не ясно :)
Я свой способ ведения дел никому не навязываю
Прикольно! Мне также нужно сделать в холодильнике. Как кончается колбаса, молоко, яйца итд, бот сразу звонит в Ашан и делает заказ курьеру. :D
Интересная идея. Можно такое сделать, но камер потребуется больше, чем одна)
mAP 57% означает что в половине случаев сетка ошибается? Или я не прав? Если да, то это значит каждое второе обращение в сервис ложное?
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 фоток пустых бутылей."
а я бы с помощью поплавкового датчика решил бы :)
Это для контроля уровня в конкретном бутыле, а так достаточно поставить датчик подсчёта смены бутылей, который сопряжён с ДЦ.