У меня есть следующий код для получения черт лица с CIDetector
:
CGImageRef rotatedImage = [self rotate90Degree:image];
CIImage *ciImage = [CIImage imageWithCGImage:rotatedImage];
CIContext *context = [CIContext context];
NSDictionary *opts = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh,
CIDetectorEyeBlink : @YES,
CIDetectorImageOrientation : @1 };
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:context
options:opts];
NSArray *features = [detector featuresInImage:ciImage options:opts];
И затем я обнаруживаю, близки ли глаза, как это:
for (CIFaceFeature* ciFace in features) {
NSLog(@"Left: %@ - Right %@", ciFace.leftEyeClosed, ciFace.rightEyeClosed);
if (ciFace && ciFace.leftEyeClosed != NULL && ciFace.rightEyeClosed != NULL) {
if (eye == 1) { // right eye closed
return ciFace.leftEyeClosed && !ciFace.rightEyeClosed;
} else {
return ciFace.rightEyeClosed && !ciFace.leftEyeClosed;
}
}
}
Однако, этоникогда не проходит мимо первого, если это делает проверку на ноль, и мой вывод всегда Left: (null) - Right (null)
Я использую одно и то же изображение для VNFaceObservations, и это прекрасно работает.Я попытался повернуть изображение во всех возможных направлениях, и на каждом повернутом изображении я попытался использовать поле CIDetectorImageOrientation
, чтобы получить все значения от 1 до 8
После тестирования на сотнях изображений, нескольких лицах икаждая возможная комбинация поворотов и ориентации - я по-прежнему получаю нулевое значение для обеих функций.
Что-то мне не хватает?