如何在 iPhone 上进行面部识别。有人可以为我提供参考/文章以指出我正确的方向吗?我进行了研究并意识到我需要先进行人脸检测以提取图像,然后通过将其与数据库中的其他图像进行比较来进行人脸识别。
我已经意识到我已经通过使用 OpenCV 或使用 iOS 5.0 及更高版本来检测人脸来进行人脸检测。我不确定面部识别(我计划将图像存储在远程数据库中,然后与远程数据库进行比较)。
如何在 iPhone 上进行面部识别。有人可以为我提供参考/文章以指出我正确的方向吗?我进行了研究并意识到我需要先进行人脸检测以提取图像,然后通过将其与数据库中的其他图像进行比较来进行人脸识别。
我已经意识到我已经通过使用 OpenCV 或使用 iOS 5.0 及更高版本来检测人脸来进行人脸检测。我不确定面部识别(我计划将图像存储在远程数据库中,然后与远程数据库进行比较)。
人脸检测
我会使用 Open CV 中可用的 Haarcascades 来执行快速准确的人脸检测。
http://opencv.willowgarage.com/wiki/FaceDetection
人脸识别
我会使用诸如主成分分析(PCA)又名特征脸之类的方法。
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 数据类型存储在数据库中,然后在必要时将它们加载到我的程序中。
编辑
数据库是系统中一个特别棘手的部分,因为这是最大的瓶颈所在。在我的应用程序中,我将执行以下步骤...
对我来说幸运的是,我的数据库服务器位于 LAN 上,因此速度不是问题,但是我可以理解为什么您会遇到问题,因为在移动设备上您的数据连接(速度/带宽)有限。您可以压缩图像,但是由于图像质量降低,这可能会导致识别率降低,并且您必须在设备上进行解码。还有一个问题是如何将远程数据库暴露给应用程序,但是我相信这可以使用 PHP 和 JSON(以及其他技术,见下文)。
也许您可以与数据库进行初始同步,以便将图像缓存在手机上?无论如何,我认为您可能必须以某种方式将图像保存在手机上。
找出将识别数据/图像存储在数据库中的最佳方法是我面临的最大挑战之一,所以我很想知道你是否找到了一个好的方法。
正如您所指出的,使用 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,因此它支持特征脸、Fisherfaces 和局部二进制模式直方图以进行人脸识别。
我们有以下人脸识别api:-
1. OpenCV
2. Kairos
3. CraftarAR
4. AAFaceDetection
5. MoodMe
在我看来CraftAR
,如果您想在离线应用程序中使用,并且如果您想在线使用,那Kairos
是最好的。同时OpenCV
也是一个著名且可靠的选择。
OPENCV 最大的优势是它是开源的。
请在 google 上搜索这些以获取更多详细信息,并查看 github 示例以了解这些 api 是如何工作的。