我正在尝试使用Microsoft Face API。 为此,我将以下代码作为示例提供给Microsoft(在本页末尾https://dev.projectoxford.ai/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236 ):
HttpClient httpclient = HttpClients.createDefault(); try { URIBuilder builder = new URIBuilder("https://api.projectoxford.ai/face/v1.0/detect"); builder.setParameter("returnFaceId", "false"); builder.setParameter("returnFaceLandmarks", "false"); builder.setParameter("returnFaceAttributes", "age,gender"); URI uri = builder.build(); HttpPost request = new HttpPost(uri); request.setHeader("Content-Type", "application/octet-stream"); request.setHeader("Ocp-Apim-Subscription-Key", "..."); String body = Base64.encodeBase64String(img); StringEntity reqEntity = new StringEntity(body); request.setEntity(reqEntity); HttpResponse response = httpclient.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) { System.out.println(EntityUtils.toString(entity)); return JsonParser.parse(EntityUtils.toString(entity)); } } catch (URISyntaxException | IOException | ParseException e) { System.out.println(e.getMessage()); } return null;但是我收到以下错误:
{"error":{"code":"InvalidImage","message":"Decoding error, image format unsupported."}}我用于测试的图像是这样的: http : //www.huntresearchgroup.org.uk/images/group/group_photo_2010.jpg (通过快速搜索在互联网上找到它)
它尊重微软设定的所有要求,尺寸和格式......如果我在网站上使用它,它可以运行https://www.projectoxford.ai/demo/face#detection
从我的字节数组转换为base64中的字符串的String body也可以,我在这个网站上测试它: http : //codebeautify.org/base64-to-image-converter
错误信息很简单,但我看不到我在哪里。 任何人都可能知道这个问题是什么?
UPDATE
变量img :
img = Files.readAllBytes(Paths.get(imgPath));I'm trying to use Microsoft Face API. For that I have the following code that was given by Microsoft as a sample (at the end of this page https://dev.projectoxford.ai/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236):
HttpClient httpclient = HttpClients.createDefault(); try { URIBuilder builder = new URIBuilder("https://api.projectoxford.ai/face/v1.0/detect"); builder.setParameter("returnFaceId", "false"); builder.setParameter("returnFaceLandmarks", "false"); builder.setParameter("returnFaceAttributes", "age,gender"); URI uri = builder.build(); HttpPost request = new HttpPost(uri); request.setHeader("Content-Type", "application/octet-stream"); request.setHeader("Ocp-Apim-Subscription-Key", "..."); String body = Base64.encodeBase64String(img); StringEntity reqEntity = new StringEntity(body); request.setEntity(reqEntity); HttpResponse response = httpclient.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) { System.out.println(EntityUtils.toString(entity)); return JsonParser.parse(EntityUtils.toString(entity)); } } catch (URISyntaxException | IOException | ParseException e) { System.out.println(e.getMessage()); } return null;but I get the following error:
{"error":{"code":"InvalidImage","message":"Decoding error, image format unsupported."}}The image that I am using for tests is this one: http://www.huntresearchgroup.org.uk/images/group/group_photo_2010.jpg (found it on the internet in a quick search)
It respect all the requisits set by Microsoft, size and format... If I use it in the site it works https://www.projectoxford.ai/demo/face#detection
The String body from the convertion of my array of bytes to a string in base64 is also ok, I test it in this website: http://codebeautify.org/base64-to-image-converter
The error message it's quite simple, but I fail to see where I am worng. Anyone might know whats the problem?
UPDATE
The variable img:
img = Files.readAllBytes(Paths.get(imgPath));最满意答案
我设法发现了问题......而不是:
String body = Base64.encodeBase64String(img); StringEntity reqEntity = new StringEntity(body); request.setEntity(reqEntity);我需要这样做:
ByteArrayEntity reqEntity = new ByteArrayEntity(img, ContentType.APPLICATION_OCTET_STREAM); request.setEntity(reqEntity);我认为文档已经过时了......
I managed to discover the problem... Instead of:
String body = Base64.encodeBase64String(img); StringEntity reqEntity = new StringEntity(body); request.setEntity(reqEntity);I needed to do:
ByteArrayEntity reqEntity = new ByteArrayEntity(img, ContentType.APPLICATION_OCTET_STREAM); request.setEntity(reqEntity);I think that the Documentation is outdated...
更多推荐
发布评论