我是Android开发的新手。现在我想在我的应用程序中集成指纹锁。哪个是最好的。请帮我找到好的指纹锁。
答案 0 :(得分:2)
使用相机作为手指锁
作为参考检查这个 Fingerprint Scanner using Camera
作为对这个确切问题做过重要研究的人,我可以告诉你,使用任何当前Android设备上的库存相机很难获得适合模板化(特征提取)的图像。主要的衰弱问题是在手指的脊和山谷之间实现显着的对比。商业光学指纹扫描仪(您试图模仿)通常通过棱镜中令人沮丧的全内反射来实现必要的对比度。
生物识别技术中的FTIR
在这种情况下,来自与棱镜接触的脊的光被传输到CMOS传感器,而来自谷的光则没有。您根本无法从Android相机中可靠地获得相同类型的结果,但这并不意味着您无法在理想条件下获得可用的内容。
我使用商用光学指纹扫描仪(Futronics FS80)在左侧拍摄图像,右侧使用普通相机(15MP Cannon DSLR)拍摄。在裁剪,反转(以匹配其他扫描仪的惯例),对比度等相机图像后,我们得到以下结果。
在此输入图片说明
相机图像的低对比度很明显。
在此输入图片说明
但该软件能够准确地确定脊流量。
在此输入图片说明
我们最终找到了相当数量的匹配细节(用红色圆圈标记。)
这是坏消息。采取这些类型的手指尖的近距离拍摄是困难的。我使用带闪光灯的数码单反相机来实现这些效果。另外,大多数指纹匹配算法不是尺度不变的。因此,如果手指在随后的“扫描”中离相机更远,则可能与原始手指不匹配。
我用于可视化的软件包是优秀且BSD许可的SourceAFIS。没有公司的“开源版本”/“付费版本”恶作剧,尽管它目前只移植到C#和Java(有限)。
非相机解决方案:
对于具有支持“USB主机模式”的硬件的可怕少数设备,您可以编写自定义驱动程序以将指纹扫描仪与Android集成。我会说实话,对于我这样做的两个模型,这是一个巨大的痛苦。我通过使用wireshark在扫描仪和具有工作驱动程序的Linux机箱之间嗅探USB数据包然后根据嗅探命令编写Android驱动程序来实现它。
交叉编译FingerJetFX
一旦你找到了一个图像采集解决方案(两种潜在的解决方案都有它们的缺点),你就可以开始担心在Android上运行FingerJetFX了。首先,您将使用他们的SDK编写一个自包含的C ++程序,该程序将图像转换为模板。之后你真的有两个选择。
将其编译为库并使用JNI与其进行交互。 将其编译为可执行文件,让您的Android程序将其称为子进程。 对于你要么你需要NDK。我从来没有使用过JNI,所以我会尊重别人的智慧,让我们了解它。我总是倾向于选择路线#2。对于这个应用程序,我认为这是合适的,因为你只是真正调用本机代码做一件事,模拟你的图像。一旦你的本机程序运行并交叉编译,你可以使用这个问题的答案将它与你的Android应用程序打包并从你的Android代码中调用它。
答案 1 :(得分:0)