用相机或没有,它的可能性和成功率上的指纹扫描仪的工作?我碰到一个名为开源SDK的一个FingerJetFX其与Android提供feasibilty了。
该FingerJetFX OSE指纹特征提取是平台无关的,可以建成为,与对make文件适当的修改,并在环境中有或无操作系统上运行,其中包括
- Linux的
- Android的
- 视窗
- Windows CE的
- 各种实时操作系统
但我不知道是否指纹采集仪可能与否,我下载SDK和挖掘,但没有运气,甚至也没有发现任何步骤,将SDK整合,所以有少数几种如下问题:
我在寻找的建议和指导:
- 指纹扫描仪可以用相机或没有摄像头是Android的可能吗?
- 的帮助下
FingerJetFX
我能实现我的目标? - 如果第二个答案是肯定的,那么有人可以给我提供任何形式的步骤,以在SDK的Android集成?
你的建议是明显的。
Android相机基础的解决方案:
正如有人谁的完成显著研究这个确切的问题,我可以告诉你,这是很难用任何现有Android设备上发现了一个股票相机获取模板(特征提取)合适的图像。 主要衰弱的问题是实现手指的波峰和波谷之间显著的对比。 商业光学指纹扫描器(您正试图模仿)典型地实现通过受抑全内反射在棱镜必要的反差。
在这种情况下,同时从谷光不从脊的棱镜接触光被发送到CMOS传感器。 你根本不会去可靠地得到同样的从Android相机的结果,但是,这并不意味着你不能得到的东西在理想条件下可用。
我把左边的图像与商业光学指纹采集仪(Futronics FS80),并用普通相机(15MP佳能DSLR)的权利。 剪裁,翻转后,对比等摄像机图像(其他扫描仪的约定相匹配),我们得到以下结果。
照相机图像的低对比度是显而易见的。
但是,该软件能够准确地确定脊线流动。
而我们最终找到匹配的细节体面的数量(标有红色圆圈)。
这里的坏消息。 考虑到这些类型的指尖的近距离拍摄是困难的。 我使用的数码单反相机用闪光灯来实现这些结果。 另外,大多数指纹匹配算法没有形成规模不变。 所以,如果手指远离在随后的“扫描”的摄像头,也可以不匹配原始。
该软件包我使用的可视化是优秀的和BSD许可SourceAFIS 。 没有任何公司的“开源版” /“付费版”恶作剧或者虽然它目前只移植到C#和Java(有限)。
非基于照相机的解决方案:
对于可怕的少数有支持“USB主机模式”的硬件设备,您可以编写自定义的驱动程序集成与Android的指纹扫描仪。 我会说实话,对于这两种模式我这样做了,这是一个巨大的痛苦。 我用它来完成Wireshark的嗅探扫描仪和有工作的驱动程序,然后根据嗅探到的命令写一个Android驱动程序在Linux机器之间的USB数据包。
交叉编译FingerJetFX
一旦你已经制定了图像采集解决方案(包括可能的解决方案有其缺点),你就可以开始担心会FingerJetFX运行在Android上。 首先,你将使用他们的SDK编写一个自包含的C ++程序,它的图像,并把它变成一个模板。 之后,你真的有两个选择。
- 它编译成库,并使用JNI与它的接口。
- 把它编译成可执行文件,让你的Android程序中调用它作为一个子进程。
对于任何一个你需要的NDK 。 我从来没有使用JNI,所以我会听从智慧的人就如何最好我们它。 我总是倾向于选择路线#2。 对于这个应用程序,我认为这是合适的,因为你只有真正调用本地代码做一两件事,模板图像。 一旦你得到了你的本地程序的运行和交叉编译,你可以使用这个问题的答案与你的Android应用程序打包使用Android代码调用它。
Tthere有几个直接的障碍:
获取指纹的良好形象,将是至关重要的。 根据他们的网站,fingerjet预计标准指纹图像 - 例如,8位灰度(高对比度),扁平指纹图像。 如果你把指纹图像用相机,用户将需要有一个平坦的透明表面(玻璃),你可以为了拍摄照片拼合指纹上。 然后,您的应用程序将找到指纹图像中,将其转换成fingerjet接受的格式。 像OpenCV的库将有助于做到这一点。
FingerJetFX OSE似乎并不提供罐装支持Android的 - 你将不得不编译为Android库,并通过JNI / NDK使用它。
从那里,fingerjet应为您提供您可以用于匹配打印的紧凑表示。
这将是可行的,但使用要求(需要用户有一个可用的平坦的透明表面)可能是一个大忌......