2017-08-15 305 views
2

我在iPhone应用程序中使用Azure人脸识别API。当我使用后置摄像头拍摄照片时,它工作得很好,但是当我使用前置摄像头时,API无法检测到脸部。使用前置摄像头拍摄时未检测到脸部

我试过将(正面)照片转移到我的笔记本电脑上,并将它拖入文档中的测试区域,那里的面部检测得很好。

这使我相信,可能有一些特定于前置照片的元数据标志混淆了API?那些通过浏览器上传时被剥离?

UPDATE

这里是我如何上传使用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) 

谢谢! Mikkel

+0

如何将图像上传到脸API?服务根据exif信息确定旋转。所以我怀疑你使用的应用程序没有正确地上传这些信息。 –

+0

你可能是对的 - 我已经更新了这个问题。 – mikker

+0

我不是一个ios开发专家。但似乎UIImageJPEGRepresentation是一个已经失去exif信息的重新编码的图像。上传原始文件流而不是图像原始数据(仅包含像素信息)会更好。 –

回答

0

玄胡在评论中是正确的。原来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 
} 
相关问题