Framework у С# для перевірки відбитків пальців - Блог ITVDN
ITVDN: курси програмування
Відеокурси з
програмування

Вибери свою IT спеціальність

Підписка

Framework у С# для перевірки відбитків пальців

advertisement advertisement

Введение

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


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

FVC-onGoing – наиболее связанный с работой нашего фреймворка в веб-системе. Данная система имеет такие ограничения:

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

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

Наш фреймворк реализован на С# с использованием .Net Framework по двум главным причинам. Во-первых, С# стал одним из самых популярных языков программирования. Вторая причина в том, что инструменты, библиотеки и классы, доступные в .Net Framework, экономят много времени написания кода.

Наш фреймворк позволяет экспериментировать в базах данных типа B от FVC2000, FVC2002 и FVC2004, и в базах данных типа А от FVC2002 и FVC2004. В этих экспериментах мы выполняем индикаторы the Fingerprint Verification Competitions (EER(%), FMR100(%), FMR1000(%), ZeroFMR(%), Time(ms) и ROC curves).  Кроме того, вы можете делать опыты даже с обычным протоколом и разными базами данных.

Мы реализовали алгоритмы распознавания отпечатков пальцев, предложенный Tico и Kuosmanen, Jiang и Yau, Medina-Pérez и Qi. Важно обратить внимание на то, что вопреки алгоритму Qi - это набор шаблонов отпечатков пальцев, основывающийся на алгоритмах, мы реализовали только алгоритмы, сопоставимые протоколами ввода отпечатка пальца. Мы также сделали алгоритмы выделения признаков, предложенный Ratha, и ориентацию на получение изображения предложенную Sherlock. Данный фреймворк позволяет вам добавлять, как новые алгоритмы распознавания отпечатков, так и новые алгоритмы выделения признаков с минимальными усилиями и без перекомпиляции фреймворка.

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

В этой статье мы вкратце объясняем, как:

  • экспериментировать над распознаванием отпечатков пальцев;
  • увидеть шаблон отпечатка пальца после выполнения алгоритма;
  • высчитать и вывести на дисплей отпечаток пальца;
  • интегрировать ваши алгоритмы в фреймворк.

Расширения данного фреймворка с целью исследований появились в

https://sites.google.com/site/miguelmedinaperez/software/fprframework

В данной статьей мы вкладываем следующие файлы:

Запуск исследования для распознавания отпечатков пальцев

Извлеките файл “FingerprintRecognition.zip” и постройте решение. Далее вы можете отлаживать проект “FR.FVCExperimenter” или можете запустить “FR.FVCExperimenter.exe” в директорию, которая содержит сгенерированный узел. Данное окно откроет:

Окно Visual Studio

В строке “Resources” записан путь к базе данных, которую вы собираетесь использовать, к примеру: “D:\PR Databases\Fingerprints\FVC2004\DB1_B”. Выберите подходящий вам тип опыта в всплывающем меню с названием “Experiment”. Используйте меню с названиями “Minutia Extractor”, “Orientation Image Extractor” и “Skeleton Image Extractor“ для выбора алгоритма, который будет использоваться для нахождения основных особенностей (отпечаток, ориентированное изображение и его образ).

Используйте поле “Matcher” для выбора алгоритма распознавания отпечатков пальцев и поле “Feature Provider” для выбора алгоритма, который будет хранить и извлекать черты выбранных совпадений. Несмотря на то, что мы реализовали только одну черту распознавания для каждого совпадения, существуют сценарии, где вы используете несколько признаков для одного совпадения. Поле с названием “Properties” позволяет изменять параметры выбранного алгоритма.

Кликните на кнопку “Execute Experiment” для запуска исследования. Данный опыт использует протокол оценки от the Fingerprint Verification Competitions. В этом опыте мы высчитали такие индикаторы: EER(%), FMR100(%), FMR1000(%), ZeroFMR(%), Время(мс) и  ROC-кривая. Эти индикаторы сохранены в файле с именем, сформированным в зависимости от выбранного вами алгоритма и окончанием ".Summary.csv". Этот файл сохраняется в папке с названием "Results" в той же папке, где хранятся отпечатки пальцев. Также сохранены еще два файла, один хранит в себе ложные соответствия отпечатков пальцев, другой – ложные несоответствия отпечатков. Если вы хотите сравнить 2 отпечатка и проверить их совпадение, кликните на кнопку “Visual Match”, после которой откроется форма “Visual Fingerprint Matching”. Загрузите отпечатки, которые вы хотите сравнить и нажмите кнопку “Match”. Экстрактор признаков и выбранный в “FVC Experimenter” режим также здесь используются для того, чтобы выполнить сравнение отпечатков пальцев. Ниже пример сравнения двух отпечатков.

Пример сравнения двух отпечатков

Визуализация очертаний отпечатка пальца

Если вы хотите вывести картинку очертания отпечатка, тогда вам нужно использовать проект “FR.FeatureDisplay”. В поле “Fingerprint Feature Display” вы можете изменять экстрактор признаков и их изображение. В фреймворке мы используем классы для визуализации отпечатка, ориентированное изображение и скелет картинки.

В следующем примере вы можете увидеть визуализацию приблизительного изображения отпечатка:

Визуализация изображения отпечатка

Соответствие отпечатков вне фреймворка

В данном разделе представлен пример использования фреймворка для сравнения двух изображений отпечатков в обычном пользовательском приложении. Он складывается из 3 шагов для сравнения 2 изображений отпечатков: загрузить картинку, извлечение признаков и их сравнение. В этом случае пользователям нужно добавить ссылки из их приложения к сборке FR.Core и FR.Medina2012. Сборки SHullDelaunayTriangulation и ImageProcessingTools должны быть добавлены в папку вывода, где появится бинарный файл.

// Loading fingerprints

var fingerprintImg1 = ImageLoader.LoadImage(fileName1);

var fingerprintImg2 = ImageLoader.LoadImage(fileName2);

// Building feature extractor and extracting features

var featExtractor = new MTripletsExtractor() { MtiaExtractor = new Ratha1995MinutiaeExtractor() };

var features1 = featExtractor.ExtractFeatures(fingerprintImg1);

var features2 = featExtractor.ExtractFeatures(fingerprintImg2);

// Building matcher and matching

var matcher = new M3gl();

double similarity = matcher.Match(features1, features2);

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

Добавление новых алгоритмов в фреймворк

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

Вы можете создать столько приложений, сколько хотите в директории, которая содержит фреймворк. Для каждого нового приложения зайдите в настройки и укажите путь вывода со значением “..\bin\Release\”.

Для добавления новой функции определения вам нужно наследовать с базового класса FeatureExtractor и реализовать метод ExtractFeatures(Bitmap image). Например, предположим, что вы хотите создать функцию определения типа MyFeatureдальше вы можете реализовать класс по примеру: 

public class MyFeatureExtractor : FeatureExtractor

{

    public override MyFeature ExtractFeatures(Bitmap image)

    {

        // Place here your code to extract features

    }

}

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

public class MyFeatureExtractor : FeatureExtractor

{

    public FeatureExtractor<List> MtiaExtractor { setget; }

    public FeatureExtractor OrImgExtractor { setget; }

    public override MyFeature ExtractFeatures(Bitmap image)

    {

        try

        {

            var mtiae = MtiaExtractor.ExtractFeatures(image);

            var orImg = OrImgExtractor.ExtractFeatures(image);

            return ExtractFeatures(mtiae, orImg);

        }

        catch (Exception e)

        {

            if (MtiaExtractor == null)

                throw new InvalidOperationException("Cannot extract MyFeature: Unassigned minutia list extractor!", e);

            if (OrImgExtractor == null)

                throw new InvalidOperationException("Cannot extract MyFeature: Unassigned orientation image extractor!", e);

            throw;

        }

    }

    public MyFeature ExtractFeatures(List mtiae, OrientationImage orImg)

    {

        // Place here your code to extract features

    }

}

Для каждой функции определения вы должны создать поставщик ресурса. Поставщик ресурса позволяет сохранять (полученный) в (выходной) файл ресурс, связанный с отпечатком. Фреймворк включает в себя поставщик ресурса для извлекания отпечатков (MinutiaListProvider), ориентированное изображение (OrientationImageProvider) и скелет картинки (SkeletonImageProvider). В следующем примере поставщика ресурсов для функции извлекания определены ниже.

public class MyFeatureProvider : ResourceProvider

{

    public MinutiaListProvider MtiaListProvider { getset; }

    public OrientationImageProvider OrImgProvider { getset; }

    public override string GetSignature()

    {

        return "myf";

    }

    public override bool IsResourcePersistent()

    {

        return true;

    }

    protected override MyFeature Extract(string fingerprint, ResourceRepository repository)

    {

        try

        {

            var mtiae = MtiaListProvider.GetResource(fingerprint, repository);

            var orImg = OrImgProvider.GetResource(fingerprint, repository);

            return featureExtractor.ExtractFeatures(mtiae, orImg);

        }

        catch (Exception e)

        {

            if (MtiaListProvider == null)

                throw new InvalidOperationException("Unable to extract MyFeature: Unassigned minutia list provider!", e);

            if (OrImgProvider == null)

                throw new InvalidOperationException("Unable to extract MyFeature: Unassigned orientation image provider!", e);

            throw;

        }

    }

    private MyFeatureExtractor featureExtractor = new MyFeatureExtractor();

}

Пришло время создать новый алгоритм совпадения отпечатков пальцев. Предположим, вы хотите сравнить функции типа MyFeature, для этого вам необходимо создать «сравнитель» такой как:

public class MyMatcher : Matcher

{

    public override double Match(MyFeature query, MyFeature template)

    {

        // Place here your code to match fingerprints

    }

}

В случае, если вы реализовали алгоритм сравнения отпечатков, дальше вам необходимо изменить в коде ниже следующее:

public class MyMatcher : Matcher, IMinutiaMatcher

{

    public override double Match(MyFeature query, MyFeature template)

    {

        List matchingMtiae;

        return Match(query, template, out matchingMtiae);

    }

    public double Match(object query, object template, out List matchingMtiae)

    {

        // Place here your code to match fingerprints

    }

}

Интегрированные встроенные алгоритмы в фреймворке

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

Для того, чтобы использовать существующие алгоритмы сравнения в фреймворке, первое, что необходимо сделать, создать поставщик ресурсов. Поставщик ресурсов позволяет сохранять (полученный) в (выходной) файл ресурсы, связанные с отпечатками пальцев. К примеру, предположим, что пользователи хотят интегрировать SourceAFIS SDK (http://www.sourceafis.org/) в фреймворк, следующая функция обеспечения может использоваться как:

public class SourceAFISFeatureProvider : ResourceProvider

{

    protected override Person Extract(string fingerprint, ResourceRepository repository)

    {

        Fingerprint fp = new Fingerprint();

        fp.AsBitmap = imageProvider.GetResource(fingerprint, repository);

        Person person = new Person();

        person.Fingerprints.Add(fp);

        Afis.Extract(person);

        return person;

    }

    public override string GetSignature()

    {

        return string.Format("sAFIS");

    }

    public override bool IsResourcePersistent()

    {

        return true;

    }

    private static AfisEngine Afis = new AfisEngine();

}

А сейчас алгоритм сравнения отпечатков может быть записан в следующие классы:

public class SourceAFISMatcher : Matcher

{

    public override double Match(Person query, Person template)

    {

        return Afis.Verify(query, template);

    }

    private static AfisEngine Afis = new AfisEngine();

}

Результаты эксперимента

Мы выполнили обширный эксперимент с алгоритмами сравнения отпечатков пальцев, пользуясь фреймворком.

Выводы

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

Источник: http://www.codeproject.com/Articles/97590/A-Framework-in-C-for-Fingerprint-Verification

КОМЕНТАРІ ТА ОБГОВОРЕННЯ
advertisement advertisement

Купуй передплатуз доступом до всіх курсів та сервісів

Бібліотека сучасних IT знань у зручному форматі

Вибирай свій варіант підписки залежно від завдань, що стоять перед тобою. Але якщо потрібно пройти повне навчання з нуля до рівня фахівця, краще вибирати Базовий або Преміум. А для того, щоб вивчити 2-3 нові технології, або повторити знання, готуючись до співбесіди, підійде Пакет Стартовий.

Стартовий
  • Усі відеокурси на 3 місяці
  • Тестування з 10 курсів
  • Перевірка 5 домашніх завдань
  • Консультація з тренером 30 хв
59.99 $
Придбати
Преміум Plus
  • Усі відеокурси на 12 місяців
  • Тестування з 24 курсів
  • Перевірка 20 домашніх завдань
  • Консультація з тренером 120 хв
  • Завантаження відео уроків
199.99 $
Придбати
Базовий
  • Усі відеокурси на 6 місяців
  • Тестування з 16 курсів
  • Перевірка 10 домашніх завдань
  • Консультація з тренером 60 хв
89.99 $
Придбати
Notification success