The project has moved and its functionality has substantially changed since then: https://sourceafis.machinezoo.com/java https://github.com/robertvazan/sourceafis-java
Hi Robert, I'm trying to user your project SourceAFIS in my android app, but I can't get the this object to read my image that is coming in array of bytes from Digital persona u4500. Looks like you dont yuse readAllBytes in the android version. And my digital persona array template is not accepted by your project. FingerprintTemplate probe = new FingerprintTemplate(~~~ new FingerprintImage().dpi(500). decode(Files.readAllBytes("MyByteArrayp[])))); > Then I tried this and still doesn't work: boolean...
Hi Robert, I'm trying to user your project SourceAFIS in my android app, but I can't get the this object to read my image that is coming in array of bytes from Digital persona u4500. Looks like you dont yuse readAllBytes in the android version. And my digital persona array template is not accepted by your project. FingerprintTemplate probe = new FingerprintTemplate(~~~ new FingerprintImage().dpi(500).decode(Files.readAllBytes("MyByteArrayp[])))); > Then I tried this and still doesn't work: boolean...
Hi Robert, I'm trying to user your project SourceAFIS in my android app, but I can't get the this object to read my image that is coming in array of bytes from Digital persona u4500. Looks like you dont yuse readAllBytes in the android version. And my digital persona array template is not accepted by your project. FingerprintTemplate probe = new FingerprintTemplate( new FingerprintImage().dpi(500).decode(Files.readAllBytes("MyByteArrayp[])))); Then I tried this and still doesn't work: boolean matches...
Hi Robert, I'm trying to user your project SourceAFIS in my android app, but I can't get the this object to read my image that is coming in array of bytes from Digital persona u4500. Looks like you dont yuse readAllBytes in the android version. And my digital persona array template is not accepted by your project. FingerprintTemplate probe = new FingerprintTemplate( new FingerprintImage().dpi(500).decode(Files.readAllBytes("MyByteArrayp[])))); Then I tried this and still doesn't work: boolean matches...
Hi Robert, I'm trying to user your project SourceAFIS in my android app, but I can't get the this object to read my image that is coming in array of bytes from Digital persona u4500. Looks like you dont yuse readAllBytes in the android version. And my digital persona array template is not accepted by your project. FingerprintTemplate probe = new FingerprintTemplate( new FingerprintImage().dpi(500).decode(Files.readAllBytes("MyByteArrayp[])))); Then I tried this and still doesn't work: boolean matches...
Hi Robert, I'm trying to user your project SourceAFIS in my android app, but I can't get the this object to read my image that is coming in array of bytes. Looks like you dont yuse readAllBytes in the android version. FingerprintTemplate probe = new FingerprintTemplate( new FingerprintImage().dpi(500).decode(Files.readAllBytes("MyByteArrayp[])))); Then I tried this and still doesn't work: ~~~ private double compareFingerPrints(byte[] fingerPrintProbe, byte[] fingerPrintDb) { boolean matches = false;...
Hi, We Want to Compare Fingerprint (ANSI378 Template as Bas64String) in .NET. Can anyone help how to Build Afis Template from Base64String of ANSI Template and prcoeed? If anyone can share code that will be more helping.
how i can integrated NFIQ Algorithm with SourceAfis using java ??
Can you select a certain person in the list List<person> by ID for verification? </person>
does SourceAFIS 3.8.1 runs on Android as well? I used your library using gradle, when I try to match two fingerprints it crashes.
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open . Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
This is an archive of past discussion. New questions will not be answered. If you have a bug to report or an enhancement to suggest, create an issue on GitHub or Bitbucket: https://github.com/robertvazan/sourceafis-net/issues https://bitbucket.org/robertvazan/sourceafis-net/issues?status=new&status=open Issues that request better documentation on specific topics are also welcome. Existing documentation can be found on the website: https://sourceafis.machinezoo.com/net If you prefer Q&A interaction,...
FYI, SourceAFIS 3.6.0 runs on Android API level 24+.
FYI, SourceAFIS 3.6.0 runs on Android API level 24+.
FYI, SourceAFIS 3.6.0 runs on Android API level 24+.
FYI, SourceAFIS 3.6.0 runs on Android API level 24+.
FYI, SourceAFIS 3.6.0 runs on Android API level 24+.
FYI, SourceAFIS 3.6.0 runs on Android API level 24+.
I've found my error it's the database field where I'm saving the template. It needs to be in blob type... Thank you very much for the amazing library!
Nothing obvious is wrong. Could you post exception stack trace?
Hello I'm trying to match my extracted template to a new fingerprint candidate is my code right or I'm missing something? I save the template as byte[] in the database.
Template storage is outside the scope of SourceAFIS. You should probably use proper embedded database. Merely concatenating them in one file will make it impossible to read them back one at a time.
Hi, I have a question relating to enrollment of fingerprints. database.dat is the file where the whole data is stored. What I want to do is to append the extracted templates keeping the previous template data in database.dat file. For this purpose, I set the FileMode.Create to FileMode.Append but this is not working. Kindly help me so that I can keep the previous data in database.dat file plus append the new data in database.dat file. Regards,
understood, i have to do a lot of study before i draw any conclusions, just wanted to start a talk and see what anyone else has found or tried. i agree that we have to do some kind of memory use. i need to see the actual matching code before i can say anything of real meaning. got the files but it will take time to learn what is going on. thanks for any input.
Definitely cache all templates in RAM. SourceAFIS was designed to work this way. AFAIK, most if not all fingerprint matchers need some form of in-memory storage. 300K templates can still fit in a mid-sized cloud instance. As for keeping the cache up to date, write-through caching is the easiest to implement, but it doesn't let you run multiple servers concurrently. Write-back caching is more complicated and requires some change notification mechanism, but it will work in a distributed system.
Hello, i am in the process of studying the code and determining if i can use it in an application i am developing. a challenge i forsee based on my inital search has to do with running this as a web service. in short loading a large database into memory on each call would be a performance killer when the data size grows. also as the data volume grows the ram needed to cash the data could become an issue in a cloud environment. i am going to take a look at how the system does the matching and see...
I can already scan the fingerprint and store them as byte[] or bitmap. Do you have a solution in mind so that I can apply your algorithm and existing code to work in Android? I just dont get it why its not working, the parameter of FingerprintTemplate is bitmap I wonder why its not being process in Android.
If you just comment out the two non-Android decoders, SourceAFIS will only support WSQ images and ANSI/ISO templates.
I will use DigitalPersona 4500, should it work if I just comment out the two decoder who's having error?
No. Not yet.
Do you have a decoder of android bitmap?
This code was designed to fall back to other image decoders when ImageIO is not available, but now that I am looking at BufferedImage in method signature, I am worried that it will throw during class loading already. What exception are you getting? Anyway, since Sanselan depends on ImageIO, WSQ would be the only supported format even if the class loading succeeded. In order to make this work on Android with PNG/JPEG, you will need to implement decodeViaAndroidBitmap and add it to the list of image...
Hi what should I do to these codes? BufferedImage is not available in android
Hi sorry, can you elaborate this, I cant find a method readImage() in FingerprintTemplate.java
If you have a specific problem with Android, could you start a new thread that describes that specific problem, including stack trace if applicable?
Hi guys, I'm having trouble applying this to android, I get also missing librarys specially in BufferedImage, what should I do?
SourceAFIS uses Java 8 features that require API level 24. I can however develop a custom version of SourceAFIS that supports API level 21. Contact me via email if you are interested. https://sourceafis.machinezoo.com/custom
Hello, my minSDKVersion is 19 and my Target is 28, although the device I'm running the fingerprint matcher on has an API of 21. (I.E. Lollipop, SDK ). And in the FingerprintTemplate and FingerprintMatcher classes, it shows red underlines saying "Call requires API of 24" how can I get this to support API of 21 at least please. It took me weeks to realise, this is the cause of the crashes.
I suspect the old SourceAFIS wouldn't work in Mono. It depends on full .NET Framework. SourceAFIS for .NET really needs to be updated, not only to match SourceAFIS for Java, but also to target one of the more portable .NET profiles.
Good day, excellent work with FuenteAfis, congratulations. I am using your .dll on a raspberry PI 3 with Mono / linux. The problem is when serializing the class. MyFingerPrint does not show an error. It does not seem to find any file of that class and can not add those dependencies. We did not discover that, since we tried the serialization in Win10 with Visual Studio and it could be serialized. I guess there's something with MonoDevelop, but what can it be? I hope you can help us Thank you Enviado...
This benchmark has numerous issues: build time overhead JVM launch overhead JVM is not warmed up 2x image I/O and 2x feature extraction is included in benchmark of matching speed index() method is included in timing of match() method match() method is tested on matching fingerprint pair (rare in 1:N) low data diversity - only one fingerprint pair
This benchmark has numerous issues: build time overhead JVM launch overhead JVM is not warmed up 2x image I/O and 2x feature extraction is included in benchmark of matching speed index() method is included in timing of match() method match() method is tested on matching fingerprint pair (rare in 1:N) * low data diversity - only one fingerprint pair
I am using NetBeans IDE for development. After I cloned the project from bitcucket and imported the project I noticed it had to download some dependencies at first build. At the moment the matching algorithm works fine but I'm concerned about the total time it takes to execute - I observe an average run time of 6-7 secs for 1:1 matching. Below is my code: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and...
ok thanks
That's alright, but everything I said about the poor benchmark setup still holds. If you would like to discuss performance further, please create a separate thread for it.
" SourceAFIS can match single probe against a database of candidates at the speed of 16,000 fingerprints per second per core on decent processor according to my tests." Wow. what I did was clone the project from Bitbucket, import as a project to NetBeans and write a Java APP with a main class. See my code: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.machinezoo.sourceafis;...
The benchmark you posted includes a lot of Maven and JVM overhead. The JVM didn't get a chance to warm up. SourceAFIS can match single probe against a database of candidates at the speed of 16,000 fingerprints per second per core on decent processor according to my tests.
But then one more thing, you talked about wait time. I observe (using Netbeans) an average run time of 6-7 secs for 1:1 matching
Great suggestion there @robert-vazan I think this is what I'd do. I store just A SINGLE impression as you explained here - "If you want to keep the 3 views, perhaps you should only check the 2nd and 3rd view only if the first view matches with some minimum score (maybe 10+). " But I would ensure I capture 2 or 3 times and ensure a good similarity score before saving just one. Thus matching would be way faster
"Why are you collecting 3 impressions of each finger? Is the sensor small? If so, can you use a sensor that is large enough? If some of the impressions are of lower quality, it is better to enroll the best one instead of enrolling and matching all three." Hmm.. good question. Well I got this concept from the type of enrollment used by Digital Persona 4500 SDK - they capture up to 3 or 4 times I guess to ensure different possible positions,angles, and finger placements matches "Do you know the finger...
BTW, it is possible to perform template fusion, i.e. produce single unified template from multiple fingerprint scans. SourceAFIS doesn't support it yet, but I can develop it if someone is willing to sponsor the work. But in your case, I think the multiple impressions are an overkill and you can just drop them or use the 10+ score trick described above.
BTW, it is possible to perform template fusion, i.e. producing single unified template from multiple fingerprint scans. SourceAFIS doesn't support it yet, but I can develop it if someone is willing to sponsor the work. But in your case, I think the multiple impressions are an overkill and you can just drop them or use the 10+ score trick described above.
I haven't seen fingerprints from Digital Persona 4500, but it seems to be a large enough sensor. Multiple impressions are usually taken from very small sensors like those on phones. If you want to keep the 3 views, perhaps you should only check the 2nd and 3rd view only if the first view matches with some minimum score (maybe 10+). The reasoning is that if it is a matching fingerprint, then score above 10 is highly likely even if there's only a small overlap between the probe and the candidate. This...
"Why are you collecting 3 impressions of each finger? Is the sensor small? If so, can you use a sensor that is large enough? If some of the impressions are of lower quality, it is better to enroll the best one instead of enrolling and matching all three." Hmm.. good question. Well I got this concept from the type of enrollment used by Digital Persona 4500 SDK - they capture up to 3 or 4 times I guess to ensure different possible positons,angles, and finger placements matches "Do you know the finger...
Okay, so you enroll 3 impressions for each one of 6 fingers (3 per hand). Then you scan a single impression of a probe fingerprint. Do you know the finger position of the probe fingerprint? If so, you only need to compare against the 3 views of this finger in the candidate person. How many candidate persons do you have? Matching single candidate fingerprint is very cheap compared to feature extraction. Even if you have over a thousand persons, you can still parallelize over several cores to match...
The SourceAFIS projects is a very great library to start with on Fingerprint Recognition. I have implemented (using java) the 1:1 matching and it works fine. Nonetheless, a use case came up - capturing up to 3 images of per finger for three fingers - thumb, index and middle finger for both hands. So this implies that when I’m performing a match test for a particular user, I’m verifying the probe image against 3 fingerprint images * (3 fingers * 2 hands) which is a total of18 candidate fingerprint...
Try addding adding the following compile options to your build.gradle file: compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } See working gradle build file below: apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "a.e.poc.biometricandroid" minSdkVersion 24 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions...
Thank you
This is a bit of a FAQ by now, but let's collect an up-to-date summary. SourceAFIS is an original algorithm, but it drew a lot of inspiration from other opensource algorithms, particularly NIST's MINDTCT and BOZORTH3 algorithms, which are well documented. SourceAFIS doesn't have deep algorithm description yet. It only has a very brief summary: https://sourceafis.machinezoo.com/algorithm Some understanding of the algorithm can be nevertheless gleaned from algorithm transparency data, which lets you...
Can you please tell me which algorithm you have used in SourceAFIS fingerprint matching?
Try addding adding the following compile options to your build.gradle file: compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } See working gradle build file below: apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "app.evtrack.poc.biometricandroid" minSdkVersion 24 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions...
Hi, please create a new thread with this question to keep the forum usable. I cannot move messages between threads.
Can you please tell me which algorithm you have used in SourceAFIS fingerprint matching??
You cannot reconstruct exactly the same fingerprint, but you can reconstruct fingerprint that is sufficiently similar to match reliably. Furthermore, SourceAFIS may employ ridge matching in the future and its templates will likely embed all ridge curves, which will make it possible to reconstruct nearly perfect duplicate of the fingerprint. Templates really aren't designed to protect information. I know there are research papers covering secure/encrypted/hashed templates, but I cannot provide any...
Thanks for your response. I see that when I loose fingerprint template somebody is able to generate image which wil produce same tamplate. But is this generated from template image really fingeprint image? Anotherwords Can I produce from this: https://pasteboard.co/IjF0wMM.png This: https://pasteboard.co/IjF0rMz.png Imagine If I in my database I have a table which stores user's name, lastname and fingerprint image. In this situation, if I'll have data leak, attacker has a lot of fingerprints and...
Templates don't add any security. They are just a performance optimization. If templates are used as input to biometric system, stolen template is all an attacker needs to get in. If images are needed as input, then attacker can use stolen template to reconstruct fingerprint image that will produce the same template once it is entered into the target biometric system, i.e. templates are reversible enough to work in an attack. There are "encrypted" or "secure" templates. SourceAFIS doesn't use them....
My name is Michał and I'm 19 years old IT student from Poland. Currently I work on my new project, basically I will try to create fingerprint webauthentication service which will work as authentication provider (such as facebook or google). So I started with a little research and I found SourceAFIS algorithm. In my application I have to handle data security problem. Of course I can't store plain fingerprint .jpg files. I can encrypt them and then decrypt when I will have to compare one fingerprint...
The "reconstruction" involves transformation from the 64-bit raw grayscale to 32-bit RGBA and subsequent encoding in PNG format. There is no direct way to open the image.
Robert, How to open the grayscale image with paint or other image viewer. You have pasted the images in the documentation. "The following fingerprint image can be reconstructed from this stage's binary data. Visualization itself is not part of transparency data." How are you re-constructing with binary data.
These files contain raw grayscale image. Look at the transparency data documentation for details of the format: https://sourceafis.machinezoo.com/transparency/decoded-image
I am able to generate the transparency.zip file and extracted it. But I am not able to open the .dat files with Microsoft Paint or any other program. May be I have to re-construct that using some API to see the files like 021-equalized-image.dat as JPG or BMP formatted file. Let me know if you have Java API to create the JPEG image from .dat file.
ANSI/INCITS 378 is now supported by the latest SourceAFIS.
ANSI 378 is now supported by the latest SourceAFIS, although use of this format is still discouraged in favor of fingerprint images.
Built-in readers don't provide fingerprint image access for privacy reasons AFAIK. You can however connect USB fingerprint reader or capture fingerprints using phone camera. There seem to be devices on the market that are specifically designed for collecting biometric information and they likely provide easy access to fingerprint image.
I have read posts about porting of SourceAfis to Android, but is it possible to acquire fingerprint image with reader of mobile phone ? And thus use SourceAfis at all ?
Hi Robert, Thanks for you explaination. I agree fully, and it's as I expected. Best, Tim
Constructing one template from multiple images is what I called fingerprint merging, which is usually implemented on template level as template merging. SourceAFIS doesn't have this feature yet. Many phones with small sensors will ask you to put your finger on the sensor repeatedly when you enable fingerprint authentication. But they only need one scan to actually unlock the phone. This is logical since the initial setup is performed only once and it is reasonable to ask the user for more patience...
Hi Robert, Much thanks for your support. Being a mintutia matcher (and not a level 3 matcher), itself poses a problem with small sensors, so I'm not suprised that the performance would be bad. When you say "storing multiple scans" do you mean that I capture more images, and store as probes: FingerprintTemplate probe = new FingerprintTemplate() .dpi(500) .create(probeImage); And then add them to the UserDetails (candidates) list? Or can I construct one template (probe) from multiple images with some...
SourceAFIS is purely computational. It has nothing to do with hardware access. What you probably want is a fingerprint reader that will work in the browser. This can be theoretically done if the fingerprint reader software is installed on the client and it includes suitable browser plugin. You can try to look for fingerprint reader vendor that offers this functionality. Another interesting option, one that should work quite well on phones too, is to use browser's camera API to capture photo of the...
Could the SourceAFIS application be working with the web application? Say you want to read from the finger-print reader and submit the data to a web application for processing?
The sensor area is probably too small. You need larger sensor. Storing multiple scans of the same finger and picking the best match could help somewhat. SourceAFIS algorithm can be improved to either merge multiple fingerprints during user registration or to mine and use features from the image more aggressively. Neither of these enhancements is planned in near future. If this is a large enough commercial application, consider sponsoring one of these improvements to SourceAFIS. Contact me via email...
Hi, I have a smaller sensor with 160x160 pixels, 508dpi, that I'm trialing with the SourceAFIS algorithm. I get really poor results (scoring <=30) for good fingerprint samples, when matching. Is there any parameters or tuning that I can do to increase the matching score, or this is due to the inherent nature of Minutia matchers? Br, Tim
I made it working . Thanks You for Helping and 'Motivating'
That's not an error. That's just SLF4J informing you that you didn't configure any logging implementation (SLF4J is just an interface). If it bothers you, pick one of the SLF4J implementations and add it as a dependency to your project.
Now I am getting this error.
The root cause is that you are managing dependencies manually. You should tell Maven/Gradle to fetch the dependencies for you. If you are building SourceAFIS from sources, you can find the list of direct dependencies for SourceAFIS in pom.xml that accompanies the sources. Add them to your maven/gradle configuration. If you are still stuck, there is extensive documentation as well as relevant forums covering dependency management in Java.
The error I am facing is no regular error which cannot be handled by exception handling classes.
Will I get Master's degree for it? :-) Seriously, I would definitely expect someone with Master's degree to be able to use the extensive online documentation on how to work with Maven dependencies.
I am really help less at this moment, its my Masters Major Project. Can you please help me through Team Viewer?
You can find all maven artifacts on Maven Central: https://search.maven.org/
Can you Please send me the jar file you used in your source code for "org.slf4j.*"
This is most likely an issue with your project configuration or runtime environment rather than with SourceAFIS. Try to instantiate some logger before calling any SourceAFIS methods, for example by invoking LoggerFactory.getLogger(Matcher.class) on the first line of main(). If you get exception again, it means the issue is not SourceAFIS-specific.