Распознавание лиц для контроля доступа и учета посещаемости офиса


1.
2.
3.
Автоматизация работы сотрудника ресепшн
Логирование входа и выхода сотрудников и посетителей офиса
Расширяемая самообучаемая модульная система
С переездом нашей компании в новый просторный офис перед нами возник вопрос организации контролируемого доступа сотрудников и учета посещаемости офиса. Действующая система с магнитным замком и ключом "таблеткой" была ненадежной. Ключи требовалось тиражировать, выдавать каждому сотруднику и осуществлять контроль их распространения, также данная система не решала вопрос учета посещаемости офиса. Назревшая внутренняя задача подтолкнула нас разработать собственную систему, решающую возникшие вопросы и учитывающую последние тренды IT-индустрии.
ЗАДАЧА
Разработка технологии для контроля доступа и учета посещаемости офиса Интаро
ЧТО МЫ ДЕЛАЛИ
Разработка программно-аппаратного решения с помощью Python и RaspberryPi

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

Первым делом необходимо было реализовать интерфейс взаимодействия программного кода с механизмом открывания двери. В качестве точки взаимодействия была выбрана домофонная трубка, имеющая кнопку открывания двери изнутри. Для решения этой задачи мы выбрали Raspberry Pi.
Raspberry Pi
Имеет выходы, на которые программно можно подавать сигнал, к тому же на борту она несет полноценный Linux. Этот факт облегчает программную реализацию. Raspberry Pi была включена в корпоративную локальную сеть, и на ней был реализован API для авторизации пользователя и непосредственного открывания двери.
В нашей компании используется корпоративный портал Битрикс24 для ведения учета сотрудников, хранения актуальной информации о статусе (активный/не активный), а главное, фото. Битрикс24 предоставляет API для получения этой информации, что позволило выбрать его как источник исходных данных.

Прототип системы был написан на python ввиду того, что этот язык уже имел готовые модули, написанные сторонними разработчиками, для распознавания лиц.
Система состояла из двух частей:
Сервис, который занимался поиском и распознаванием лиц с последующей регистрацией их в БД. Для этого мы повесили две камеры с двух сторон двери, чтобы регистрировать вход и выход.
1
2
Веб-интерфейс для просмотра данных журнала и построения отчетов. Также был реализован набор регулярных задач для обновления данных из Битрикс24.
Так, Raspberry Pi стала "рукой" нашего будущего консьержа, а "глаза" нам предстояло разработать.
Что в итоге
На выходе мы получили систему, которая узнает сотрудника, подошедшего к двери и, при разрешенном доступе, открывает дверь, а также записывает фото и время в журнал регистрации посещений. Система способна распознать одновременно несколько лиц в кадре и зарегистрировать всех разом.
Во-первых, система не умела распознавать "неизвестных". Но, так как в офисе могут присутствовать сотрудники подрядных организаций, хотелось бы контролировать и их посещения.

Во-вторых, скорость работы текущей системы была ограничена качеством снимка в Битрикс24, и, если лицо на фото нечеткое, то и распознавание происходило медленно, либо не происходило вообще.
В процессе эксплуатации новой системы возникла потребность в ее усовершенствовании.
Следовательно, требовалось реализовать функционал создания пользователя, который в дальнейшем будет идентифицироваться из записи в журнале о неизвестном лице. А для увеличения скорости работы необходимо, чтобы система обучалась на основе удачных и неудачных распознаваний.

В итоге система была значительно переработана. В качестве основы для построения моделей лиц была выбрана dlib. В отличии от предыдущей версии, в которой данные о моделях известных сотрудников хранились в оперативной памяти, и для обновления данных требовалась перезагрузка сервиса с загрузкой новых данных, в текущей системе все данные хранятся в СУБД PostgreSQL, и любое изменение данных о пользователе применяется моментально.
Таким образом, фоновые задачи изменяют данные о пользователях в режиме реального времени. Система приобрела модульную архитектуру, при проектировании которой мы следовали unix-way философии. Каждый модуль системы выполняет свою задачу, а результат выполнения передает другому модулю. Так у нас сформировалось несколько стандартных модулей, которые могут быть заменены или доработаны согласно потребностям.
Sensor
Сенсор (Sensor) - работает с устройством ввода. В нашем случае это камера. Он получает фреймы с камеры и передает их детектору. Сенсор оборудован детектором движения, для того чтобы минимизировать нагрузку на процессор в то время, когда в кадре ничего не происходит.
Detector
Детектор (detector) анализирует фреймы на наличие лиц и все найденные лица передает распознавателю.
Recognizer
Распозназнаватель (recognizer) перепроверяет найденные лица на возможность построить по ним модель. В случае успеха он делает запрос в БД на получение данных о лице.
Worker
Все эти модули объединены в единый фоновый процесс (воркер), который работает с конечным результатом. Как только детектор сенсора сигнализирует о том, что активности в кадре нет уже некоторое время, воркер регистрирует в БД полученные данные. Для каждой камеры запускается свой воркер, таким образом, система работает асинхронно со всеми камерами.
Для дополнительных модулей была реализована событийная модель. Модулям, подписанным на какие-либо события, передавались данные, полученные в результате этого события. Например, при удачном распознавании лица модулю открывания двери передавались данные о распознанном пользователе. А сам модуль на основе этих данных решал открывать дверь или нет. Разрабатывая дополнительные модули, можно расширять систему и наполнять ее большим функционалом. Например, можно научить ее здороваться с сотрудником при первом его появлении в офисе за день.
Система способна самообучаться и достраивать модели пользователей на основе распознаваний с камеры. Таким образом, после недели эксплуатации система "привыкла" к нашим сотрудникам и распознавание стало происходить быстро.

Так как теперь в журнале мы регистрируем неизвестные лица, то на основе записи журнала мы можем создать локального пользователя и разрешить ему доступ в офис. Совместно с этим функционалом была реализована возможность указывать системе на ошибки. Если она кого-то не смогла распознать и он попал в журнал как "неизвестный", то в web-интерфейсе мы можем указать системе, кто это на самом деле был. В следующий раз система его распознает верно.
Достигнутые результаты
В итоге мы получили расширяемую, модульную систему, способную:
вести учет посещаемости;

регистрировать вход и выход сотрудников и посетителей офиса;

самообучаться;

писать видео со входа в офис;

а главное производить контролируемый допуск лиц без использования материальных средств контроля допуска.
Данная система плотно интегрирована с процессами в компании и практически не требует вмешательства администраторов.
Но как часто бывает, довольно обычное, хотя и очень технологичное прикладное решение несет за собой целый поток новых идей и реализаций. Машинное зрение все чаще мелькает в новостных сводках Силиконовой долины, полиция многих стран опробывает распознавание преступников в потоке людей, ну а мы попытаемся привнести эти идеи и технологии в крупные омниканальные компании, следите за нашими кейсами.
+7 495 268-02-56
Работаем на рынке веб‑разработки с 2006 года. Входим в топ‑100 веб‑разработчиков Рунета и в топ‑3 разработчиков интернет‑магазинов
115230, Москва, Хлебозаводский пр., д. 7, стр. 9
Есть интересные проекты? Свяжитесь с нами!