2017-08-15 2 views
2

J'utilise l'API Azure Face Recognition dans une application iPhone. Cela fonctionne très bien lorsque je prends des photos avec la caméra arrière, mais lorsque j'utilise la caméra frontale, l'API ne parvient pas à détecter les visages.Les visages ne sont pas détectés lorsque vous photographiez avec la caméra frontale

J'ai essayé de transférer la photo (orientée vers l'avant) sur mon ordinateur portable et l'ai traînée dans la zone de test dans la documentation et le visage a été détecté correctement. Cela m'amène à croire qu'il y a peut-être des drapeaux de métadonnées spécifiques aux photos orientées vers l'avant qui confondent l'API? Et que ceux-ci sont dépouillés lorsqu'ils sont téléchargés via un navigateur?

MISE À JOUR

Voilà comment je télécharger le fichier en utilisant 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) 

Merci! Mikkel

+0

Comment est l'image téléchargée à Face API? Le service détermine la rotation en fonction de l'information exif. Donc, je soupçonne que l'application que vous utilisez ne télécharge pas ces informations correctement. –

+0

Vous avez peut-être raison - j'ai mis à jour la question. – mikker

+0

Je ne suis pas un expert en développement ios. Mais il semble que UIImageJPEGRepresentation soit une image recodée qui a déjà perdu des informations exif. Il serait préférable de télécharger le flux du fichier d'origine à la place des données brutes d'image (qui ne contiennent que des informations sur les pixels). –

Répondre

0

Xuan Hu avait raison dans les commentaires. Il s'avère que l'iPhone ne tourne pas les images - il définit simplement une orientation EXIF-tag.

dur tourner la photo avant de le télécharger a fait tout le travail:

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 
}