이미지를 텍스트로 변환하는 OCR API와 그 결과를 한국어로 번역하는 번역 API를 순서대로 사용하는 Spring Boot 프로젝트를 만들어보겠습니다. 여기에서는 Tesseract OCR와 Google Cloud Translation API를 사용하는 예제를 제시하겠습니다.
Spring Initializr를 이용하여 새로운 Spring Boot 프로젝트를 생성합니다. **spring-boot-starter-web
**과 google-cloud-translate
의존성을 추가합니다.
package com.wevel.wevel_server.controller;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@RestController
@RequestMapping("/api/ocr")
public class OcrController {
@PostMapping("/convert")
public String convertImageToText(@RequestParam("file") MultipartFile file) {
try {
// 저장할 임시 파일 생성
Path tempFile = Files.createTempFile("temp-", ".png");
// 업로드된 이미지를 임시 파일로 복사
Files.copy(file.getInputStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
// Tesseract OCR 설정
ITesseract tesseract = new Tesseract();
tesseract.setDatapath("C://Tess4J/tessdata"); // tessdata 디렉터리의 경로 설정
tesseract.setLanguage("eng"); // 언어 설정
tesseract.setTessVariable("user_defined_dpi", "300"); // 예: 300 DPI로 설정
// 이미지에서 텍스트 추출
String result = tesseract.doOCR(tempFile.toFile());
// 임시 파일 삭제
Files.delete(tempFile);
return result;
} catch (IOException | TesseractException e) {
e.printStackTrace();
return "Error during OCR processing: " + e.getMessage();
}
}
}
implementation 'net.sourceforge.tess4j:tess4j:4.5.2' // 최신 버전 확인
javaCopy code
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class TranslationService {
@Value("${google.translate.api.key}")
private String apiKey;
public String translateText(String text, String targetLanguage) {
Translate translate = TranslateOptions.newBuilder().setApiKey(apiKey).build().getService();
Translation translation = translate.translate(text, Translate.TranslateOption.targetLanguage(targetLanguage));
return translation.getTranslatedText();
}
}
javaCopy code
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/api/translation")
public class TranslationController {
@Autowired
private OCRService ocrService;
@Autowired
private TranslationService translationService;
@PostMapping("/process-image")
public String processImage(@RequestParam("image") MultipartFile image) throws IOException {
// 이미지를 파일로 저장
File imageFile = File.createTempFile("temp", ".png");
image.transferTo(imageFile);
// 이미지에서 텍스트 추출
String extractedText = ocrService.extractTextFromImage(imageFile);
// 추출된 텍스트를 한국어로 번역
String translatedText = translationService.translateText(extractedText, "ko");
// 결과 반환
return translatedText;
}
}
propertiesCopy code
google.translate.api.key=YOUR_TRANSLATE_API_KEY
위의 코드는 간단한 예제일 뿐이며, 실제 프로젝트에서는 보안, 예외 처리, 사용자 경험 등에 대한 고려가 필요합니다. 또한, OCR 결과가 정확하지 않을 수 있으므로 실제 상황에서는 이를 고려하여 개발해야 합니다.