Кто не моет посуду? Ответили на этот вопрос с помощью машинного обучения

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

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

Интерфейс веб-приложения

Для осуществления задуманного нам понадобились пара видеокамер и немного свободного времени.

Начнем!

Почему машинное обучение?

Во-первых, нейронные сети отлично справляются с задачами распознавания в режиме реального времени и с высокой точностью. Также в 2015 году в рамках соревнования ImageNet Large Scale Visual Recognition Challenge (ILSVRC) исследователи констатировали превосходство программ в определенных задачах проекта над человеческими способностями.

Но первым задокументированным случаем стала программа по распознаванию дорожных знаков, созданная специалистами компании Swiss AI Lab в 2011 году. В базе 50 тысяч изображений немецких дорожных указателей — она распознала 99,46% из них, что в два раза эффективнее человека. Сейчас подобные технологии активно развиваются и совершенствуются.

Во-вторых, мы с этим работаем. Мы перепробовали множество различных методов, и именно нейронные сети решали подобные задачи наиболее эффективно.

Что нужно для решения проблемы

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

  • Камера.

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

  • Алгоритм.

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

  • Датасет.

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

  • Время.

По порядку

Одну из камер мы подвесили над раковиной, чтобы видеть процесс мытья посуды, а вторую поставили возле неё, чтобы распознавать лица.

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

После настройки оборудования пришло время собирать датасет для обучения сети. По десять фотографий каждого сотрудника мы вытащили из социальной сети Instagram, еще по 190 — считали с кадров, сделанных IP-камерой, с помощью библиотеки алгоритмов компьютерного зрения OpenCV.

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

Для обнаружения лиц применили решение, которое с помощью открытой библиотеки TensorFlow реализует архитектуру MTCNN для обнаружения лиц.

Как работает MTCNN

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

Но обнаруживать и распознавать человека, который подошёл к раковине, — недостаточно. Он же мог просто руки помыть. Так что мы реализовали идентификатор «нагрузки» раковины, то есть как много в ней посуды — с помощью различных функций OpenCV.

Для определения процесса «мытье посуды» мы добавили к системе нейросеть Temporal Relation Network (TRN). Эта сеть, обрабатывая видеозапись, выделяет кадры с манипуляциями и создает из них несколько кластеров, которые позже сравнивает с известным ей видам манипуляций.

Как работает TRN

Чтобы все это завернуть в удобную и симпатичную обертку, сделали веб-приложение с помощью Flask, HTML, CSS, Javascript. Оно показывает, кто подходит и моет посуду. Вся информация об этом записывается в базу данных SQLite, поддерживаемую в нашем приложении с помощью библиотеки Peewee.

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

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

0
62 комментария
Написать комментарий...
Вася Пражкин

Ну Вы мастера гвозди микроскопами забивать!

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

Не ищем легких путей 😏

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

Ваше бы усердие, да в мирное русло..

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

Пусть банальная и, с точки зрения реализации, легкая задача дала опыт инженерам, и сейчас они работают над более масштабными проектами с компьютерным зрением)

Ответить
Развернуть ветку
Тимофей Иванов

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

Ответить
Развернуть ветку
Вы в федеральном розыске

Тех, кто не моет руки после туалета.
Поубивал бы.

Ответить
Развернуть ветку
Вадим Парамонов

Да зачем грех на душу брать, они сами скоро откинутся )

Ответить
Развернуть ветку
Вы в федеральном розыске

Они несут вред окружающим

Ответить
Развернуть ветку
Oleg Vorogushin

Мизофобия ... Мизофобия (от др.-греч. μύσος — грязь, загрязнение, осквернение + фобия — страх; , англ. mysophobia, misophobia) — навязчивый страх загрязнения либо заражения, стремление избежать соприкосновения с окружающими предметами. Человека, который испытывает подобный страх, называют мизофобом.

Ответить
Развернуть ветку
Sergionn Rad

Это следующий шаг для масштабирования

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

Спасибо, успокоили! А то могло бы закончиться подведением силовых проводов к креслу сотрудников и подаче напряжения, если кто-то не помыл кружку.

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

Над вычислением тех кто не поднимает стульчак в туалете?

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