我正在尝试做一个基本的应用程序来显示来自iSight的视频输入,并使用CIDetector进行人脸检测。
我该怎么做呢?要使用CIDetector,我需要CIImage。我能以某种方式获取每个帧作为CIImage并在其上运行检测器吗?然后显示原始输入,加上我想要添加的一些效果。
谢谢
发布于 2012-07-16 23:41:05
本质上,您使用AVFoundation的组合来捕获帧,并使用核心图像来使用检测来处理这些帧。
作为起点,您可以从以下教程开始: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上以微不足道的15fps运行。在WWDC视频和随后的源代码中,他们非常有效地使用了CIDetector,因此可以做到这一点。
祝好运!
https://stackoverflow.com/questions/8431489
复制相似问题