In this article, we introduce a framework in C# for fingerprint verification, we briefly explain how to perform fingerprint verification experiments and how to integrate your algorithms to the framework.

Introduction

Fingerprint recognition [1] is an active research area nowadays. An important component in fingerprint recognition systems is the fingerprint matching algorithm. According to the problem domain, fingerprint matching algorithms are classified in two categories: fingerprint verification algorithms and fingerprint identification algorithms. The aim of fingerprint verification algorithms is to determine whether two fingerprints come from the same finger or not. On the other hand, the fingerprint identification algorithms search a query fingerprint in a database looking for the fingerprints coming from the same finger.

There are hundreds of papers concerning to fingerprint verification but, as far as we know, there is not any framework for fingerprint verification available on the web. So, you must implement your own tools in order to test the performance of your fingerprint verification algorithms. Moreover, you must spend a lot of time implementing algorithms of other authors to compare with your algorithms. This was our motivation to put our fingerprint verification framework available for everyone.

The most closely related work to our framework is the FVC-onGoing web system. This system has the following limitations:

You do not have access to any algorithm but yours.

It is not a framework; so, you cannot reuse any software component.

It cannot be used with educational purpose because students cannot see how the algorithms work.

After performing an experiment using a database (standard or hard) you must wait 30 days to perform another experiment using the same database.

You do not have control over the fingerprint databases. Thus, you cannot use your own databases neither modify the existing ones.

You do not have access to the fingerprints that your algorithm fails matching. Hence, you cannot analyze why the algorithm fails in order to fix your code.

You cannot create an experiment with a custom protocol for performance evaluation.

If any of the above mentioned limitations constitute a problem for you, then you should use our framework.

Our framework is implemented in C# with .Net Framework for two main reasons. First, C# has become one of the most popular programming languages. Second, the technologies, tools and class libraries available on .Net Framework save us a lot of time of coding.

Our framework allows performing fingerprint verification experiments for databases B of FVC2000, FVC2002 and FVC2004; and databases A of FVC2002 and FVC2004. In this experiments, we use the performance indicators of the Fingerprint Verification Competitions [2] (EER(%), FMR100(%), FMR1000(%), ZeroFMR(%), Time(ms) and ROC curves). Additionally, you can include experiments with a custom evaluation protocol or different databases.

We implemented the fingerprint verification algorithms proposed by Tico and Kuosmanen [3], Jiang and Yau [4], Medina-Pérez et al. [5, 6, 8, 12], and Qi et al. [9]. It is important to highlight that, despite the algorithm of Qi et al. is a combination of a minutiae matching algorithm with an orientation based algorithm, we implemented only the minutiae matching algorithm. We also implemented the feature extraction algorithms proposed by Ratha et al. [10] and the orientation image extractor proposed by Sherlock et al. [11]. This framework allows you to include new fingerprint matching algorithms as well as new feature extraction algorithms with minimum effort and without recompiling the framework.

One of the goals that we kept in mind while developing this framework was to achieve class interfaces as simple as possible. This way, adding new algorithms is pretty straightforward.

We hope this work motivates you and more people to collaborate with us in order to implement more algorithms.

In this article we briefly explain how:

to perform fingerprint verification experiments,

to see the matching minutiae after performing an experiment with a minutiae based algorithm,

Running a fingerprint verification experiment

Extract the file “FingerprintRecognition.zip” and build the solution. Then you can debug the project “FR.FVCExperimenter” or you can execute “FR.FVCExperimenter.exe” in the directory containing the generated assemblies. The following window will open:

In the “Resources” text box, specify the path of the database that you are going to use, for example: “D:\PR Databases\Fingerprints\FVC2004\DB1_B”. Select the proper experiment type in the combo box with label “Experiment”. Use the combo boxes “Minutia Extractor”, “Orientation Image Extractor” and “Skeleton Image Extractor“ to select the algorithms that will be used to compute the basic features (minutiae, orientation image and skeleton image).

Use the combo box with label “Matcher” to select a fingerprint verification algorithm, and the combo box with label “Feature Provider” to select the algorithm that will be used to store and retrieve the features for the selected matcher. Despite that we implemented only one feature provider for each matcher, there are possible scenarios where you may have multiple feature providers for each matcher.

The grid with label “Properties” allows changing the parameters of any selected algorithm.

Click on “Execute Experiment” button to run the experiment. This experiment uses the evaluation protocol of the Fingerprint Verification Competitions [2]. The performance indicators computed in this experiments are: EER(%), FMR100(%), FMR1000(%), ZeroFMR(%), Time(ms) and ROC curves. These indicators are saved in a file which name is formed by the name of the matching algorithm concatenated with ".Summary.csv". This file is saved in a folder by the name of "Results" in the same folder where the fingerprints are stored. Two more files are saved, one file containing the false matching fingerprints and the other containing the false non matching fingerprints.

If you want to match two fingerprints and verify the coincident minutiae, then click the “Visual Match” button which will open the “Visual Fingerprint Matching” form. Load the fingerprints that you want to compare and click the “Match” button. The feature extractors and matcher selected in the “FVC Experimenter” are also used here to perform the fingerprint matching. The following is an example of matching two fingerprints:

Visualizing features

If you want to visualize features for certain fingerprint then you can use “FR.FeatureDisplay” project. In “Fingerprint Feature Display” form, you can change the feature extractor and feature display. In the framework, we include classes to visualize minutiae, orientation image and skeleton image.

The following is an example visualizing the orientation image of a fingerprint:

Matching fingerprints out of this framework

This section presents an example of using the framework to match two fingerprint images in a custom user application. It includes the three steps to compare two fingerprint images: image loading, feature extraction, and feature comparison. In this case, users need to add references from their application to the assemblies FR.Core and FR.Medina2012. Assemblies SHullDelaunayTriangulation and ImageProcessingTools must be included in the output folder where the binary files appear.

The example, using the M3gl matcher, shows how easy is to use the framework, and how clean and self-explanatory the user code is. The rules for good designing applied in the framework allow the users to replace or change any component with minimal effort. For example, in order to use PN matcher in the above code, users only need to replace MTripletsExtractor with PNFeatureExtractor, M3gl with PN, and reference FR.Medina2012 with FR.Parziale2004.

Adding new algorithms to the framework

The first thing that you need to know is that you do not need to modify the applications of the framework in order to recognize your algorithms because we use Reflection to load all algorithms dynamically at execution time.

You may create as many assemblies as you want in the directory containing the framework. For each new assembly, go to the properties and set the output path with value “..\bin\Release\”.

In order to add a new feature extractor, you must inherit from the generic class FeatureExtractor<T> and implement the method ExtractFeatures(Bitmap image). For example, suppose that you want to create an extractor for features of type MyFeature, then you could implement a class like the following:

For each feature extractor you must create a resource provider. Resource providers allow saving (retrieving) to (from) file the resources associated to fingerprints. The framework includes resource providers for extractors of minutiae (MinutiaListProvider), orientation image (OrientationImageProvider), and skeleton image (SkeletonImageProvider). The following is an example of a resource provider for the feature extractor defined above.

Integrating existing algorithms into the framework

The users do not need to modify the framework in order to integrate custom algorithms because Reflection is used to load all the algorithms dynamically at execution time. This way, users should add new algorithms to their own custom assemblies.

In order to use an existing matching algorithm within the framework, the first thing that users need to do is to create a resource provider. Resource providers allow saving (retrieving) to (from) files the resources associated with fingerprints. For example, suppose that users want to integrate SourceAFIS SDK (http://www.sourceafis.org/) into the framework, then the following feature provider can be used:

Experimental results

We performed an extensive experimentation with the fingerprint matching algorithms included in this framework. The experiments setup as well as the statistical analysis of the results can be reviewed at [13].

Conclusions

In this article we introduce a framework in C# for fingerprint verification. We briefly explain how to perform fingerprint verification experiments and how to integrate your algorithms to the framework. We provide several matching algorithms and feature extraction algorithms that you can use not only for experimental purpose, but also to create your own applications. We provide the source code of all the algorithms so the user can reuse any part of the code as well as any software component.

Acknowledgment

We would like to thank MSc. Dania Yudith Suárez Abreu for her contribution improving the grammar and style of this paper. Thanks to Jani Giannoudis for suggesting the inclusion of inner exception parameter in the examples.

Share

About the Authors

I received my B.S. and M.S. degrees from the University of Ciego de Ávila, Cuba, in 2007 and I received my PhD. degree in 2014 from the National Institute of Astrophysics, Optics and Electronics (INAOE), Mexico.

I have developed software to solve pattern recognition problems. A successful example is the algorithm DMC which is the most accurate (according to EER) among those which compare both fingerprints and palmprints in the international competition FVC-onGoing.

I have been involved in several research projects about pattern recognition and I have published several papers in referenced journals such as "Pattern Recognition," "Knowledge-Based Systems," "Information Sciences", and "IEEE Transactions on Information Forensics and Security."

Milton García-Borroto is graduated from Las Villas Central University, Cuba, in 2000. He received the M.S. degree in 2007 from the National Institute of Astrophisics, Optics and Electronics, Mexico, where he continues his studies toward a Ph.D. degree. His research interests are pattern recognition and biometry.

Andres Eduardo Gutierrez Rodriguez is graduated from Las Villas Central University, Cuba, in 2006. He received the M.S. degree in 2009 from the University of Ciego de Ávila, Cuba. His research interests are pattern recognition and biometry.

Octavio Loyola González received the B.S. and M.S. degrees from the University of Ciego de Ávila, Cuba, in 2010 and 2012 respectively. He is a PhD student at Instituto Nacional de Astrofísica, Óptica y Electrónica (México). His research interests include pattern recognition, fingerprint recognition, and data mining in imbalanced databases.

Comments and Discussions

I have been trying to Debug and Build the programme, but it keeps giving an error message that this file "FR.FMExperimenter.exe is missing. And when i searched through the extracted zip folder, it was not there. please need your help.

You must create your evaluation protocol because each database contains its format regarding file names, amount of genuine matching fingerprints, amount of imposter matching fingerprints, etc.
You can copy one of the evaluation protocols that we included in the framework, and then adapt it so it can be used with your database.

Hello
first of all I am grateful for all efforts that you present, but if you can make video about how integrate all part of this framework because I am very confused and can not use it until now, when I started run it it dosen't work .
thank you so much

It was the most elaborate framework that I had come across. The documentation helped me to run the references on my custom application successfully. And I am able to get the level of similarity between different prints (I used the standard Mtriplets and Ratha1995 for testing).

I kindly need your suggestions on going ahead to use the same for Biometric Attendance system.
What should I keep as the cut off similarity for deciding that the match is accurate (Please note that I found similarities as high as 0.2 between thumb impressions from different persons.)

Also how can I use multiple images for each person in database and use the same for comparing at runtime.
Will average of the similarities with the multiple database images give a meaningful result?

I'm glad that our framework was useful for your application. Here it goes the answer to your question:
1) And I am able to get the level of similarity between different prints (I used the standard Mtriplets and Ratha1995 for testing).
Answer: We implemented Ratha1995 for education purpose. You can obtain better features by using another free framework (SourceAFIS sdk). We created a new version of our framework (FPRFramework - Miguel Angel Medina Pérez[^]) which includes a wrapper of SourceAFIS SDK in order to use it withing our framework.

2) What should I keep as the cut off similarity for deciding that the match is accurate (Please note that I found similarities as high as 0.2 between thumb impressions from different persons.)
Answer: You should create your own database using the sensor that you intend to work with. Then, you should perform an evaluation of the matching algorithm on your custom database using a protocol such as the one used in FVC2000, FVC2002, FVC2004, and FVC2006. Once you evaluate the algorithm, you may select a threshold (a cut off similarity value) from the ROC curve. Our framework includes those evaluation protocols for FVC2002, FVC2004 and so on; so you will only need to adapt those codes to the size of your database. In order to understand ROC curves in order to determine your threshold, you will need some background knowledge on fingerprint recognition; so I recommend you reading the "Handbook of fingerprint recognition."

3) Also how can I use multiple images for each person in database and use the same for comparing at runtime. Will average of the similarities with the multiple database images give a meaningful result?
Answer: Yes, the average will work. You could read the "Handbook of fingerprint recognition" for more elaborated strategies.

Thanks for your support. Our framework does not include any specific code to do what you want. Such a thing would require more work. Write to my personal email (miguelmedinapere@gmail.com) for further assistance.

A great work, the most interesting article I ever read , thank you.
I'm new to this field and I need help here, how can I classify a given fingerprint into one of the main four or five, I don't know the exact number, defined classes (left-loop, right-loop, whorl...).
Is there a method in your framework to achieve that. If no, do you have a reference that help me to do that.?
Please help.

We are glad you liked our work. Sadly, our framework does not include any algorithm for classifying fingerprint patterns (i.e. whorl, loop, etc). There is a software created by NIST which does what you want. I cannot remember the name of the software, but you could check it out at the famous book: "The Handbook of fingerprint recognition".

The source unzipped and compiled and ran fine. I retrieved the databases as specified, ran the instructions and everything ran flawlessly. A very interesting article, taught me more about fingerprint matching than I knew. Excellent design of the code so that we can extend the framework for our own work. KUDOS.

I am adding my own fingerprint algorithm to the platform and when I press execute experiment, the experiment starts but only creates one file on the database folder called: 101_1.Ratha1995MinutiaeExtractor_Ratha1995OrImgExtractor_Ratha1995SkeImgExtractor.AG and then it stops.

Thanks for using this framework. Please, download the most recent version of our framework at https://sites.google.com/site/miguelmedinaperez/software/fprframework. Rerun your experiment with the new version of the framework and write me back if you still have problems.

Hello, thanks for this great work. I am wondering if your library contains a method to determine if a captured fingerprint image is valid or sufficient enough (good quality) to be used as a fingerprint image.

Thanks for your support. The new version our framework contains the private method

RemoveBadBlocksVariance(OrientationImage oi, ImageMatrix matrix)

inside the class

Ratha1995OrImgExtractor

which basically builds a quality map (varianceMatrix) of the impresion. Using variable varianceMatrix you can set up thresholds to automatically classify prints in low quality, middle quality, and high quality prints.

Please, download the most recent version of our framework at https://sites.google.com/site/miguelmedinaperez/software/fprframework

I am one of the computer engineering Students and one of the my research fields is finger print , this is one of the best projects about Finger print but I can not Run this project, can you help me step by step ? or can you post a video on the You Tube about this project , thank you

Thanks for your interest in this framework. Please, download the most recent version of our framework at https://sites.google.com/site/miguelmedinaperez/software/fprframework
Try with the newest version and let us know your doubts.