使用CIDetector进行人脸检测

时间:2012-06-22 10:36:48

标签: iphone objective-c ios face-detection

我正在开发一款应用程序,我必须检测左眼,右眼和嘴巴的位置。 我的imageView上有一个self.viewimageView包含一张脸部图片,现在我想要获得双眼和双眼坐标。我已经看到了2-3个示例代码,但是所有代码都大致相同,我们必须反转我的视图以匹配我不想要的坐标,因为我的视图有一些其他控件。还有一件事他们都在使用

UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image.png"]];

但我的imageView有框架,我无法用图像初始化它。当我这样做时,我发现faceFeature的眼睛和嘴巴坐标错误。

我已经从this sample code启动了我的代码,但是在这个视图中,它正在反转其Y坐标。

任何人都可以帮助我如何检测UIImageView图像上的面部眼睛和嘴巴位置,而不会反转我的self.view

如果我的问题不够明确,请告诉我。

2 个答案:

答案 0 :(得分:1)

这里的技巧是将返回的点和边界从CIDetector转换为坐标,而不是翻转自己的视图。 CIImage起源于左下角,您需要将其转换为左上角

int height = CVPixelBufferGetHeight(pixelBuffer);
CGAffineTransform transform = CGAffineTransformMakeScale(1, -1);
transform = CGAffineTransformTranslate(transform, 0, -1 * height);

/* Do your face detection */

CGRect faceRect = CGRectApplyAffineTransform(feature.bounds, transform);
CGPoint mouthPoint = CGPointApplyAffineTransform(feature.mouthPosition, transform);
// Same for eyes, etc

关于UIImageView的第二个问题,你只需要做

imageview.image = yourImage

初始化图像视图后

答案 1 :(得分:0)

解决了! - 编辑了这个类,让faceContainer包含所有的face对象(嘴和眼睛),然后这个容器被旋转,就这样了。显然这很粗糙,但确实有效。这是一个链接http://www.jonathanlking.com/download/AppDelegate.m。然后用它替换示例代码中的app delegate。

- 旧帖子 -

查看此Apple Documentation,然后从this apple talk向前滑动42。此外,您应该观看演讲,因为它有一个演示您正在尝试实现的内容,它被称为“在iOS和Mac OS X上使用核心图像”,并且是here