检查数据库中的指纹
Check a fingerprint in the database
我将指纹保存在字段"blob"中,然后想知道比较这些印象的唯一方法是否是检索数据库中保存的所有指纹,然后使用函数"identify_finger"创建一个向量进行检查?您可以使用SELECT?
我正在使用libfprint。在这个代码中,验证是在一个向量中完成的:
def test_identify():
cur = DB.cursor()
cur.execute('select id, fp from print')
id = []
gallary = []
for row in cur.fetchall():
data = pyfprint.pyf.fp_print_data_from_data(str(row['fp']))
gallary.append(pyfprint.Fprint(data_ptr = data))
id.append(row['id'])
n, fp, img = FingerDevice.identify_finger(gallary)
使用指纹数据库有两种根本不同的方法。一种是核实通过其他方式已知的人的身份,另一种是寻找身份未知的人。
像libfprint
这样的简单库只适用于第一种情况。由于您使用它来验证某人,因此可以使用他们的身份从数据库中查找一行。也许您扫描了多个手指,或者每个手指存储了多个扫描,但仍然会返回少量数据库Blob。
指纹搜索算法必须从头开始设计,以缩小搜索空间,快速进行比较,并对结果进行排序和处理误报。就像谷歌搜索可能会出现与你想要的完全无关的页面一样,指纹搜索也会出现。有些公司将其全部存在都致力于解决这个问题。
另一种方法是使用mysql插件,该插件知道如何处理指纹图像并根据您想要的内容进行选择。
我真的怀疑有这样的事情。
您也可以尝试并行化指纹比较,即调用:
FingerDevice.identify_finger(gallary)
并行地,在不同的核心/机器上
您不能使用SELECT直接从数据库进行检查,因为每次扫描都是不同的,并且会产生不同的斑点。libfprint进行了艰苦的工作,比较不同的扫描,判断它们是否来自同一个人
我认为,津金和都铎所说的是,如果你了解判断过程是如何运作的(顺便说一句,通过细节比较),你就可以开发一种将过程的相关数据(可能是*细节?)存储在数据库中的方法,然后开发一种获取相关值的方法——可能是一种索引或数据库的某种扩展。
换句话说,您必须以更复杂(更漂亮)的方式重新实现libfprint
算法,而不是只接受libfprint
方法,将扫描与循环中存储的所有指纹进行比较。
加速程序的其他解决方案
使用C:
我只知道足够的C来编写hello world程序,但用纯C编写代码来使用libfprint
的fp_identify_finger_img
函数并不难,我可以告诉你它比pyfprint.identify_finger
快得多。
您可以继续在python中执行注册部分的操作。我做到了。
使用基于时间/位置的SELECT:
如果你知道你的用户在某个时间比其他时间扫描指纹的概率更大,或者在某个地方比其他地方扫描指纹的可能性更大(可能在某个时候上班并扫描手指,或者离开,或者从一个门或另一个门进入大楼),您可以收集数据(在每次扫描时)来测量概率,并创建并行表来根据用户到达每个时间和位置的概率对用户进行排序。
我们知道identify_finger
试图用您在列表中提供的指纹对象来识别循环中的手指,因此我们可以使用它,并将对象排序为该时间和该位置更有可能的用户将是列表中的第一个,依此类推
- 查询SQLite数据库中的日期
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在ArangoDb AQL查询中指定数据库
- 从数据库实时显示QT c++中的数据
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 无法在C++中建立与MySQL数据库的连接
- 将类实现到数据库程序中
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 调试编译的服务器在数据库打开时崩溃
- C++变量mysql_query到数据库
- LMDB:在有限的内存系统中打开大型数据库
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 以只读模式打开数据库时SQLITE_CANTOPEN错误
- 如何使用SQLite将数据库中的值导出为C / C++中的字符串或字符?
- 如何在Qt中从数据库中检索二进制数据?
- 如何从网站获取数据并将其传输到数据库?
- 在装有 CLion 的 Mac 上使用 C++ 连接到 MySQL 数据库时出现问题
- Qt5 从 MySQL 数据库中选择数据
- 检查数据库中的指纹