2013-11-14 1 views
3

Я работаю над некоторым кодом обнаружения лица на OSX Mavericks, и я пытаюсь использовать новое (по 10,8) отслеживание лица в нескольких функциях неподвижных элементов, которые предлагает CIDetector.CIDetector trackingID никогда не присутствовал

У меня есть основные функции обнаружения лица работает нормально, например, так:

- (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 кажется, никогда не будет присутствовать. Кто-нибудь получил эту работу над Mavericks? Это не так похоже на Горного Льва.

Я видел аналогичный вопрос здесь (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.

 Смежные вопросы

  • Нет связанных вопросов^_^