2013-09-20 3 views
3

Im работает над iPhone-приложением, где Im пытается реализовать CIDetectorEyeBlink, чтобы проверить, закрыт ли человек в изображении закрытыми глазами. Но свойства leftEyeClosed и rightEyeClosed всегда возвращают 0/NO.iOS 7 CIFeature: CIDetectorEyeBlink не обнаруживает закрытые глаза на изображении

Я вставил часть моего кода для реализации.

CIImage* image = [CIImage imageWithCGImage:originalImage.CGImage]; 

CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace 
              context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]]; 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], CIDetectorEyeBlink, [NSNumber numberWithBool:YES], CIDetectorSmile, nil]; 

NSArray* features = [detector featuresInImage:image options:options]; 

for(CIFaceFeature* faceObject in features) 
{ 
    NSLog(@"TEST left eyeblink: %@", faceObject.leftEyeClosed ? @"YES" : @"NO"); 
    NSLog(@"TEST right eyeblink: %@", faceObject.rightEyeClosed ? @"YES" : @"NO"); 
} 
+0

На каком устройстве есть вы их тестируете? Эта функция может быть недоступна на некоторых устройствах – Vinzzz

+0

Im тестирование на iPhone 4S под управлением ios 7 –

+0

Вы дважды проверяли, что CIImage, который вы берете из оригинала, не ноль? В зависимости от того, как вы создаете этот оригинальный UIImage, это возможно. – FiddleMeRagged

ответ

7

У меня была такая же проблема, но после попытки этот tutorial я понял, что я не добавлял: CIDetectorImageOrientation вариант, например:

NSDictionary *detectorOptions = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; 
    CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:detectorOptions]; 

    NSArray *features = [faceDetector featuresInImage:[CIImage imageWithCGImage:_imageView.image.CGImage] 
               options:@{ CIDetectorSmile : @YES, 
                 CIDetectorEyeBlink : @YES, 
                 CIDetectorImageOrientation :[NSNumber numberWithInt:ORIENTATION_NUMBER] }]; 

Сейчас он работает гладко;)

0

В коде нет ничего плохого. Детектор мигания преуспеет на некоторых изображениях и терпит неудачу на других, а не противоречит. Попробуйте сами на нескольких изображениях.

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