指纹扫描仪使用相机 [英] Fingerprint Scanner using Camera

查看:792
本文介绍了指纹扫描仪使用相机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用相机或不使用相机的指纹扫描器,其可能性及其成功率?我遇到了一个名为。没有公司的开源版本/付费版本shenanigans,虽然它目前只移植到C#和Java(有限)。



非基于相机的解决方案



对于可怕的少数设备有支持USB主机模式的硬件,您可以编写自定义驱动程序将指纹扫描仪与Android集成。我会老实说,对于我这样做的两个模型是一个巨大的痛苦。我通过使用 wireshark 在扫描仪和具有工作驱动程序的linux框之间嗅探USB数据包,然后根据嗅探的命令编写Android驱动程序。



交叉编译FingerJetFX



一旦你制定了一个图像采集的解决方案(两个潜在的解决方案都有他们的缺点),你可以开始担心让FingerJetFX在Android上运行。首先,你将使用他们的SDK编写一个自包含的C ++程序,它接受一个图像,并将其变成一个模板。之后,你真的有两个选项。


  1. 将其编译到库并使用JNI与其进行交互。

  2. 将其编译为可执行文件,并让您的Android程序将其作为子过程调用。

对于这两种情况,您需要 NDK 。我从来没有使用JNI,所以我会推迟到智慧 其他,了解我们如何做到最好。我总是倾向于选择路线#2。对于这个应用程序,我认为这是适当的,因为你只是真正地调用本地代码做一件事,模板你的形象。一旦您的原生程序运行并交叉编译,您可以使用此问题的答案将其与您的Android应用程序打包,并从您的Android代码调用它。


Working on fingerprint scanner using camera or without, its possibility and its success rate?, I came across one of open source SDK named FingerJetFX its provide feasibilty with android too.

The FingerJetFX OSE fingerprint feature extractor is platform-independent and can be built for, with appropriate changes to the make files, and run in environments with or without operating systems, including

  • Linux
  • Android
  • Windows
  • Windows CE
  • various RTOSs

but I'm not sure whether Fingerprint scanner possible or not, I download the SDK and digging but no luck, even didn't found any steps to integrate the SDK, so having few of question which listed below:

I'm looking for suggestion and guidance:

  1. Fingerprint scanner can be possible in android using camera or without camera?
  2. With the help of FingerJetFX can I achieve my goal?
  3. If 2nd answer is yes, then can someone provide me any sort of steps to integrate SDK in android?

Your suggestion are appreciable.

解决方案

Android Camera Based Solutions:

As someone who's done significant research on this exact problem, I can tell you it's difficult to get a suitable image for templating (feature extraction) using a stock camera found on any current Android device. The main debilitating issue is achieving significant contrast between the finger's ridges and valleys. Commercial optical fingerprint scanners (which you are attempting to mimic) typically achieve the necessary contrast through frustrated total internal reflection in a prism.

In this case, light from the ridges contacting the prism are transmitted to the CMOS sensor while light from the valleys are not. You're simply not going to reliably get the same kind of results from an Android camera, but that doesn't mean you can't get something useable under ideal conditions.

I took the image on the left with a commercial optical fingerprint scanner (Futronics FS80) and the right with a normal camera (15MP Cannon DSLR). After cropping, inverting (to match the other scanner's convention), contrasting, etc the camera image, we got the following results.

The low contrast of the camera image is apparent.

But the software is able to accurately determine the ridge flow.

And we end up finding a decent number of matching minutia (marked with red circles.)

Here's the bad news. Taking these types of up close shots of the tip of a finger is difficult. I used a DSLR with a flash to achieve these results. Additionally most fingerprint matching algorithms are not scale invariant. So if the finger is farther away from the camera on a subsequent "scan", it may not match the original.

The software package I used for the visualizations is the excellent and BSD licensed SourceAFIS. No corporate "open source version"/ "paid version" shenanigans either although it's currently only ported to C# and Java (limited).

Non Camera Based Solutions:

For the frightening small number of devices that have hardware that support "USB Host Mode" you can write a custom driver to integrate a fingerprint scanner with Android. I'll be honest, for the two models I've done this for it was a huge pain. I accomplished it by using wireshark to sniff USB packets between the scanner and a linux box that had a working driver and then writing an Android driver based on the sniffed commands.

Cross Compiling FingerJetFX

Once you have worked out a solution for image acquisition (both potential solutions have their drawbacks) you can start to worry about getting FingerJetFX running on Android. First you'll use their SDK to write a self contained C++ program that takes an image and turns it into a template. After that you really have two options.

  1. Compile it to a library and use JNI to interface with it.
  2. Compile it to an executable and let your Android program call it as a subprocess.

For either you'll need the NDK. I've never used JNI so I'll defer to the wisdom of others on how best us it. I always tend to choose route #2. For this application I think it's appropriate since you're only really calling the native code to do one thing, template your image. Once you've got your native program running and cross compiled you can use the answer to this question to package it with your android app and call it from your Android code.

这篇关于指纹扫描仪使用相机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆