IT

테서랙트(Tesseract): 파이썬에서 이미지의 광학 문자 인식(OCR)하기

유병혁 2018. 7. 29. 21:18

안녕하세요? 이번 글에서는 이미지에 들어 있는 문자를 읽어 텍스트로 변환해주는

광학 문자 인식(Optical Character Recognition; OCR)을 파이썬에서 적용해 보도록 하겠습니다.


실습에 사용할 이미지는 아래와 같습니다. 소백산국립공원 생태통로에 설치된 카메라트랩 이미지인데요,

이미지 하단에 캡처된 시기의 날짜, 시간 등의 문자가 포함되어 있습니다. 이것을 읽어보도록 하겠습니다.


먼저, 해당 이미지를 OpenCV와 Matplotlib을 통해 읽어와 그래프를 그려볼까요?!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
import cv2
from matplotlib import pyplot as plt
 
# 디렉터리 위치 변경
os.chdir("D:\PRPDATA")
 
# 이미지 열기
img = cv2.imread('roedeer.jpg')
 
# 이미지 보기
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.axis("off")
plt.show()
cs


이미지는 확인되었으니 이제 OCR을 적용해 보겠습니다. 여기서는 '테서랙트(Tesseract)'를 이용하겠습니다.

테서랙트는 오픈소스 OCR 엔진입니다. 2005년에 HP에 의해 오픈소스화 되었으며, 2006년 이후로 Google에 의해 개발되고 있습니다.
Tesseract OCR | 공식 깃허브: https://github.com/tesseract-ocr/tesseract


저는 윈도우와 리눅스를 함께 쓰고 있는데요, 테서랙트의 윈도우 버전은 'Tesseract at UB Mannheim'를 이용하시면 됩니다.

UB Manheim는 만하임 대학 도서관(Mannheim University Library)을 의미하는데요, 이곳은 독일 신문의 OCR을 수행하는데
리눅스 뿐만 아니라 윈도우 버전도 필요했기 때문에 Tesseract installer for Windows를 빌드했다고 합니다.

Tesseract at UB Mannheim | 공식 깃허브: https://github.com/UB-Mannheim/tesseract/wiki


내 컴퓨터 운영체제의 비트 수에 맞는 인스톨러를 설치합니다.

저는 윈도우 10 64비트 버전을 사용하고 있어 'tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe'을 다운로드 했습니다.


설치 방법은 간단합니다.


테서랙트 OCR 엔진은 한국어도 지원하는데요,


아래 체크에서 'Additional language data (download)'를 확장하고,


목록에서 'Korean'을 체크해주시면 됩니다.


테서랙트 OCR 엔진의 설치 위치는 기억해 둡니다.


이제 테서랙트 설치는 완료되었습니다. 저는 파이썬에서 테서랙트를 이용할 것이므로,

파이썬-테서랙트(Python-tesseract)를 추가 설치하도록 하겠습니다.

pytesseract | https://pypi.org/project/pytesseract/


명령 프롬프트에서 아래와 같이 파이테서랙트를 설치합니다.

1
pip install pytesseract
cs


파이테서랙트가 설치된 폴더의 pytesseract.py를 열어보겠습니다. 저는 현재 파이썬 3.7을 사용하고 있는데요, 패키지 설치 위치는

'C:\Users\bhyu\AppData\Local\Programs\Python\Python37\Lib\site-packages\pytesseract\pytesseract.py'입니다.

여기서 bhyu는 제 사용자 이름입니다. 해당 파일의 아래 부분을 확인하고,

1
2
# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'tesseract'
cs


tesseract_cmd를 앞서 설치한 테서랙트 실제 경로로 변경합니다.

이제 아래와 같이 pytesseract를 통해 이미지의 문자를 텍스트로 변환할 수 있습니다.

1
2
3
from pytesseract import image_to_string
string_with_dates = image_to_string(img)
print(string_with_dates)
cs


실행 결과는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
wt
 
Pg ae Be eee
Ses te a
 
 
 
[o
 
Pay eee eee 05/23/2018 11:56AM SOBUK 13 4
cs


사실 위 결과에서 제가 필요한 정보는 노루 이미지가 취득된 '05/23/2018 11:56AM'이라는 날짜 정보입니다.

이렇게 텍스트에서 날짜만을 추출하려면 어떻게 해야 할까요?! 여기서는 datefinder 패키지를 이용해 보겠습니다.

1
2
3
4
5
import datefinder
matches = datefinder.find_dates(string_with_dates)
 
for match in matches:
    print(match)
cs


이제 테스트에서 날짜 정보를 추출할 수 있습니다. 결과는 아래와 같습니다.

1
2018-05-23 11:56:00
cs