来自iSight视频的cidetector

时间:2011-12-08 13:09:54

标签: face-detection

我正在尝试创建一个基本应用程序来显示来自iSight的视频输入,并使用CIDetector进行面部检测。

我该怎么做? 要使用CIDetector,我需要CIImage。我可以以某种方式将每个帧作为CIImage并在其上运行检测器吗?然后显示原始输入,以及我想添加的一些效果。

感谢

1 个答案:

答案 0 :(得分:1)

本质上,您使用AVFoundation的组合来捕获帧,使用Core Image来使用检测来处理这些帧。

作为一个起点,您可以从本教程开始:http://indieambitions.com/idevblogaday/raw-video-data-app-quick-dirty/

这是获得EAGLContext,AVCaptureSession以及所有输入和输出设置的良好开端。它还显示了如何将CMSampleBufferRef转换为核心图像,然后您可以将其弄乱。

要启动并运行面部检测,您需要添加一个CIDetector(在本例中为@property (nonatomic, strong) CIDetector *faceDetector),使用以下内容修改viewDidLoad代码:

[CIDetector detectorOfType:CIDetectorTypeFace context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyLow }];

请注意,您可以根据效果更改准确度。

之后,当您捕获数据时,您可以通过放入captureOutput:DidOutputSampleBuffer:fromConnection:函数来收集所有面孔:

    NSArray *featureArray = [self.faceDetector featuresInImage:image];

    for (CIFeature *faceFeature in featureArray) {
        if ([faceFeature.type isEqualToString:CIFeatureTypeFace]) {  //future proof!
            CGRect faceRect = faceFeature.bounds;
            //do whatever you want with faceRect here.
        }
    }

注意:这是一种启动和运行的方法,但我只能在视网膜iPad上以低于15 fps的速度运行它。在WWDC视频和后续源代码中,他们非常有效地使用CIDetector,因此可以完成。

祝你好运!