Программа Сравнения Отпечатков Пальцев

9 Comments

Методы распознавания отпечатков пальцев и реализация средствами Python. Программа обучения операторов кодированию следов пальцев и ладоней. Dactyl, Solo Photo, Fingerprint Quick Action и ещё 5 программ для Android, которые используют сканер отпечатков пальцев в работе, — в .

Методы распознавания отпечатков пальцев и реализация средствами Python / Хабрахабр. В текущем семестре появился в расписании предмет «Методы и средства защиты компьютерной информации», частью которого являются лабораторная работа по биометрии, а точнее по распознаванию отпечатка пальца.

Так же, недавно, на Хабре была статья про устройства предназначенные для сканирования. Решил написать здесь про алгоритмы распознавания. Передо мной, как перед студентом, стоит довольно стандартная задача: верификация отпечатка пальца(сравнение с эталоном). Так как лабораторная эта, появилась только в этом году, то методического пособия по ней еще нет. Но в виду интересности задачи, я отправился к Гуглу. Как ни странно, наиболее содержательной оказалась вторая часть статьи, указанной в топике про сканеры.

В ней описано, довольно понятно, несколько алгоритмов: 1. Корреляционное сравнение. Данный подход заключается в попиксельном сравнении двух изображений, для различных сдвигов и углов поворота, на основе получившихся результатов выносят решения о совпадении. Сравнения по узору.

Программа Сравнения Отпечатков Пальцев

Считыватели отпечатков пальцев FingerChip были разработаны Atmel. 1), либо с помощью самостоятельно разработанных программ. Если сравнивать отпечаток пальца и ключ, то можно сказать, что у каждого. Fingerprint Программу сравнения отпечатков пальцев SDK для распознавания отпечатков пальцев. И JNI, чтобы вызывать сравнение из .

Программа Сравнения Отпечатков Пальцев

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

Сравнение по особы точкам. Особые точки — это конечные точки и точки ветвления.

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

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

Реализацию решено было сделать на Python. Соответственно, помимо самого Python(у меня версии 2. PIL(Python Imaging Library), для разбора картинки на пиксели. Шаг 1. Бинаризация. Тут я не стал изобретать, и сделал все довольно просто, в лоб. Img=. Скелетизация.

Этот шаг вызвал самое большое затруднение, так как алгоритмы гуглились сложнее всего. В итоге найдено 4 алгоритма.

Выбран был шаблонный метод, и первый набор, так как в отличии от второго набора шаблонов, он требует всего один обход изображения. Скачать Программу Для Чтения Файлов Rtf На Андроид здесь. Правда для снижения уровня неточностей используется часть шаблонов из второго набора.

Шаблоны соответствуют матрице 3*3, где центральный элемент является текущим пикселем в обходе изображения. Восемь первых шаблонов, являются основной частью. Четыре снизу для устранения «шума», при чем эти четыре так же могут быть повернуты на 9. Если мы натыкаемся на шаблон, то центральный пиксель окрашивается в белый цвет(не принадлежит скелету). Обход продолжается, пока остаются возможности удаления.

Код этого действа разбит на несколько функций: def tmp. Delete(img):  #вызов процедуры скелетизации, на входе список списков(после бинаризации)w=len(img)h=len(img. Выделение особых точек. Тут все тривиально.

Если в окрестности из 8 точек, есть только одна черная, то это конечная точка. Если же их 2 то это просто точка линии. Три — точка ветвления. This. Point(img, x, y): #подсчет количества черных в окрестностиc=0for i in range(x- 1,x+2): for j in range(y- 1,y+2): if img. Для того, чтобы их не учитывать, делалась удаление близко стоящих (1. Сравнение точек. Простой поиск точки которая попадает в окрестность 3. Point(r, v): #вход: кортеж точек эталона и кортеж проверяемого; выход (совпало, всего)all=0match=0for i in v.

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

Реализация на Python довольно медленна: скорость выполнения на моей машине совершенно не пригодна для пунктов с большим человеческим трафиком. Возможно, что использование Num. Py повысило бы производительность, да и я не лучший реализатор. Полностью код брать тут. Тестировалось на этом наборе.

PS Хотелось бы замечаний по коду, так как в питоне ориентируюсь слабовато. Ну и мнения тех, кто серьезно занимается дактилоскопией.