2017-08-15 309 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 
} 
相關問題