我正在OSX Mavericks上编写一些人脸检测代码,并试图利用CIDetector提供的跨多张静止图像的新的( 10.8)人脸跟踪功能。
我让基本的人脸检测工作得很好,如下所示:
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *image = [CIImage imageWithCVImageBuffer:imageBuffer];
CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace
context:nil
options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh,
CIDetectorTracking : @YES
}];
NSArray *features = [faceDetector featuresInImage:image];
for ( CIFaceFeature *feature in features ) {
if (feature.hasTrackingID) {
NSLog(@"tracking id: %@", @(feature.trackingID));
}
}
}功能列表确实被正确填充,但trackingID似乎从未出现过。有没有人在小牛身上做到了这一点?它在Mountain Lion上也失败了。
我在这里看到了一个类似的问题(CIFaceFeature trackingID is always coming same for multiple faces),但我在那里没有学到任何新的东西。
值得注意的是,它似乎在iOS上运行正常。
发布于 2013-11-19 10:24:19
我再次查看了这段代码,结果发现答案非常明显:我不断地重新初始化CIDetector,这对性能不好,而且每一帧都会重新设置其内部跟踪数据。因此,对于特定的CIDetector实例,第一次检测到人脸总是第一次检测到人脸。
此外,CIDetector在文档中对此提出了警告:
“这个类可以维护许多可能影响性能的状态变量。因此,为了获得最佳性能,请重用CIDetector实例,而不是创建新实例。”,来自https://developer.apple.com/library/mac/documentation/CoreImage/Reference/CIDetector_Ref/Reference/Reference.html。
https://stackoverflow.com/questions/19983741
复制相似问题