如何哈希面部识别特征值并存储在数据库中以便以后进行比较

how to hash facial recognition eigenvalues and store in a database to compare with later

我正在从相机抓取面部图像,并存储每个面部帧,直到有足够的图像来训练 opencv 中的特征脸对象。我能够得到平均特征脸,但我想知道如何将其存储到服务器上的数据库中,以便稍后当有人回来时,我可以获得另一个平均特征脸,将其发送到服务器并找到最接近的比赛。我正在考虑对特征脸进行哈希处理并比较哈希值,但我只能将这意味着特征脸本身存储在数据库中,但我不知道如何将客户端上的特征脸与数据库中的所有特征脸进行比较,而无需提取每个特征脸从数据库中下来的单条记录。

有谁知道我如何将特征值或平均特征脸转换成字符串或某种数字,以便将平均特征值与服务器数据库中的值进行比较?

how i could store this into a database on a server

它是否必须是一个实际的数据库服务器,即 MySQL 或那种?为什么不将特征脸图像与包含该特征脸元信息的 sidecar 文件一起存储在磁盘上。

I was thinking of either hashing that eigenface and comparing hashes

我建议反对。如果所有像素都具有相同的值(撇开哈希冲突的可能性),则两个图像将仅具有相同的哈希值。因此,任何图像比较要么是真的,要么是假的。大多数比较都是错误的,因为大多数新查询在数据库中都没有完全匹配。

but i don't know how i would compare the eigenface on the client with all the eigenfaces in a database without pulling every single record down from the database Does anybody have any idea how i might turn the eigenvalues or mean eigenface into a string or number of some kind which i could compare the mean eigenface value with the values in the database on the server?

诀窍是使用图像的抽象表示,通常称为描述符,并在这些描述符上定义距离度量来评估它们的相似性,例如假设一个度量 d 和两个图像的描述符 ABDADB。然后 d(DA, DA) = 0d(DA, DB) >= 0

给定数据库中特征脸图像的所有描述符和度量 d,您可以将所有描述符组织在一个特殊的数据结构中,例如使用 KD 树,以找到新查询图像(即该图像的描述符)的最近邻居。使用这种匹配,不再需要将新查询与数据库中的 all 个图像进行比较。

如果查询 Q 与其第一近邻 NN1 的距离远小于查询 Q 与其第二近邻 NN2 之间的距离, d(DQ, DNN1) < a * d(DQ, DNN2) (a < 1), 那么 QNN1 可以认为匹配.

这是一个非常广泛的话题,有很多方法和观点。但是上面的大纲通常用于类似的应用程序。

这些关键字可以帮助您进一步调查

  • 特征提取和描述符(SIFT、SURF、ORB、FREAK、AKAZE 等)
  • 图像描述符,s.a。
  • 关键点和图像匹配
  • 近似最近邻
  • 人脸检测与识别
  • 可能还有更多...

一般来说,literature surveys 是一个很好的方法,可以大致了解已完成的工作、哪些工作顺利、哪些工作不顺利。