iPhone上的人脸识别

时间:2012-04-22 21:06:22

标签: ios opencv computer-vision

如何在iPhone上进行面部识别。有人可以给我提供参考/文章,指出我正确的方向吗?我已经做了研究并意识到我需要首先进行人脸检测以提取图像,然后通过将其与数据库中的其他图像进行比较来进行面部识别。

我已经意识到我已经通过使用OpenCV或使用iOS 5.0及更高版本来检测面部进行面部检测。我不确定面部识别(我计划将图像存储在远程数据库上,然后与远程数据库进行比较)。

5 个答案:

答案 0 :(得分:14)

面部检测

我会使用开放式CV中的Haarcascades来快速准确地进行人脸检测。

http://opencv.willowgarage.com/wiki/FaceDetection

面部识别

我会使用诸如主成分分析(PCA)a.k.a eigenfaces之类的方法。

http://www.cognotics.com/opencv/servo_2007_series/part_5/index.html

该链接显示了如何使用OpenCV的教程 - 我认为这是为C编写的,但我相信你可以得到它的基本要点。

如果你觉得勇敢(也不是太糟糕),你也可以自己实施它......

http://www.face-rec.org/algorithms/PCA/jcn.pdf

http://blog.zabarauskas.com/eigenfaces-tutorial/

<强>数据库

我实际上做了类似于你的事情,虽然在PC而不是iPhone上,但它仍然是相同的概念。我将所有图像存储在数据库中作为Blob数据类型,然后在必要时将它们加载到我的程序中。

修改

数据库是系统中一个特别棘手的部分,因为这是最大的瓶颈所在。在我的申请中,我将完成以下步骤......

  1. 打开应用程序并从数据库中获取培训图像
  2. 根据这些图片生成训练集
  3. 一旦完成1和2,系统就会很快,因为它只是对训练集进行识别。
  4. 幸运的是,我的数据库服务器位于局域网上,因此速度不是问题,但我可以看到为什么你有一个问题,因为在移动设备上你有一个有限的数据连接(速度/带宽)。您可以压缩图像,但由于图像质量下降,这可能会导致更差的识别率,并且您还必须在设备上进行解码。还有如何将远程数据库暴露给应用程序的问题,但我相信这可以使用PHP和JSON(以及其他技术,见下文)。

    Retrieving data from a remote database

    也许您可以与数据库进行初始同步,以便将图像缓存在手机上?无论如何,我认为你可能不得不在某种程度上将这些图像放在手机上。

    找出将识别数据/图像存储在数据库中的最佳方法是我遇到的最大挑战之一,所以如果你找到一个好的方法我会很感兴趣。

答案 1 :(得分:12)

正如您所指出的,iOS 5和CoreImage.framework的第一步(脸部检测)很容易。快速举例:

CIImage *image = [CIImage imageWithCGImage:image_ref];
NSDictionary *options = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];
NSArray *features = [detector featuresInImage:image];

for (CIFaceFeature *feature in features)
{
  CGRect face_bounds = [feature bounds];
  CGPoint mouth_position = [feature mouthPosition];
  // do something with these values
}

关于你问题的第二部分(即面部识别),我会把它留给比我更有资格回答的人。 :)

答案 2 :(得分:9)

你可能想看看Pedro Centieiro的midian项目,该项目使用OpenCV在iOS 5上执行人脸识别。它在github上:

它使用我libfacerec的部分内容,因此支持面部识别的特征脸,Fisherfaces和局部二值模式直方图。

答案 3 :(得分:2)

人脸识别可以作为机器学习算法实现。 This book有一章描述了这项任务以及如何实施它。值得一读!

它使用单值分解(SVD),更具体地说是Tensor SVD method

答案 4 :(得分:1)

我们有以下人脸识别api: -

1. OpenCV

2. Kairos

3. CraftarAR

4. AAFaceDetection

5. MoodMe

在我看来,如果您想在离线应用中使用CraftAR是好的,如果您想在线使用,那么Kairos是最好的。虽然OpenCV也是一个着名而可靠的选择。

OPENCV的最大优势在于它是开源的。

请在谷歌搜索这些以获取更多详细信息,并查看github示例以了解这些api的工作原理。