Android SDK for fingerprint matching - External device
Asked Answered
E

2

7

I'm developing an Android application that uses U.are.U 4500 fingerprint reader to identify users. I already have a backend server, that uses SQL Server, to store and register user data and now I need my app to be able to read the user fingerprint and verify if this fingerprint matches any of the fingerprints on the database. Does anyone know a SDK that is able to do this comparison?

I'm using asia.kanopi.fingerscan package to read the user fingerprint and I already have the scan working, now I only need to get this image and compare to the data on the SQL database. I saw a few answers here on StackOverflow telling me to use openCV library for Android, but none of them could give me any lead on how to do it.

I based my development on this tutorial: https://medium.com/touch4it/fingerprint-external-scanner-with-usb-database-sdk-64c3ec5ea82d, but unfortunately I couldn't find the SDK IDKit Fingerprint SDK Mobile anywhere.

How can I sucessufully match the image with the one stored on the database?

Elan answered 11/8, 2019 at 3:50 Comment(4)
You say that you "already have the scan working", and that you "only need to get this image and compare to the data on the SQL database". What is your problem? "Getting the image" or "comparing to the data on the SQL database"?Aniseikonia
The problem is matching the fingerprint. The scanner already reads the fingerprint and I can retrieve the image as byte[].Elan
If you cannot find IDKit, try the verifinger sdk and look at the sample Android code. The UrU SDK would have been your best bet, but it does not support the 4500. If you do not have too many fingerprints to match against, you may, in terms of speed, get away with fetching all of them from the SQL database and matching on the Android device. If you find the performance poor, someone in the answers section has suggested an AFIS.Aniseikonia
@LeonardoDias Will you please kindly share the code how you get the image or data from fingerprint scanner I am stuck at getting data from scanner. ThanksLazaro
E
2

For those who are still looking for an answer to this problem. It's been a while since I actually implemented my solution and, when I did it, I added this line to my app gradle file:

com.github.lmone:SourceAFIS-Android:v3.4.0-fix3

But now I can't seem to find the github link anywhere. Maybe the repository got deleted. If someone find it, please send it to me so I can update my answer here.

Besides that, if you can still add the library to your Android project, the basic idea is to use a FingerprintMatcher to compare two FingerprintTemplate.

Example:

FingerprintTemplate probe = new FingerprintTemplate().dpi(500).create(digital_byte_array);

while (result.next()) {
    byte[] imgCandidate = digital_to_compare;
    FingerprintTemplate candidate = new FingerprintTemplate()
            .dpi(500)
            .create(imgCandidate);

    double score = new FingerprintMatcher()
            .index(probe)
            .match(candidate);

    if (score >= 40) {
        // Found a match
    }
}
            

In my case, I found the performance a little slow. It was usable, but nothing compared to Android's built-in fingerprint device. Also, the bigger your digitals collection, the longer it will take to find a match.

The score of the match is up for you to decide what suits better your project. 40 was a reliable amount in my case. The same goes to the FingerprintTemplate dpi.

Also, the method .create() receives a byte[] as parameter.

EDIT

I found this link and I'm almost certain it is the library I used, but under a new repository name:

https://github.com/robertvazan/sourceafis-java

The docs looks just the same as the code I used: https://sourceafis.machinezoo.com/java

Elan answered 25/8, 2020 at 17:4 Comment(6)
github.com/LintraMax/SourceAFIS-Android Could be this one?Strangulation
This one is a fork from the one I added on the edit. It's on the project Readme: "SourceAFIS project ported from github.com/robertvazan/sourceafis-java to run on Android. This is version 3.10.0 of original SourceAFIS Java version."Elan
A little question, if I don´t want to match images, but bytes, is necessary to use the class FingerPrintImage?Strangulation
If you already have the fingerprint bytes you can create the FingerprintTemplate without the image using this code FingerprintTemplate probe = new FingerprintTemplate( new FingerprintImage() .dpi(500) .decode(bytes));Elan
Can we create a FingerprintTemplate from WSQ Image ?Assuming
Honestly, I'm not sure :D ... Almost three years since I implemented this solution. But if you can convert the WSQ Image to bytes, then you can create the FingerprintTemplate like I said on the comments above and it should work.Elan
P
1

To match a user on server side, you have to use an AFIS server : https://en.wikipedia.org/wiki/Integrated_Automated_Fingerprint_Identification_System

Here some providers of AFIS solution:

Pediform answered 12/8, 2019 at 7:57 Comment(4)
@LeonardoDias Is it useful ?Pediform
It was basically research I had already done. Most of those links redirected me to buy SDK's. I was actually able to find a free library on GitHub and I'm finishing my tests with it.Elan
@Leonardo Dias can you please share library link..?Widner
@ShaileshBhokare I added my results as an answer. Maybe it helps!Elan

© 2022 - 2024 — McMap. All rights reserved.