1. OCR과 Tesseract란
OCR(Optical Character Recognition, 광학 문자 인식)은 이미지나 문서에서 텍스트를 인식하고 추출하는 기술입니다. 이 기술은 스캔한 문서, 사진, 손글씨, 인쇄된 텍스트 등에서 문자를 인식하여 디지털 텍스트로 변환하는 데 사용됩니다.
Tesseract는 오픈소스 광학 문자 인식(OCR) 엔진으로, 이미지에서 텍스트를 추출하는 데 사용됩니다. 원래 HP(Hewlett-Packard)에서 개발되었으며, 현재는 Google이 유지 관리하고 있습니다. Tesseract는 다양한 언어와 문자 체계를 지원하며, 여러 플랫폼에서 사용할 수 있습니다.
https://github.com/tesseract-ocr/tesseract
2. Tesseract 설정
2-1. 자바용으로 나온 tess4j를 찾아 디펜던시에 추가 혹은 설치해주자.
dependencies {
implementation 'net.sourceforge.tess4j:tess4j:5.13.0'
}
https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j
2-2. 기본 언어는 영어로 되어 있으니 필요한 언어는 추가로 다운 받자.
https://github.com/tesseract-ocr/tessdata/tree/main
2-3. 다운 받은 언어는 tesseract가 설치된 폴더에 넣어둔다.
C:\Program Files\Tesseract-OCR\tessdata
2-4. 환경변수 path도 위와 같은 경로로 설정.
시스템 변수 - 환경 변수 - path - C:\Program Files\Tesseract-OCR\tessdata
cmd>>tesseract 를 입력해 아래의 화면이 나온다면 성공
3. Tesseract 실행
tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]
-l
eng (Default)
필요한 언어 추가 설치
--oem
0: 지원X
1: 지원
--psm
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,bypassing hacks that are Tesseract-specific.
코드
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import java.io.File;
@Slf4j
public class OCRManager {
public static void main(String[] args) {
String path = "C:\\summaryBot\\20240922\\20240922_190038.png";
// Tesseract 인스턴스 생성
Tesseract tesseract = new Tesseract();
// Tesseract 데이터 경로 설정
tesseract.setDatapath("C:/Program Files/Tesseract-OCR/tessdata/");
// 언어 설정
tesseract.setLanguage("kor+eng");
try {
File imgFile = new File(path);
if (!imgFile.exists()) {
log.error("해당 이미지가 존재하지 않습니다.");
}
String result = tesseract.doOCR(imgFile);
System.out.println(result);
} catch (TesseractException e) {
System.out.println(e.getMessage());
}
}
}
- Tesseract 인스턴트를 생성
- setDataPath(): 학습 언어가 있는 경로 설정
- setLanguage(): 해석할 언어 지정, '+' 로 여러 언어 지정 가능하다.
4. Tesseract의 인식률
인식률을 개선하기 위해선 다양한 방법이 필요로한다.
4-1. LSTM 모델
테스트 이미지
실행 결과
- 생각보다 인식률이 매우 안좋다.
- Tesseract 4부터 LSTM 모델을 지원하여 인식률이 올라갔다고 한다.
- 기본 데이터는 해당 기능을 사용할 수 없으므로 아래의 사이트에서 언어를 다운받아 Tesseract 폴더에 다른 이름으로 저장하자.
- https://github.com/tesseract-ocr/tessdata_best
LSTM 모델 실행 결과
- 처음보다 나아진 모습이다. 하지만 여전히 완벽하지 않다.
4-2. 이미지 처리
인식률 개선을 위한 공식 문서에 따르면 다음과 같은 방법들이 있다.
- 재조정
- 이진화
- 노이즈 제거
- 팽창/침식
- 회전 / 비스듬히 조정
이러한 작업들을 도와주는 라이브러리가 바로 OpenCV다.
다음은 OpenCV에 대해 알아보자.
참고
https://stackoverflow.com/questions/27763855/how-to-access-multiple-traineddata-files-in-tess4j
'Backend > 프로젝트' 카테고리의 다른 글
갈아만든 임원 - 6 데이터 추출하기2 OpenCV 전처리 작업 (2) | 2024.09.25 |
---|---|
갈아만든 임원 - 5 데이터 추출하기2 OpenCV 설치 (1) | 2024.09.25 |
갈아만든 임원 - 3 화면 조작 및 스크린샷 저장하기 (0) | 2024.09.22 |
갈아만든 임원 - 2 앱플레이어로 게임 실행하기 (1) | 2024.09.18 |
갈아만든 임원 - 1 (0) | 2024.09.17 |