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

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

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

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

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

Начнем!

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

Во-первых, нейронные сети отлично справляются с задачами распознавания в режиме реального времени и с высокой точностью. Также в 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 комментария
Написать комментарий...
Ilya Konovalov

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

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

ну конечно - эксперименты же нужно сразу ставить на платящих клиентах!

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