6

上周我一直在研究和试验面部识别。预期的应用程序是让人们能够通过简单地拍摄他们的面部照片来在数据库 (SQL) 中查找一个人的信息。最初的期望是能够将一个面压缩成一个键或散列,并将其用作数据库的 lokup。这不需要非常准确,因为查找信息的人可以并且很可能最终会在文件中的原始图像和站在他们面前的人之间进行最终比较。

OpenCV/JavaCV 似乎是一个明显的起点,它提供的面部检测效果很好,但是用于面部识别的 Eigenfaces 的实现并不理想,因为每次需要重新编译数十万用户面部的在线培训需要新的面部添加到训练集中是行不通的。

我正在尝试在使用 OpenCV 的 Haar Cascade 特征提取的面部上使用 SURF 描述符,这似乎让我更接近预期的结果,但是我无法想出一种方法来有效地查找和比较大约 30 个描述符(它们是64 或 128 维向量)在数据库中。我已经阅读了一些关于 LSH 和 Spectral Hashing 算法的文章,但是没有找到适用于 Java 的实现,而且我的数学还不够强大,无法自己实现它们。

有没有人对如何实现或什至可能有任何想法或想法?

4

1 回答 1

2

Hashing isn't complicated, nor do you need a degree in maths.

Assuming that any 2 images will result in a fairly similar number of 'descriptors' then it only requires that you get a reasonable match with enough of them to get to a high enough confidence factor.

How specific these descriptors are determines what level of collision you can accept in your hashing algorithm.

As you have several of them, I would suggest that you don't need anything too sophisticated - after all, you probably want a level of 'fuzziness' in your search?

Start with something simple - experiment and refine. You might even find that you'll need different hashing for different descriptors - i.e. some might be more specific than others?

Hopefully some food for thought.

于 2011-04-19T23:08:48.953 回答