使用前置摄像头拍摄时未检测到脸部
问题描述:
我在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
答
玄胡在评论中是正确的。原来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
}
如何将图像上传到脸API?服务根据exif信息确定旋转。所以我怀疑你使用的应用程序没有正确地上传这些信息。 –
你可能是对的 - 我已经更新了这个问题。 – mikker
我不是一个ios开发专家。但似乎UIImageJPEGRepresentation是一个已经失去exif信息的重新编码的图像。上传原始文件流而不是图像原始数据(仅包含像素信息)会更好。 –