macos - CIDetector跟踪ID从不存在

标签 macos cocoa face-detection osx-mavericks core-image

我正在 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));
        }
    }
}

功能列表确实已正确填充,但跟踪ID似乎从未存在。 有人在 Mavericks 做过这个吗?它在 Mountain Lion 上也以同样的方式失败。

我在这里看到了类似的问题(CIFaceFeature trackingID is always coming same for multiple faces),但我没有在那里学到任何新东西。

就其值(value)而言,它似乎在 iOS 上可以正常运行。

最佳答案

我再次查看了这段代码,答案非常明显:我不断地重新初始化 CIDetector,这对性能不利,而且还会导致每帧重置其内部跟踪数据。因此,第一次检测到面部始终是第一次为该特定 CIDetector 实例检测到面部。

此外,CIDetector 在文档中对此发出警告:

“此类可以维护许多可能影响性能的状态变量。因此,为了获得最佳性能,请重用 CIDetector 实例而不是创建新实例。”,来自 https://developer.apple.com/library/mac/documentation/CoreImage/Reference/CIDetector_Ref/Reference/Reference.html .

关于macos - CIDetector跟踪ID从不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983741/

相关文章:

objective-c - 将 CIImage 转换为 NSImage

macos - 将 EKAuthorizationStatus 重置为 EKAuthorizationStatusNotDetermined 以进行测试

java - 如何判断检测到的人脸是真人还是假人

c++ - Opencv 光流跟踪 : stop condition

actionscript - 将其他 Haarcascade xml 与 Marilena 一起使用

macos - 如何在 MacOS 上通过 TCP 连接到 Docker

objective-c - 为 NSOpenPanel 取消按钮设置自定义标题

macos - Mac OS X Lion 上的 Tcl 8.6 安装问题

java - 将 Java 应用程序移植到 OS X 后发生 BadPaddingException

macos - 关闭一个小型化的 NSWindow 然后恢复它