Tesseract OCR
Tesseract OCR
Tesseract OCR은 오픈소스 광학 문자 인식(OCR) 엔진이에요. HP 연구소에서 시작해 Google이 발전시킨 뒤 현재는 커뮤니티가 유지보수하고 있어요. 100개 이상의 언어를 지원하고 유니코드(UTF-8)를 처리하며, tesseract 명령줄 도구와 libtesseract C/C++ 라이브러리로 구성돼 있어요. Python에서는 pytesseract 래퍼를 이용해 이미지에서 글자를 쉽게 추출할 수 있어요.
출처: 문서
본문
Tesseract 4부터는 LSTM 기반 신경망 OCR 엔진이 기본으로 추가됐어요. 이 엔진은 라인 단위(줄 단위) 인식에 특화되어 있고, Tesseract 3의 레거시 엔진도 함께 지원해요. 레거시 엔진은 문자 패턴을 인식하는 방식으로 동작하며, --oem 0 옵션을 쓰면 Tesseract 3과의 호환 모드로 사용할 수 있어요. 레거시 엔진을 쓰려면 tessdata 저장소의 traineddata 파일이 필요해요.
Tesseract는 다음 특징을 갖고 있어요.
- 언어 지원: 기본 설정만으로 100개 이상의 언어를 인식해요.
- 이미지 형식: PNG, JPEG, TIFF 등 다양한 이미지 형식을 지원해요.
- 출력 형식: 일반 텍스트, hOCR(HTML), PDF, 텍스트 없는 PDF, TSV, ALTO, PAGE를 지원해요.
- GUI 없음: 이 프로젝트에는 GUI 애플리케이션이 포함되어 있지 않아요. GUI가 필요하다면 3rdParty 문서를 참고하세요.
- 학습 가능: Tesseract Training 문서를 보면 다른 언어를 학습시킬 수도 있어요.
OCR 결과 품질을 높이려면 Tesseract에 넘기는 이미지 자체를 개선하는 게 중요해요. ImproveQuality 문서를 참고해서 해상도, 대비, 기울기 등을 정리하면 인식률이 좋아져요.
설치 (Installation)
미리 빌드된 바이너리 패키지로 설치하거나 소스에서 직접 빌드할 수 있어요. 자세한 설치 방법은 Installation 문서를 참고하세요. 소스에서 빌드하기 전에는 시스템에 지원되는 컴파일러가 있는지 확인해야 해요.
공식 문서에는 명령줄 사용법이 이렇게 나와 있어요.
tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]
옵션에 대한 더 자세한 정보는 tesseract --help나 man tesseract로 확인할 수 있어요.
Python에서 사용할 때는 pytesseract 패키지로 쉽게 쓸 수 있어요. 먼저 시스템에 tesseract 바이너리를 설치하고, Python 패키지를 설치해요.
pip install pytesseract
설치 후 이미지에서 텍스트를 추출하는 기본 사용 예시는 다음과 같아요.
import pytesseract
from PIL import Image
# 이미지 열기
img = Image.open('sample.png')
# 텍스트 추출 (영어 기본)
text = pytesseract.image_to_string(img, lang='eng')
print(text)
# 한국어 인식 (kor traineddata 필요)
text_ko = pytesseract.image_to_string(img, lang='kor')
print(text_ko)
이렇게 이미지를 열어 image_to_string에 넘기면 LSTM 엔진이 글자를 인식해서 문자열로 돌려줘요. lang을 지정하면 인식 언어를 바꿀 수 있고, 한국어를 쓰려면 별도의 kor.traineddata 파일이 설치되어 있어야 해요.
개발자용 (For developers)
개발자는 libtesseract의 C API나 C++ API를 이용해 자신만의 애플리케이션을 만들 수 있어요. 다른 언어 바인딩이 필요하면 wrapper 문서를 참고하세요.
라이선스와 의존성
이 저장소의 코드는 Apache License 2.0으로 배포돼요. 단, Tesseract는 이미지 여는 데 쓸 Leptonica 라이브러리에 의존하는데, Leptonica는 BSD 2-clause 라이선스를 사용하니 함께 참고해야 해요.