iPhone上的脸部识别

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

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

人脸检测

我会使用开放简历中的Haarcascades来执行快速和准确的人脸检测。

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

人脸识别

我会使用一种方法,如主成分分析(PCA)又名特征脸。

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/

数据库

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

编辑

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

  1. 打开应用程序并从数据库抓取训练图像
  2. 根据这些图像生成训练集
  3. 一旦完成1和2,系统就会非常快速地执行对训练集的识别。

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

从远程数据库中检索数据

也许你可以做一个初步的数据库同步,使图像caching在手机上? 无论如何,我认为你可能不得不在手机上的图像。

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

正如你所指出的,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 } 

关于你的问题的第二部分(即面部识别 ),我将把它留给比我更合格的人来回答。 🙂

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

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

人脸识别可以实现为机器学习algorithm。 这本书有一个描述这个任务的章节,以及如何实现它。 值得阅读!

它使用单值分解 (SVD),更具体地讲是张量SVD方法 。

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

 1. OpenCV 2. Kairos 3. CraftarAR 4. AAFaceDetection 5. MoodMe 

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

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

请在谷歌search这些更详细的信息,也看看github的例子,看看这些API如何工作。