ss.*_*s.5 9 mysql vb.net biometrics fingerprint
我有指纹识别器secugen,我已经能够通过扫描指纹让我的应用程序控制指纹设备,我已经能够将它们保存到mysql数据库!
在将指纹保存到数据库之后,我现在想要使用指纹搜索用户,并且我无法使用新指纹进行搜索,因为指纹保存为blob/img.所以我需要将指纹转换为唯一ID才能用于在数据库中搜索?
我有9,000,000用户的mysql数据库.现在我可以使用用户的(用户名)获取任何用户信息
SELECT USERS FROM members WHERE username=username_var
Run Code Online (Sandbox Code Playgroud)
但现在我不能WHERE在我的查询中使用,因为我有指纹模板而不是(username)每次都会更改指纹,所以我不能在我的查询中使用指纹,就像(username)我WHERE在查询中使用时一样.
所有指纹SDK都有功能可以帮助我,但它们不是那么快,需要7分钟搜索,这是一个很长的时间.
我不知道该做什么以及如何做.我希望你能理解我的问题
LSe*_*rni 13
您的SDK提供了一种方法,将从传感器获取的指纹转换为适合使用正则表达式进行宽松/近似模式匹配的字符串,或者转换为适合二进制匹配的固定大小的二进制位向量; 或者你需要找一个库来自己做这个转换.所有其他情况虽然在理论上是可行的,但根本不可行.
你不能只对图像做任何事情.
在这种情况下,Secugen SDK只允许访问图像(出于诊断目的,我想),它需要自己运行检查(你需要1:N套件; 1:1套件不会做).如果您仍想继续这样做,我会在底部添加一个建议.请注意,没有真正建议过.
指纹看起来太相似,无法进行标准图像搜索.更糟糕的是,来自同一个人的相同指纹在任何两个读数中看起来都不一样.不同的压力,速度,方向,环境温度,传感器和皮肤水分含量,会导致不同的图像.基本上,除非您将指纹转换为"特征向量",否则您无法执行任何操作.
相反,函数(和你的SDK应该有它们)将指纹图像转换为特殊特征点列表(交叉点,螺纹等,称为细节),以及它们的相对位置和其他参数.发生这种情况的级别取决于使用的SDK和库:有多种方法.针对非常特定的传感器有帮助,但是这些方法在它们提供的内容方面有所不同(例如,鲁棒性,轻微指纹旋转的不变性等).请参阅本文以获取示例以及其他方法的参考.
有些套件不允许这样做(不向用户提供特征向量)并且仅提供比较两个指纹图像的方法,通常使用PCA对齐它们然后运行直接细节匹配.这对于一些图像非常有效,但是在数据库中查找图像的运行时间可能是毁灭性的,因此任务存在专门的硬件(谷歌的"自动指纹识别系统").
获得特征向量后,需要将其转换为SQL可存储对象,该对象可以是字符串或元组中的一系列列.如何做到这一点取决于矢量的构造方式.此对象的性质将决定您将能够运行哪种搜索.这种翻译可以通过多种方式完成,绝对不是你应该自己尝试的.
这也是因为即使在对指纹进行矢量化后,您仍然没有完全匹配.甚至在同一分钟内同一个人的两个指纹之间也没有.你会得到一些积极的比赛和一些负面的比赛,并且需要为两者建立一个置信度阈值("这是他","不是他","不能说").除了决定是否以及在何种程度上容忍误报("是的,这是他!" - 但事实并非如此)和假阴性("不,这不是他" - 而且它是).在门锁上你不需要误报,但可以容忍假阴性(你只需再次滑动手指).在刑事调查中,你不能允许假阴性让罪魁祸首滑倒,你可以接受十几个误报(你会在以后检查他们的不在场......)但不是一百个(你不能检查一个一百个人,其中一些人不会有不在犯罪现场 - 你绝对不能逮捕所有人.
对于大型数据库,您将始终必须运行第一次通过,从而将搜索限制为具有合理的不变特征匹配的指纹(例如,"样本的75%和125%之间的绝对螺纹数").有必要减少元组的数量,然后进行进一步的非不变分析,这是非常昂贵的,绝对不能用标准的MySQL函数完成.
不同的方法是在编码的串表示中变换指纹,使得可以使用主流数据库中可用的合理的词典方法(例如正则表达式加Levenshtein距离)来完成搜索.您的SDK支持此字符串转换,或者不支持; 它涉及一个,可能是特征和谱域中的几个变换.该方法的可信度取决于可以将多少要素填充到字符串中(您拥有的签名越多,匹配所需的越精确,您需要的功能越多,字符串越长).
您可以使用一些外部库来执行编码并使用合适的算法检查您.
即使是一个简单的事情,如"返回最接近的匹配或定义是否是匹配呢?" 在很大程度上取决于存储前指纹的操作方式.这就是为什么通常的SDK将提供一个高层次的接口相匹配的指纹,而且他们会做繁重的自己.有时这种繁重的工作根本无法翻译成数据库(或者没有巨大的困难); 例如,如果"登记"实际上是神经网络的训练,而不是将特征向量插入数据库中.
你有900万用户(你是谁,FBI?)和获得900万指纹的许可.你有这个SDK.并且匹配九百万张图像是不可能的.但由于上述原因,您只能向SDK询问"这个图像是否在您的数据库中?" 并收到一份名单,例如三个名称,其中"是99%,是92%,是90%".
你也许可以这样做:基于真实宏观的东西,在图像上运行非常高水平,非常粗糙的分级.我不知道,也许脊的细节数量.你必须通过检查图像来做到这一点; 可能OpenCV可能会帮助你.你会得到一个从1到N的数字,这个数字将是不可靠的,误差为2%.
这里的关键是你必须确保SDK永远不会说应该进入块X的指纹将与你分组到块Y中的指纹匹配.
然后你可以用每个用户的五十分之一构建50个数据库,假设(而不是:希望)你的参数分布相当平坦,而不是陡峭的高斯分布.分析指纹时,您可以在SDK数据库目录中复制50个数据库中的一个,该数据库对应于您拥有的指纹中的X值,并且您只存储具有相同X值的用户.由于不确定性,一些用户将在两个数据库中,但这样可以将问题减少五十(或者四十五).
您仍然需要调用SDK匹配功能,因为您没有其他方法可以对传入指纹进行分类; 但您可以将运行时间缩短到可管理的比例.
常见的误解是,有一种方法可以将指纹图像转换为唯一的ID,该方法可以与可以比较密码或密码哈希的方法进行比较。实际上,我所知道的所有指纹算法都遵循一些基本原理。
提取
处理指纹图像的第一步是提取。这通常涉及许多图像处理算法,以创建图像的干净二进制版本。然后针对细节点和其他在比较图像时有用的数据点进行处理。这些点存储在称为模板的数据结构中。因为没有两个手指的印象会完全相同,所以即使这些模板也无法进行哈希处理并进行相等性比较。比较指纹的唯一方法是使用匹配算法。
匹配
匹配采用两个模板并进行比较。大多数情况下,这涉及在每个图像中获取相似的细节点的相对位置。有时需要旋转模板以适应用户手指放置的变化。然后,该算法获取所有这些比较的结果,并生成一个分数,该分数表示算法对两个模板匹配的信心。
生成分数后,应用程序可以检查以查看是否足够高以视为匹配项。
没有生物识别算法是完美的。算法的准确性由两个指标来衡量,即错误接受率(FAR)和错误拒绝率(FRR)。当您降低FAR时,随着匹配阈值的增加,不可避免地会增加FRR。
| 归档时间: |
|
| 查看次数: |
11745 次 |
| 最近记录: |