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

Прежде чем продолжить, чтобы не запутаться, дадим определения некоторым терминам.
Детекция — обнаружение любых объектов.
Идентификация — установление соответствия неизвестного объекта известному. Например, мистер X оказывается Васей Пупкиным.
Дальнейшее развитие нейронных сетей подняло точность идентификации, достаточную для решения таких задач, как защита и безопасность. В 2017 году Apple представила FaceID — сканер, позволяющий разблокировать телефон по лицу владельца. Появился новый способ оплаты покупок по биометрии. Летом 2020 года сеть московских кафе Prime начала тестировать систему оплаты по лицу клиента. Вместо использования пропусков для турникетов начинают идентифицировать человека через видеокамеру.
Обращая внимание на количество камер, установленных в крупных городах, можно осознать, что тема важна и актуальна. Правительства самых развитых стран заинтересованы в автоматизации и вкладывают огромные средства в реализацию подобных проектов.
Распознавание с помощью алгоритмов
В 2001 году Пол Виола и Майкл Джонс предложили метод детекции объектов, который широко использовался для определения лиц. В 2005 году Навнит Далал и Билл Триггс показали свои гистограммы направленных градиентов (Histogram of Oriented Gradients, HOG), с помощью которых также можно было детектировать лица.
К сожалению, качество данных подходов оставляло желать лучшего. Системы часто делали ошибки первого и второго рода.
Ошибка первого рода — отказ от правильной гипотезы, когда лицо в кадре не детектируется.
Ошибка второго рода — принятие неправильной гипотезы, когда детектируется то, что к лицу не относится.
Алгоритмы плохо работали при слабом освещении, наклоне или повороте головы. Разницы по точности между этими двумя методами особо не наблюдалось.
Высокую точность обнаружения удалось получить с помощью нейронных сетей. Нейронные сети в отличие от стандартных алгоритмов способны детектировать лица при различных условиях:
- Плохой уровень освещённости (света от монитора в тёмной комнате достаточно для распознавания);
- Голова наклонена или слегка повёрнута;
- Лицо не полностью в кадре или прикрыто ладонью;
- Борода, очки — не проблема.
Так что те, кто до сих пор использует решения на основе старых алгоритмов, бросайте это дело! Давно существуют решения, требующие такой же вычислительной мощности, но при этом дающие точность, близкую к 100 %.
Распознавание лиц в городах
По состоянию на 2019 год, количество камер с системой распознавания лиц, установленных в крупных городах:
- Пекин – 470 тыс.;
- Лондон – 420 тыс.;
- Вашингтон – 30 тыс.;
В Москве сейчас установлено около 193 тыс. HD-камер. Расположение камер можно посмотреть на сайте data.mos.ru.
Также система распознавания лиц запущена в московском метро. Камеры установлены в вагонах и у турникетов. В 2021 году будет добавлена функция оплаты проезда через идентификацию лица. Когда человек пройдет через турникет, оплата спишется автоматически. Для этого всего лишь нужно связать банковскую карту с биометрическими данными.
Цели развёртывания систем распознавания
Теоретически эти меры должны будут сократить преступность, распознавая нарушителей за доли секунды. Система слежения позволит выявить самые опасные места в городе и вычислить нелегальных мигрантов. По данным МВД, за два года тестовой работы системы распознавания лиц нашли около 100 человек, находящихся в федеральном розыске, после чего в конце 2019 года к системе решили подключить все городские камеры.
И вот причина эффективности новой системы слежения: если раньше все материалы сохранялись в отдельный видеоархив и сотрудниками полиции нужно было прогонять каждое видео через специальную программу, то теперь лица распознаются с нескольких тысяч камер в режиме реального времени.
К сожалению, ни одна система не идеальна — иногда данные уходят в сеть. В сети за скромную плату информация продаётся всем желающим. Чаще всего такие данные покупают частные детективы или коллекторы.
Как обрабатываются такие данные
Ряд компаний на протяжении более 40 лет активно разрабатывает системы распознавания человеческих лиц. В их числе даже знаменитый производитель оружия Smith & Wesson со своей системой ASID — Automated Suspect Identification System. А полиция Лондона сейчас тестирует похожую систему в сотрудничестве с японской компанией NEC. Но лидером в данной области можно смело назвать российскую компанию NtechLab. В 2015 году алгоритм распознавания лиц от NtechLab был признан лучшим на организованном Вашингтонским университетом международном конкурсе The MegaFace Benchmark. В мае 2016 NtechLab в числе трёх российских компаний была допущена к официальному тестированию технологий биометрии, проводимому NIST. Сам факт допуска к испытаниям дал компании право участвовать в гостендерах США и ряда других стран.

Широкой аудитории алгоритм был представлен в виде сервиса FindFace, который искал людей во Вконтакте по фотографии. После своего запуска сервис наделал много шума в соцсетях, а также спровоцировал несколько скандалов с деаноном. По всей видимости, сервис был маркетинговым приёмом, призванным показать возможности платформы потенциальным покупателям технологии. Вскоре после этого разработчики закрыли сервис, и компания начала оказывать услуги государству и различным отраслям бизнеса. Стало известно, что мэрия Москвы заплатила NtechLab не менее $3,2 млн за использование её технологии в городской системе видеонаблюдения.
Собственная система слежения в домашних условиях на основе нейронных сетей
MTCNN — нейронная сеть для детекции лиц
MTCNN — это каскад свёрточных нейронных сетей. В модели используются 3 сети: P-Net, R-Net и O-net. Каждая последующая нейронная сеть увеличивает точность прогноза.

Первая P-Net на выходе выдаёт координаты ограничивающих прямоугольников предполагаемых лиц. Далее R-net отсекает области, где лиц скорее всего нет и добавляет уровень достоверности к тем областям, которые остались. В третьей сети мы снова избавляемся от прямоугольников с низким уровнем достоверности и добавляем координаты пяти лицевых ориентиров.

Результат работы mtcnn
Для тех, кто хочет поэкспериментировать, нейронная сеть упакована в Python-библиотеку с одноимённым названием MTCNN. Для запуска достаточно создать объект MTCNN и вызвать метод detect_face.
Детектор возвращает словарь с тремя ключами: координаты прямоугольника, ключевые точки и уровень достоверности. Пример кода с гитхаба проекта ниже:
import cv2
from mtcnn import MTCNN
detector = MTCNN()
image = cv2.cvtColor(cv2.imread("ivan.jpg"), cv2.COLOR_BGR2RGB)
result = detector.detect_faces(image)
bounding_box = result[0]['box']
keypoints = result[0]['keypoints']
cv2.rectangle(image,
(bounding_box[0], bounding_box[1]),
(bounding_box[0]+bounding_box[2], bounding_box[1] + bounding_box[3]),
(0,155,255), 2)
cv2.circle(image,(keypoints['left_eye']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['right_eye']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['nose']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['mouth_left']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['mouth_right']), 2, (0,155,255), 2)
cv2.imwrite("ivan_drawn.jpg", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
print(result)
У меня были проблемы с зависимостями пакетов. Если у вас появляются ошибки, скопируйте в файл requirements.txt эти пакеты:
opencv-python==4.2
tensorflow==1.12.3
keras==2.2.4
numpy == 1.16
protobuf==3.6.0
mtcnn
Если tensorflow не устанавливается тогда обновите setuptools командой:
pip install setuptools --upgrade --ignore-installed
FaceNet
Сиамская нейронная сеть, идентифицирующая лица. Слово «сиамская» означает, что она состоит из двух абсолютно одинаковых нейронных сетей с одинаковыми весами. Во время обучения FaceNet извлекает черты лица и преобразует их в евклидово пространство, где расстояния между точками вектора напрямую соответствуют мере сходства лиц. Сравнивая два изображения с двух сетей во время обучения, коэффициенты меняются так, чтобы увеличить евклидово расстояние, если изображены разные люди, и минимизировать его, когда изображён один и тот же человек.
После обучения нейронная сеть может идентифицировать через сравнение лица с лицами в базе данных.
Чтобы идентифицировать лицо, сначала нужно обнаружить его, для этого подойдет любой метод обнаружения. Когда нейросеть получает изображение, на котором глаза и губы находятся примерно на одном и том же месте, мы приводим картинку к разрешению 96x96 и передаём ее в FaceNet.
Далее изображение преобразуется в евклидово пространство и сравнивается с данными из базы лиц. Если расстояние меньше заданного порогового значения, сеть просигнализирует о совпадении.

Принцип работы faceNet
Желающие протестировать модель могут заглянуть в этот репозиторий, а веса предварительно обученной сети можно скачать с google-диска.
Это стандартные реализации алгоритмов обнаружения. На уровне систем безопасности используется более тонкая и сложная настройка. Разумеется, это коммерческая тайна.
Слабые места подобных систем
Параллельно с развитием систем слежения разрабатываются методы деанонимизации. Для защиты от слежки надевают очки со светодиодами, специальные пиктограммы, не характерные для человеческого лица, или обыкновенные маски.

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

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

- Профессия Java-разработчик
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
- Профессия Этичный хакер
- Профессия C++ разработчик
- Профессия Разработчик игр на Unity
- Профессия iOS-разработчик с нуля
- Профессия Android-разработчик с нуля
КУРСЫ
- Курс по Machine Learning
- Продвинутый курс «Machine Learning Pro + Deep Learning»
- Курс «Python для веб-разработки»
- Курс по JavaScript
- Курс «Математика и Machine Learning для Data Science»
- Курс по аналитике данных
- Курс по DevOps
K10
Защищает ли медицинская маска от распознавания?
Doublesharp Автор
Увы нет. Системы машинного зрения уже достаточно хорошо развиты и теперь распознавание достаточно надёжно выполняется по половине лица или по области глаз (по половине лица уровень успешного распознавания составляет 90%). Новые формы распознавания лиц теперь могут распознавать не только людей в масках, закрывающих рот, но и людей в шарфах или с фальшивыми бородами.
Плюс еще из-за коронавируса много граждан стали выходить на улицы в масках, это подтолкнуло китайских производителей SenseTime, FaceGo, Minivision внедрять эти технологии распознавания частично закрытых лиц в коммерческие модели видеокамер.
uhf
Московское метро в сутки перевозит около 8 млн. пассажиров. Т.е. можно ожидать, что каждое десятое распознавание в маске будет ошибочным (почти 800 тыс. человек).
Допустим маски отменят, но даже один процент неточности даст 80 тыс. ложных распознаваний в сутки. Ок, возьмем референсную точность для Facenet — авторы заявляют 99.67%. Все равно выходит 21 тыс. ошибок каждый день.
Интересно, как вообще планируется с этим разбираться, оспаривать ошибочные транзакции, в случае списания оплаты проезда в метро, например?
А ведь есть уже и банковские приложения с биометрией.
Dimonyga
Не забывайте тот факт что мы имеем дело с видео. а видео это отдельные кадры.
А нейронка обрабатывает их по отдельности.
Трекинг человека задача крайне простая, выдераем «лица» с кадров, детектим, допустим, каждый пятый, по итогу имеем что 6 из 10 это вот этот человек. Значит это действительно он.
Таким образом 21 тыс. ошибок превращаются в… десятки, ну пускай даже сотни.
PS:
по поводу поста — mtcnn и facenet это уже сильно устарело. Кто захочет заниматься — смотрите в сторону RetinaFace и ArcFace, хотя не факт что и это уже не устарело.
uhf
Сколько кадров из видео на одного человека обработает нейронка? Ну, допустим, десять (хотя это потребует десятикратного увеличения требуемых вычислительных ресурсов).
Усредним результаты этих десяти кадров. На сколько уменьшится вероятность ошибки? Интересуют конкретные цифры. Рассчитать тут сложно, потому что кроме ошибки для конкретного кадра из-за неудачного ракурса, есть еще просто очень похожие люди. Если ошибки неизбежны, кто и как будет их разгребать?
Применительно к обслуживанию в банкоматах, например, даже десять ошибок в день — уже совершенно неприемлемо, на мой взгляд.
SthPhoenix
Пока не устарели ни Retinaface ни ArcFace. ArcFace вот на днях вообще новая модель вышла значительно более точная — Partial_FC.
Единственное, как со многим опенсорсом придется потратить много времени чтобы из отдельных модулей собрать единое оптимизированное решение.
astronom
А маска с нанесённым орнаментом? И солнечные очки с ИК-фильтром?)
K10
Китай отдельная история. Как насчет распознавания в Москве?
С трудом верится, что можно провести распознавание по 15-20% лица (правильно надетая маска, шапка).
Dimonyga
github.com/deepinsight/insightface/tree/master/detection/RetinaFaceAntiCov
opensource, проверьте.
есть еще алгоритмы face reconstruction, но они больше заточены работать по серии кадров + поиск похожих по «оставшимся частям» и там дальше цепочка всяких преобразований, на выходе чуть ли не 3d скан лица…
AlexanderS
За 2020 год был накоплен настолько обширный статистический материал, что теперь натаскать по нему нейросеть, думаю, не представляется проблемным. Если бы не было короны непонятно вообще как можно было бы получить такие объёмы «чистого» эталона для нейросетей — граждане получали цифровые пропуска однозначно связывая свои ПД с проездными, которыми авторизовались проходя турникеты, например, метро, будучи в масках напротив которых аккуратно висят камеры. Сами понимаете, насколько это подстегнуло увеличение точности распознавания по части лица.
StjarnornasFred
Маска (носим правильно, на нос!) плюс солнечные очки плюс шапка.
Olegsoft
И шапочка из фольги.
rrdlab_com
Конечно защищает.
Надо только понимать разницу между пиаром — распознавание ЛИЦА в маске, когда от лица остаются только глаза и брови — то есть распознавание по области глаз.
И распознавание объекта по совокупности и других черт — прическа, маска, одежда.
В условиях зимы-осени (шапка+маска) — псевдоалгоритмы почти не работают.
gorgona45
А походка? Кстати, а где можно посмотреть демки по этой теме?
rrdlab_com
достаточно много информации по запросу «обнаружение походки на изображении».
в первых трех запросах есть в том числе постановка задачи для диссертации (похоже, что магистр)
есть статья «Методика учета угла направления движения… при изучении… походки»