OCR bad request 질문드립니다

안녕하세요, 현재 스프링에서 ocr api 사용하려고 하는 초보 개발자입니다.
자바로 작성중인데 자꾸 ‘code: -911, msg: Invalid Image’ 메세지를 받아 못하고 있습니다 ㅠㅠ
작성중인 코드 입니다.

    public ResponseEntity<String> ocrWithRestTemplate() throws IOException {

        String api_key = "00";
        File image = new File("경로/label.jpg");
        String url = "https://dapi.kakao.com/v2/vision/text/ocr";

        MultiValueMap<String, byte[]> form = new LinkedMultiValueMap<>();
        form.add("image", convertImageToBinary(image));

        HttpHeaders headers = new HttpHeaders();
        headers.add("Host", "dapi.kakao.com");
        headers.add("Authorization", "KakaoAK " + api_key);
        headers.add("Content-Type", "multipart/form-data");

        HttpEntity<MultiValueMap<String, byte[]>> requestEntity = new HttpEntity<>(form, headers);
        RestTemplate restTemplate = new RestTemplate();

        String response = restTemplate.postForEntity(url, requestEntity, OcrResponse.class).getBody().toString();
    }

    private byte[] convertImageToBinary(File file) throws IOException {
        BufferedImage image = ImageIO.read(file);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", baos);
//        String encodedImage = java.util.Base64.getEncoder().encodeToString(baos.toByteArray());
        byte[] encodedImage = Base64.encodeBase64(baos.toByteArray());

        return encodedImage;
    }

byte[] 형식으로 보내는 것이 문제인 것 같아 이를 String, MultipartFile, File 형식들로 바꿔 보냈는데도 같은 에러내용입니다.

그런데 프로젝트 위치에서 curl로 실행했을 때도 똑같은 'invalid image’가 돌아오고 있습니다.

curl -v -X POST "https://dapi.kakao.com/v2/vision/text/ocr" \
    -H "Content-Type: multipart/form-data" \
    -H "Authorization: KakaoAK 00" \
    -F "image=./resources/static/photo/label.jpg"

혹시 원인이 무엇인지 알 수 있을까요?
(Kakao Account 에서 같은 사진으로 테스트 했을 때는 정상적으로 결과가 나와 사진 문제는 아닌 것 같습니다.
또 curl도 되지 않기 때문에 로직이 아닌 환경 같은 어떠한 문제가 있는 것 같다고 추측해봅니다.)

curl로 요청시 -F “image=@./resources/static/photo/label.jpg” 와 같이 골뱅이 입력해서 보내시면 될거에요.

감사합니다. 골뱅이 붙여서 테스트 되는거 확인했습니다.
이제 자바 로직만 해결하면 되는데 안되네요ㅠㅠㅠ

document가 불친절해서 저도 이것저것 해봐서 해결했네요 ㅠ

저는 python으로 구현했고, 요청시 header는 Authorization만 넣고, files 값으로 바이너리 jpeg파일 불러와 요청하니깐 제대로 동작했습니다.

도움되시길 바랄게요

1개의 좋아요

감사합니다~!