2012-04-22 95 views
28

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

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

+1

[OpenCV中的人脸识别](http://stackoverflow.com/questions/4856929/face-recognition-in-opencv) – karlphillip 2012-04-22 22:09:41

+1

也可能出现[如何使用OpenCV进行人脸识别?](http ://stackoverflow.com/questions/7949​​494/how-to-do-face-recognition-using-opencv)等等。 – karlphillip 2012-04-22 22:10:49

+1

可能的重复[如何在iOS上执行面部识别?](http://stackoverflow.com/questions/8020842/how-can-i-perform-facial-recogntion-on-ios) – Monolo 2012-07-17 05:34:41

回答

14

人脸检测

我会用开放的简历提供的Haarcascades进行快速,准确的人脸检测。

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

人脸识别

我会使用的方法,如主成分分析(PCA)a.k.a特征脸。

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

该链接显示了如何获得与OpenCV的工作教程 - 我认为这是C写的,但我敢肯定,你可以得到它的基本JIST。

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

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

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

数据库

我真的做到了与你类似,尽管在PC上不是iPhone,但它仍然是一个概念。我将所有图像作为Blob数据类型存储在数据库中,然后在必要时将它们加载到我的程序中。

编辑

数据库是系统的一个特别棘手的部分,因为这是其中最大的瓶颈是。在我的应用程序,我会去通过以下步骤...

  1. 开放的应用和抢训练从数据库图像
  2. 基于这些图像训练集
  3. 一旦1和2已完成系统非常快,因为它只是对训练集进行识别。

幸运的是,我的数据库服务器位于局域网中,因此速度不是问题,但是我可以看到为什么有一个问题,因为在移动设备上您的数据连接有限(速度/带宽)。您可以压缩图像,但这可能会导致较差的识别率,这是由于图像质量下降,您还必须在设备上进行解码。还有如何将远程数据库公开给应用程序的问题,但我相信这可以使用PHP和JSON(以及其他技术,见下文)。

Retrieving data from a remote database

也许从而使图像在手机上缓存,你可以做与数据库的初始同步?无论如何,我认为你可能不得不在手机上放置图像。

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

+0

非常感谢您的答复。关于数据库,程序是否连接到数据库,然后下载所有的图像,然后对每个图像执行识别?这对我来说很有用,因为它将是一个功能有限的移动设备。 (即时通讯可能是错误的,所以请纠正我,我正处于即将试图找出算法/ psudo代码如何处理事情的阶段)。 – 2012-04-25 15:53:57

+0

@RoryLester嗨,我已经更新了答案,希望能够回答你的一些问题。祝你好运! – TomP89 2012-04-26 20:49:35

+0

@ TomP89人脸识别链接不再工作了......如果您知道一些用于人脸识别的新链接,那么更新答案将会很棒。 – Dave 2015-06-25 12:14:31

2

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

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

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 
} 

至于你的问题(即面部识别)的第二部分,我将留给别人更有资格比我自己来回答。 :)

+10

这是脸**检测**,不**识别**。 – UIAdam 2012-04-23 01:27:11

+1

@UIAdam:很好的一点,我已经编辑,在我的答案中澄清。这个问题表明,选举委员会了解这两项任务,并相应修改了答案。 – 2012-04-23 02:41:53

9

您可能想看看Pedro Centieiro的midian项目,该项目使用OpenCV在iOS 5上执行人脸识别。这是在GitHub上的:

它使用的我libfacerec部分,所以它支持特征脸,费舍尔和局部二值模式的直方图进行人脸识别。

1

我们有以下的面部识别API: -

1. OpenCV 

2. Kairos 

3. CraftarAR 

4. AAFaceDetection 

5. MoodMe 

,在我看来,如果你想在离线应用程序中使用CraftAR是好的,如果你想在网上使用再Kairos是最好的。而OpenCV也是一个着名和可靠的选项。

OPENCV的最大优点是它是开源的。

请在google上搜索以获取更多详细信息,并查看github示例,了解这些API如何工作。