Невозможно обнаружить лица на изображении из-за ориентации изображения

Я хочу использовать этот код для обнаружения лиц на изображении с помощью 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
    }

Проблема в этом?


person Lenny1357    schedule 01.10.2016    source источник


Ответы (1)


Из документов конфигурации CIDetector здесь кажется, что ключ ориентации на самом деле не вариант для этого класса. Вполне вероятно, что класс обнаружения лиц на самом деле предпочитает, чтобы ВЫ повернули изображение перед его передачей.

Поворот изображения довольно прост, и его также можно найти на SO, я нашел быстрый пример, но я уверен, что есть и другие! пример поиска с быстрым поворотом

person BHendricks    schedule 02.10.2016