안녕하세요, 현재 스프링에서 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도 되지 않기 때문에 로직이 아닌 환경 같은 어떠한 문제가 있는 것 같다고 추측해봅니다.)