2016-10-01 4 views
0

Я хочу использовать этот код для определения лиц в изображении через CIFaceDetector.Невозможно обнаружить лица в изображении из-за ориентации изображения

let Orientation: Int! 

    switch ((info[UIImagePickerControllerOriginalImage] as? UIImage)?.imageOrientation)! { 
    case UIImageOrientation.up: 
     Orientation = 1 
    case UIImageOrientation.down: 
     Orientation = 3 
    case UIImageOrientation.left: 
     Orientation = 8 
    case UIImageOrientation.right: 
     Orientation = 6 
    case UIImageOrientation.upMirrored: 
     Orientation = 2 
    case UIImageOrientation.downMirrored: 
     Orientation = 4 
    case UIImageOrientation.leftMirrored: 
     Orientation = 5 
    case UIImageOrientation.rightMirrored: 
     Orientation = 7 
    } 

    let options = [CIDetectorAccuracy: CIDetectorAccuracyHigh, CIDetectorImageOrientation: Orientation] as [String : Any] 
    let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: options) 
    let faces = faceDetector?.features(in: personciImage) 

Однако это работает только в ландшафтном праве. Я понятия не имею, почему это не работает во всех других направлениях. Я имею в виду, что ориентация должна быть установлена ​​правильно. Я также бросаю UIImage в CIImage.

guard let personciImage = CIImage(image: (info[UIImagePickerControllerOriginalImage] as? UIImage)!) else { 
     return 
    } 

Есть ли проблема?

ответ

0

От CIDetector Конфигурация docs here похоже, что ключ ориентации на самом деле не является вариантом для этого класса. Вероятно, класс распознавания лиц на самом деле предпочитает ВАМ вращать изображение перед его передачей.

Вращение изображения довольно простое, и его можно также искать на SO, я нашел быстрый пример, но Я уверен, что их больше! quick rotation search example