Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何修复”;“无效图像大小”&引用;“讯息”:&引用;图像大小太小。”;_Java_Spring_Azure Cognitive Services_Face Api - Fatal编程技术网

Java “如何修复”;“无效图像大小”&引用;“讯息”:&引用;图像大小太小。”;

Java “如何修复”;“无效图像大小”&引用;“讯息”:&引用;图像大小太小。”;,java,spring,azure-cognitive-services,face-api,Java,Spring,Azure Cognitive Services,Face Api,[在此输入图像描述][1]我一直在尝试使用azure认知“人脸检测”服务。在将图像作为url传递时,我能够从服务获得肯定的响应,但在以字节为单位转换图像后传递时,服务确实会抛出错误: { “代码”:“无效图像大小”, “消息”:“图像大小太小。” } 我确实确保(在调试模式下)转换后的字节大小为1194Kb,这远远低于限制(1Kb到6Mb)。虽然我不确定我做错了什么:| 我尝试过用多种方式将图像转换成字节,但都没有成功 我的最终目标是:不从本地读取图像,我需要接受图像的base64表示并调用此人

[在此输入图像描述][1]我一直在尝试使用azure认知“人脸检测”服务。在将图像作为url传递时,我能够从服务获得肯定的响应,但在以字节为单位转换图像后传递时,服务确实会抛出错误: { “代码”:“无效图像大小”, “消息”:“图像大小太小。” } 我确实确保(在调试模式下)转换后的字节大小为1194Kb,这远远低于限制(1Kb到6Mb)。虽然我不确定我做错了什么:|

我尝试过用多种方式将图像转换成字节,但都没有成功

我的最终目标是:不从本地读取图像,我需要接受图像的base64表示并调用此人脸检测服务

任何帮助都将不胜感激,谢谢

String photo=“C:\\dev\\check.jpeg”;
试一试{
byte[]readAllBytes=Files.readAllBytes(path.get(photo));
ByteArrayEntity reqEntity=新的ByteArrayEntity(readAllBytes,ContentType.APPLICATION\u OCTET\u STREAM);
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION\u OCTET\u STREAM);
headers.set(“Ocp Apim订阅密钥”,“XXXXXXXXXX”);
Map params=新的HashMap();
参数put(“returnFaceId”、“true”);
参数put(“识别模型”、“识别02”);
参数put(“检测模型”、“检测_02”);
ResponseEntity exchange=restTemplateFaceApiService.exchange(getUri(DETECT_FACE.getMapping()),HttpMethod.POST,新的HttpEntity(reqEntity,headers),新的ParameterizedTypeReference(){},参数);
if(响应目标面(交换)){
返回exchange.getBody();
}
日志错误(“某些错误”);
抛出someExpection()
}
错误:
{
“代码”:“无效图像大小”,
“消息”:“图像大小太小。”
}
[1]: https://i.stack.imgur.com/JJH8U.jpg

为了简化测试,我只是将响应读取为字符串。我下载你的图片并在我的代码中使用它

我通过以下代码获得了成功:

    public static void TestRestTemplateExchange() {
        RestTemplate rt = new RestTemplate();

        String photo = "C:\\Users\\v-linjji\\Pictures\\test.jpg";
        byte[] readAllBytes = null;
        try {
            readAllBytes = Files.readAllBytes(Paths.get(photo));
        } catch (IOException e) {
            e.printStackTrace();
        }

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.set("Ocp-Apim-Subscription-Key","1fb1*********eb8b");

        Map<String, String> params = new HashMap<>();
        params.put("returnFaceId", "true");
        params.put("recognitionModel", "recognition_02");
        params.put("detectionModel", "detection_02");

        String url = "https://southeastasia.api.cognitive.microsoft.com/face/v1.0/detect";
        ResponseEntity<String> responseEntity = null;
        String responseBody = null;
        try {
            responseEntity = rt.exchange(url,HttpMethod.POST, new HttpEntity<>(readAllBytes, headers), String.class,params);
            responseBody = responseEntity.getBody();
            System.out.println(responseBody);
        }catch (HttpClientErrorException e){
            System.out.println(e.getResponseBodyAsString());
        }
    }

这是春天吗?如果是这样的话,将其包括在内将是有益的declaration@cthrash:是的,是春天。标签添加。谢谢我指的是实现
exchange
的代码位。我不是Spring专家,但我怀疑您会得到一个分块传输,而该服务不支持。您应该能够通过添加
内容长度
标题IIUC来禁用分块。看一看感谢@cthrah的评论,我之前确实尝试过关闭分块,但得到了相同的回应。甚至在请求头中传递了内容大小,但是:(我直接使用字节数组而不是apache中的ByteArrayEntity,并获得了成功。检查我的答案,看看是否有帮助。谢谢。
[{"faceId":"75c3c9dc-be49-4c16-a54c-a1710062967b","faceRectangle":{"top":570,"left":360,"width":444,"height":444}}]