С точки зрения применения в системах безопасности с повышенными требованиями к точности и надежности самым перспективным методом (не считая точного анализа ДНК) идентификации человека является распознавание по радужной оболочке глаза. Это обусловлено следующими факторами:
Идея распознавать людей по радужной оболочке глаза возникла у профессора Джона Доугмана в 1987 г., он ее запатентовал, и патентная защита не давала возможности кому-либо создать биометрический сканер по радужке. И лишь к 2006-2009 гг стали появляться первые успешные (и не очень) модели. Но стоило все это слишком дорого. С учетом возможностей современного железа мы уже можем создавать коммерческие биометрические сканеры с указанными выше значениями ошибок.
Здесь имеет смысл совсем немного "пробежаться" по теории, не утомляя читателя деталями и тонкостями математического аппарата и используемых алгоритмов.
Классический алгоритм распознавания (у того же Доугмана) состоит из двух частей - сегментации и сравнения.
Сегментация – это выделение самого глаза и радужки на фотографии или в видеопотоке. При этом алгоритм сегментации сильно зависит от используемого оборудования и оптической конфигурации. В отличие от сравнения, которое является математически строгой задачей, сегментация – это задача со слишком большим количеством переменных. Всегда приходится что-то настраивать и выдумывать свое. Например, Доугман в своем патенте предлагал при сегментации искать глаз как окружность, для которой градиент максимален:
где G – оператор гауссовского размытия изображения, I(x,y) – само изображение.
При этом количество гипотез, которые нужно перебирать, равно: W х H•(Rmax – Rmin), где W – ширина изображения, H – его высота, Rmax и Rmin – максимальные и минимальные радиусы соответственно. Решение подобной задачи обработки изображения без предварительной оптимизации даже на современных процессорах типа Intel i7 составляет порядка нескольких секунд. Поэтому существует много настроек, хитростей и уловок, чтобы добиться работы в реальном времени.
Например, использование ИК-подсветки, которая дает характерный блик на зрачке, и поиск этого блика. Задача поиска блика вычислительно значительно проще, чем задача поиска глаза. А глаз ищется потом в окрестности блика. В результате сегментации детектируется зрачок и радужка (рис. 1).
На радужке отмечаются области, интересные для дальнейшего использования, и получается сегментированная область (рис. 2).
Вторая часть – это сравнение. После выделения радужки ее нужно нормализовать для удобного сравнения с другими. Радужка разворачивается из полярных координат в прямоугольник и фильтруется. Каждый применяет свои хитрости и уловки, чтобы выделить/подчеркнуть характерные области и понизить высокочастотные шумы. Используемый фильтр тоже настраивается в зависимости от оборудования.
Преобразованную таким образом радужку называют Iris Code.
Левый "горб" будут формировать сравнения одинаковых глаз с одинаковыми, правый – сравнения разных глаз. Из этого графика берется число, которое хорошо разделяет два "горба". Обычно его выбирают ближе к левому "горбу": не допустить человека лучше, чем пропустить "шпиона". Для данного графика это приблизительно 0,34. В дальнейшем система принимает решение, что человека можно пропускать, если код его глаза имеет дистанцию меньше, чем 0,34, с каким-либо другим кодом из базы.
Читайте полностью в журнале "Системы безопасности" #4, 2018