В первый раз я столкнулся с системой входа в систему, основанной на распознавании лица на ноутбуке от Lenovo. Было забавно, но как ни странно, работало. Проверял при разном уровне освещения, со слегка модифицированной мимикой, с приближением и удалением от камеры. Качество распознавания удивляло, ложных срабатываний не было. Большой ложкой дегтя, конечно, была возможность аутентификации с помощью распечатанной фотографии.
Наша компания предлагает решения для двухфакторной аутентификации, которые уже можно назвать классическими: одноразовые пароли по SMS, аппаратные ключи и мобильные приложения, генерирующие одноразовые пароли на смартфонах пользователей. Параллельно, мы рассматриваем дополнительные методы «второго фактора», в данном конкретном случае в исключительно научных целях — по вполне понятным причинам.
Итак, представленный ниже метод биометрической аутентификации не рекомендуется для промышленной эксплуатации в качестве замены первого фактора (пароля). Риск при использовании метода в качестве второго фактора существенно меньше, но все еще существует — решайте сами. Я просто расскажу, как и с помощью каких инструментов можно организовать аутентификацию для веб приложения с использованием распознавания и валидации изображения человеческого лица. Аппаратная реализация — обычная web-камера.
Утилита br
Я давно слежу за проектом Open Biometrics, и считаю что утилита br, входящая в комплект openbr, на данный момент это лучший из инструментов, который может помочь с основной нашей задачей – сравнением двух изображений: лицо пользователя, сфотографированное при логине сравнивается с оригиналом, записанным при регистрации. В итоге выдается коэффициент соответствия в диапазоне от 0 до единицы. Синтаксис довольно простой:
$ br -algorithm FaceRecognition -compare me.jpg you.jpg
Результат примерно такой:
[root@facelogin]# br -algorithm FaceRecognition -compare image1.png image2.png
Set algorithm to FaceRecognition
Loading FaceRecognition
Comparing image1.png and image2.png
Enrolling image1.png to image1jR5xN2.mem
00.00% ELAPSED=00:00:00 REMAINING=00:00:00 COUNT=1
00.00% ELAPSED=00:00:00 REMAINING=00:00:00 COUNT=1
1
Последняя единичка и есть искомый коэффициент (я сравнивал два одинаковых файла).
Выделение лица
Пользователям было бы не очень удобно следить за тем, чтобы в камеру попадало только лицо, и только одно. Поэтому второй нашей задачей является авто-определение лица на снимке камеры и использование только этого фрагмента для последующего сравнивания с помощью утилиты br. Я решил переложить это на плечи браузера, благо возможности HTML5 это позволяют. По запросу “face detection with HTML5” Гугл выдал neave.github.io/face-detection/. Отличный проект, требованиям соответствует, его и будем использовать.
Что получилось
Скрипт от neave немного модифицирован – он будет передавать координаты и размеры лица через форму на скрипт регистрации и входа.
На php быстренько набросаны скрипты регистрации и логина.
И вот результат http://nikto.us/facelogin/
Если заинтересовались и хотите повторить у себя на сервере, вот список линков
1. Инструкция по установке пакета openbr (на убунту ставится легко, с centos-ом пришлось помучиться, с windows-ом вообще без проблем)
2. Face Detection in JavaScript with getUserMedia
3. Исходники демо проекта (да, попраны все стандарты и рекомендации – поэтому прошу php код не комментировать – это лишь чтобы показать, как это работает) — не забудтье разрешить в php выполнение /usr/local/bin/br и выставить разрешение на запись для директории $facestorage
Автор: EminH