IT/IT WIKI

[README] Tesseract - OCR을 이용하여 문자 인식 학습 하기

wookiist 2017. 2. 23. 13:47

Tesseract-OCR을 이용한 문자 인식 학습

이번 포스팅은 Google의 Tesseract-OCR을 이용한 문자 인식 학습을 진행하는 방법을 제시합니다. 이 글은 README 파일로 작성되었으며, 무단으로 퍼가실 수 없습니다.

다음의 링크를 참고하였습니다.

Tesseract-OCR 학습 데이터 생성

1. 학습할 폰트의 문자들을 TIF 포맷의 이미지로 변환

Tesseract-OCR을 학습시키기 위해서는 TTF 또는 OTF의 폰트 형태가 아닌, TIF 또는 TIFF 포맷의 이미지 형식이어야 합니다.

따라서 학습시키기 위한 문장만을 캡쳐합니다.
이후, 포맷을 변환하기 위해, TIF/TTIF 변환 사이트 등을 이용하여 이미지의 포맷을 변환합니다.

변환된 파일의 이름은
<lang>.<font-name>.exp<num>.tif
형식을 반드시 지켜야합니다.
이 문서에서는 파일의 이름을 다음과 같이 가정합니다.
lang.fname.exp0.tif

여기서는 Ubuntu 16.04 LTS에서 이미지 포맷을 간단하게 변환하는 패키지를 이용합니다.
이를 위해 Command Line에서 다음과 같이 입력합니다.

$ sudo apt-get install imagemagick
...
# 설치가 완료되었다면 아래의 명령어를 수행합니다.
# 우리가 사용하는 이미지의 이름이 input.png이고
# 출력될 이미지의 이름이 lang.fname.exp0.tif라고 가정합니다.
...
$ convert input.png -resize 400% -type Grayscale lang.fname.exp0.tif

위의 명령어를 수행하였다면, 지정된 경로에 input.png 파일이 tif 포맷으로 변환되어 lang.fname.exp0.tif라는 이름으로 저장되어 있을 것입니다.

2. 학습 이미지 파일로부터 BOX 파일 생성

Tesseract-OCR 모듈이 문자를 정확하게 인식하기 위해서는 인식 단위를 정확히 지정해주어야 합니다.
이를 위해 BOX 파일을 생성합니다.

Command Line에서 다음과 같이 입력합니다.

$ tesseract lang.fname.exp0.tif lang.fname.exp0 batch nochop makebox

3. 생성된 BOX 파일을 이용하여 BOX 파일을 수정

Tesseract-OCR 모듈이 문자를 잘못 인식한 경우, 이를 수정해주려면 BOX 파일을 직접 수정해주어야 합니다. 따라서 Windows에서는 jTessBoxEditor 또는 CowBoxer 등의 유틸리티를 이용하여 BOX 파일을 올바르게 수정해줍니다.

4. 수정한 BOX 파일을 이용하여 Tesseract-OCR 엔진을 학습

Tesseract-OCR 모듈을 학습시키기 위해서는 training 파일과 text 파일이 필요합니다.
이를 위해 Command Line에서 다음과 같이 입력합니다.

$ tesseract lang.fname.exp0.tif lang.fname.exp0 nobatch box.train

5. unicharset 파일을 생성

Tesseract가 출력하는 가능한 모든 문자들의 집합을 생성하는 과정입니다.
Command Line에서 다음과 같이 입력합니다.

$ unicharset_extractor lang.fname.exp0.box

6. font_properties 파일을 생성

font_properties 파일을 생성합니다. 이 파일은 Tesseract가 해당 폰트를 인식하였을 때, 폰트의 스타일 정보를 포함합니다.

font_properties가 포함하는 폰트의 스타일 정보는 다음과 같습니다.

<fontname> <italic> <bold> <fixed> <serif> <fraktur>

<fontname>은 폰트의 이름으로, 띄어쓰기를 허용하지 않습니다.
나머지인 <italic>, <bold>, <fixed>, <serif> <fraktur>는 0과 1의 플래그만 가집니다.
만약 fontname에 해당하는 폰트가 bold한 성격을 가지고 있다면, bold의 자리에 들어갈 플래그는 1이 됩니다.
아니라면 0이 들어갑니다.

예를 들면 다음과 같습니다.

fname 1 0 0 1 0

font_properties 파일을 만들기 위해 Command Line에 다음과 같이 입력합니다.

<fontname> <italic> <bold> <fixed> <serif> <fraktur> > font_properties

위의 예를 이용하여 표현하면 다음과 같습니다.

$ fname 1 0 0 1 0 > font_properties

7. 클러스터링 수행

모든 학습 이미지 파일로부터 모든 문자의 윤곽 특징을 추출한 후 프로토타입을 생성하기 위해 클러스터링이 필요합니다. 이를 위해 두 가지 작업을 수행합니다.

mftraining

Mftraining을 수행하면, inttemp 파일(윤곽 특징의 프로토타입)과 pffmtable 파일(문자별 기대되는 특징의 개수 정보)이 생성됩니다.

Command Line에서 다음과 같이 입력합니다.

$ mftraining -F font_properties -U unicharset -O lang.unicharset lang.fname.exp0.tr

cntraining

cntraining을 수행하면 normproto 파일(문자별 normalization sensitivity prototype)이 생성됩니다.

Command Line에서 다음과 같이 입력합니다.

$ cntraining lang.fname.exp0.tr

8. 생성된 파일 이름을 변경

unicahrset, normproto, pffmtable, inttemp, shapetable 파일의 이름 앞에
lang. 을 붙입니다.

예를 들면 다음과 같습니다.
unicharset --> lang.unicharset
normproto --> lang.normproto
...

마찬가지로 나머지 파일의 이름들도 위와 같이 수정하면 됩니다.

9. 최종 학습 파일 생성

위의 과정을 모두 거쳤다면, 이제 최종 학습 파일을 생성할 단계입니다.

Command Line에서 다음과 같이 입력합니다.

아래의 명령어를 입력할 떄, 명령어 끝에 반드시 .을 입력해야합니다

$ combine_tessdata lang.

10. 최종 학습 파일을 트레이닝 폴더에 넣기

완성된 학습 파일을 tessdata 디렉토리에 추가합니다. 추가된 lang은 Tesseract가 앞으로 인식할 수 있습니다.

추가된 lang으로 문자를 인식하기 위해서는 Command Line에서 다음과 같이 입력합니다.

$ tesseract (image) output -l lang

참고


반응형