在过去的一周中,我一直在研究和尝试面部识别。预期的应用程序是使一个人能够通过简单地拍摄他们的脸部照片来在数据库(SQL)中查找一个人的信息。最初的期望是能够将面孔压缩为键或哈希并将其用作数据库查找。这不一定是非常准确的,因为查找信息的人可以并且很可能最终会在文件原始图像和站在图像前面的人之间进行最终比较。
OpenCV/JavaCV似乎是显而易见的起点,并且它提供的面部检测效果很好,但是实现Eigenfaces进行面部识别的方法并不理想,因为每次需要新面孔时都会通过重新编译成千上万张用户面孔来进行在线培训被添加到训练集将无法正常工作。
我正在尝试在使用OpenCV的Haar Cascade功能提取的面部上使用SURF描述符,这似乎使我更接近预期的结果,但是我无法想到一种有效查找和比较大约30个描述符的方法(数据库中的64或128维 vector )。我已经读过一些有关LSH和频谱散列算法的文章,但是找不到Java的实现,我的数学能力不足以自己实现它们。
是否有人对如何实现或什至有可能实现有任何想法或想法?
最佳答案
哈希并不复杂,您也不需要数学学位。
假设任何两张图像将产生相当数量的“描述符”,则只需要您与其中的足够数量进行合理匹配即可获得足够高的置信度。
这些描述符的具体程度决定了您在哈希算法中可以接受的冲突级别。
由于其中有几种,我建议您不需要太复杂的东西-毕竟,您可能希望在搜索中具有一定的“模糊性”?
从简单的事情开始-试用并完善。您甚至可能会发现,对于不同的描述符,您将需要使用不同的哈希值-即某些描述符可能比其他描述符更具体?
希望能引起大家的思考。