如何在iPhone上进行面部识别。有人可以给我提供参考/文章,指出我正确的方向吗?我已经做了研究并意识到我需要首先进行人脸检测以提取图像,然后通过将其与数据库中的其他图像进行比较来进行面部识别。
我已经意识到我已经通过使用OpenCV或使用iOS 5.0及更高版本来检测面部进行面部检测。我不确定面部识别(我计划将图像存储在远程数据库上,然后与远程数据库进行比较)。
答案 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数据类型,然后在必要时将它们加载到我的程序中。
修改强>
数据库是系统中一个特别棘手的部分,因为这是最大的瓶颈所在。在我的申请中,我将完成以下步骤......
幸运的是,我的数据库服务器位于局域网上,因此速度不是问题,但我可以看到为什么你有一个问题,因为在移动设备上你有一个有限的数据连接(速度/带宽)。您可以压缩图像,但由于图像质量下降,这可能会导致更差的识别率,并且您还必须在设备上进行解码。还有如何将远程数据库暴露给应用程序的问题,但我相信这可以使用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的工作原理。