Лица, не обнаруженные при съемке фронтальной камерой


Я использую API распознавания лиц Azure в приложении для iPhone. Он отлично работает, когда я делаю снимки задней камерой, но когда я использую фронтальную, API не может обнаружить лица.

Я попытался перенести (фронтальную) фотографию на свой ноутбук и перетащил ее в тестовую область в документации, и там лицо было обнаружено просто отлично.

Это приводит меня к мысли, что, возможно, есть некоторые метаданные или флаги, характерные для фронтальных фотографий, которые путают API-интерфейс? И что те лишаются при загрузке через браузер?

Обновить

Вот как я загружаю файл с помощью AlamoFire:

let data = UIImageJPEGRepresentation(photo, 0.5)
let url = "https://.../detect"
let octetHeaders = ["Content-Type": "application/octet-stream", "Ocp-Apim-Subscription-Key": "..."]
Alamofire.upload(data, to: url, method: .post, headers: octetHeaders)

Спасибо!

1 3

1 ответ:

Сюань Ху был прав в своих комментариях. Оказывается, iPhone не вращает изображения – он просто устанавливает ориентацию EXIF-тега.

Жесткий поворот фотографии перед загрузкой заставил все это работать:

func normalizeImageRotation(_ image: UIImage) -> UIImage {
    if (image.imageOrientation == UIImageOrientation.up) { return image }

    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
    image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
    let normalizedImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return normalizedImage
}