구글 클라우드 비전 OCR API 스프링 부트에서 사용Back-End/Spring2024. 3. 22. 00:37
Table of Contents
구글 클라우드 비전 플랫폼 설정
API 및 서비스
구글 클라우드 의 콘솔 창으로 들어가면 왼쪽 상단의 버튼을 눌러 API 및 서비스 - 사용자 인증 정보로 들어간다.
사용자 인증 정보 창에서 사용자 인증 정보 만들기 버튼을 누른다.
API 키 를 추가한다.
API 활성화
이후 API 및 서비스 - 사용 설정된 API 및 서비스 버튼을 클릭한다.
Clould Vision API 를 사용 버튼을 누른다.
IAM 및 관리자
IAM 및 관리자 - 서비스 계정 버튼 클릭
아래의 정보들을 입력한다.
아래의 부분은 선택사항이다. 실험 결과 이 부분을 일부 누락해도 OCR API를 사용하는데 지장이 없었다.
만든 계정의 키 관리 버튼을 누른다.
새 키 만들기를 누른 뒤, JSON 파일을 다운로드 받는다.
스프링 부트 설정
환경변수 추가
스프링 부트 프로젝트에서 Edit - Configurations... 버튼을 누른다.
Modify Options 를 누르고 Environment variables 를 눌러 환경 변수를 추가해준다.
환경변수에 아래와 같이 입력한다.
핵심은 다운로드 받은 JSON 파일의 경로를 입력하는 것이다.
GOOGLE_APPLICATION_CREDENTIALS=JSON 파일의 경로(상대 경로도 가능) |
스프링 부트 의존성 추가
build.gradle
dependencies {
// Google Cloud Vision API 클라이언트 라이브러리
implementation 'com.google.cloud:google-cloud-vision:3.34.0'
...
}
컨트롤러와 서비스 코드
서비스 코드
import com.google.cloud.vision.v1.AnnotateImageRequest;
import com.google.cloud.vision.v1.AnnotateImageResponse;
import com.google.cloud.vision.v1.BatchAnnotateImagesResponse;
import com.google.cloud.vision.v1.Feature;
import com.google.cloud.vision.v1.Image;
import com.google.cloud.vision.v1.ImageAnnotatorClient;
import com.google.protobuf.ByteString;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@Service
public class VisionService {
public String extractTextFromImageUrl(String imageUrl) throws Exception {
URL url = new URL(imageUrl);
ByteString imgBytes;
try (InputStream in = url.openStream()) {
imgBytes = ByteString.readFrom(in);
}
Image img = Image.newBuilder().setContent(imgBytes).build();
Feature feat = Feature.newBuilder().setType(Feature.Type.TEXT_DETECTION).build();
AnnotateImageRequest request = AnnotateImageRequest.newBuilder()
.addFeatures(feat)
.setImage(img)
.build();
List<AnnotateImageRequest> requests = new ArrayList<>();
requests.add(request);
try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
StringBuilder stringBuilder = new StringBuilder();
for (AnnotateImageResponse res : response.getResponsesList()) {
if (res.hasError()) {
System.out.printf("Error: %s\n", res.getError().getMessage());
return "Error detected";
}
stringBuilder.append(res.getFullTextAnnotation().getText());
}
return stringBuilder.toString();
}
}
}
컨트롤러 코드
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OCRController {
@Autowired
private VisionService visionService;
@GetMapping("/extract-text")
public String extractText(@RequestParam("imageUrl") String imageUrl) {
try {
return visionService.extractTextFromImageUrl(imageUrl);
} catch (Exception e) {
//e.printStackTrace();
return "Failed to extract text: " + e.getMessage();
}
}
}
포스트맨으로 테스트
위에서 작성된 코드는 포스트맨으로 아래와 같이 GET 요청으로 테스트를 할 수 있다.
http://localhost:8080/extract-text?imageUrl=웹상의 이미지 URL 경로 |
위 사진의 원본 경로는 https://gaussian37.github.io/assets/img/vision/etc/gcp/gcp.PNG 이다.
따라서 포스트맨으로 아래와 같이 입력한다.
그러면 응답으로 아래와 같은 결과가 반환된다.
'Back-End > Spring' 카테고리의 다른 글
[Spring MVC] 스프링 타입 컨버터 (1) | 2024.03.24 |
---|---|
[Spring MVC] API 예외 처리 (1) | 2024.03.23 |
[Spring MVC] 예외 처리와 오류페이지 (0) | 2024.03.21 |
[Spring MVC] ArgumentResolver 를 이용한 @Login 어노테이션 구현 (0) | 2024.03.20 |
[Spring MVC] HTTP MessageConverter, RequestMapping HandlerAdapter (0) | 2024.03.19 |