이~~전 포스트에서 요청을 보낼 때

이미지 URL을 base64 인코딩을 하였더니 OCR 처리 시간이 획기적으로 줄어들었습니다. google vision ocr 응답시간 개선 참고! 아무튼 이미지를 base64 인코딩하면 처리 속도가 빨라진다는 말!

왜 그럴까?

우선 google cloud vision 라이브러리를 살펴보았습니다. implementation 'com.google.cloud:google-cloud-vision:3.10.0' 를 이용하였고, 인텔리제이에서 라이브러리 내용을 볼 수 있기 때문에! (아니면 깃허브 레포를 봐도 무방함!) 살펴봅시다.

요청의 시작은

이 부분에서 시작됩니다. 따라서 batchAnnotateImages 를 살펴보자. 그럼 ImageAnnotatorClient 라는 객체로 들어간다.

batchAnnotateImages(request) 이 부분이 아무래도 응답 요청인 것 같다!

또 타고 들어가면 이런 UnaryCallable<RequestT, ResponseT> 라는 추상 클래스가 등장. 이걸 구현하는 부분을 찾아야 하는데

여기서 batchAnnotateImagesCallable() 함수를 살펴보자

방금 봤던 UnaryCallable이 여기서 나온 것! batchAnnotateImagesCallable() 이라는 함수가 위에서 봤던 추상 클래스를 반환한다. 그럼 우선 저 메서드를 봐볼까.

또다시 ImageAnnotatorStub 이라는 추상 클래스로 이어진다. 이걸 알아보기 위해서 해당 클래스가 등장하는 위치를 검색해보니

여기서 v1 폴더 내에서 검색하면 된다. (v1 버전을 사용하기 때문. 베타 버전은 사용하지 않았다) 그래서 볼 것은 ImageAnnotatorStubSettingsHttpJsonImageAnnotatorStub 이 두개 뿐!

보아하니 후자를 먼저보는 것이 맞을 것 같다. 그래서 밑에 파일을 먼저 보자면

찾았다! 결국 여기서 HTTP 요청을 보내던 것! Java에서 보낼 방법은 역시 저 방법 뿐이었다. 요청 변환 부분을 찾았으니, 이 메서드들을 살펴볼 시간

HttpJsonImageAnnotatorStub 객체

내가 사용한 메서드는 batchAnnotateImages 이므로

이 부분을 살펴봐야할 것 같다. 비동기 요청을 보낸 것이 아니라서 아래에 있는 async 메서드는 살펴보지 않았다.

살펴보면 결국 HTTP 요청을 보내는게 핵심인 듯 하다. 메서드들은 경로 설정, 파라미터 설정일 뿐인 것이다.

결론은

똑같은 HTTP 요청을 보내는 것인데, 구글 문서를 보면 Base64 인코딩된 사진을 보내는 것과 사진 URL을 보내는 것이 있다. 결국은 이미지 변환 처리를 내가 해서 보내느냐, 구글 서버에서 하느냐의 차이인 듯 하다. 아마 구글 서버에서 하면 스케쥴, 인코딩 그리고 아마 데이터 수집을 위한 추가 작업들이 들어가면서 더 많은 시간이 소요되는 것 같다.

profile
차근차근 천천히

0개의 댓글

Powered by GraphCDN, the GraphQL CDN