2013-11-14 5 views
3

OSX 매버릭스에서 일부 얼굴 탐지 코드를 작업하고 있으며 CIDetector에서 제공하는 여러 가지 정지 기능을 통해 새로운 (10.8 시점에서) 얼굴 추적 기능을 활용하려고합니다.CIDetector trackingID never present

나는과 같이, 잘 작동 기본 얼굴 인식을 가지고

- (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에서는 제대로 작동하는 것 같습니다.

답변

3

이 코드를 다시 살펴본 결과 대답은 꽤 분명해졌습니다. 성능에 좋지 않은 CIDetector를 지속적으로 다시 초기화하고 각 프레임의 내부 추적 데이터를 재설정하는 결과가있었습니다. 따라서 처음으로 얼굴이 감지 된 것은 특정 CIDetector 인스턴스에 대해 얼굴이 처음 감지 된 시간이었습니다.

또한, CIDetector이 문서에서 이것에 대해 경고 :

"성능에 영향을 미칠 수있는 많은 상태 변수를 유지할 수있는이 클래스 그래서 최적의 성능을 위해, 대신 새로 만드는 재사용 CIDetector 인스턴스.."https://developer.apple.com/library/mac/documentation/CoreImage/Reference/CIDetector_Ref/Reference/Reference.html에서.