본문 바로가기

카테고리 없음

좌충우돌 Tesseract 4.0 LSTM 학습하기 (1)

너무 불친절한 Tesseract 학습 과정을 좌충우돌 시도해본 결과를 기록해 놓는다.

 

Tesseract 학습을 위해서는 학습데이터가 필요한데 두가지 방법으로 학습데이터를 만들 수 있다.

1. 컴퓨터에 설치되어 있는 폰트를 이용하여 자동으로 학습데이터 생성

2. 기존의 이미지로 존재하는 글씨에 직접 라벨링을 해서 학습데이터 생성
  (폰트에는 없는 손글씨나 고대상형문자 같은 것을 학습시킬때)

위 두가지 모두 2개의 파일형태가 필요하다

TIF : 글자 이미지 파일
BOX :  TIF에 정보를 담은 파일 (레이블링 파일로 보면 되겠다)

위에 1번 방법인 폰트를 이용하여 자동으로 생성할 경우 Tesseract에 포함되어 있는 tesstrain.sh를 사용하면 자동으로 
TIF/BOX 파일쌍과 lstmf 파일이 작성된다.

* lstmf 파일은 tesseract 4.0 이전의 .tr 포맷과 유사한데 TIF와 BOX 파일로부터 생성된 학습 데이터이다

TIF는 jpg, png와 같은 이미지 파일이고

Box 파일은 아래와 같이 기술된다

(예시)
가 102 3152 146 3198 0
각 163 3152 207 3198 0
간 225 3153 269 3198 0
갈 286 3152 330 3198 0
감 102 3067 146 3113 0
갑 163 3067 207 3113 0

주의해야할점은 Tesseract 3와 4에서의 Box는 다르게 동작한다
Tesseract 3는 문자 하나 하나에 Box를 생성해야하는 반면,
4에서는 전체 행(Line)을 Box로 사용한다

lstmbox를 사용하면 이미지로부터 자동으로 Box를 생성할 수 있다

image.png라는 파일이 준비가 되었으면 아래와 같이 입력 시 image.box 파일이 생성된다.

tesseract image.png image lstmbox

Tesseract Tutorial

먼저 폰트를 설치한다

sudo apt update
sudo apt install ttf-mscorefonts-installer
sudo apt install fonts-dejavu
fc-cache -vf

이후 아래와 같이 필요한 데이터를 받아온다

mkdir ~/tesstutorial
cd ~/tesstutorial

mkdir langdata
cd langdata
wget https://raw.githubusercontent.com/tesseract-ocr/langdata_lstm/master/radical-stroke.txt
wget https://raw.githubusercontent.com/tesseract-ocr/langdata_lstm/master/common.punc
wget https://raw.githubusercontent.com/tesseract-ocr/langdata_lstm/master/font_properties
wget https://raw.githubusercontent.com/tesseract-ocr/langdata_lstm/master/Latin.unicharset
wget https://raw.githubusercontent.com/tesseract-ocr/langdata_lstm/master/Latin.xheights
mkdir eng
cd eng
wget https://raw.githubusercontent.com/tesseract-ocr/langdata/master/eng/eng.training_text
wget https://raw.githubusercontent.com/tesseract-ocr/langdata/master/eng/eng.punc
wget https://raw.githubusercontent.com/tesseract-ocr/langdata/master/eng/eng.numbers
wget https://raw.githubusercontent.com/tesseract-ocr/langdata/master/eng/eng.wordlist

cd ~/tesstutorial
git clone --depth 1 https://github.com/tesseract-ocr/tesseract.git
cd tesseract/tessdata
wget https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata
wget https://github.com/tesseract-ocr/tessdata/raw/master/osd.traineddata
mkdir best
cd best
wget https://github.com/tesseract-ocr/tessdata_best/raw/master/eng.traineddata
wget https://github.com/tesseract-ocr/tessdata_best/raw/master/heb.traineddata
wget https://github.com/tesseract-ocr/tessdata_best/raw/master/chi_sim.traineddata


이제 Tesseract 디렉토리로 이동하여 아래 명령어를 실행해보자

src/training/tesstrain.sh --fonts_dir /usr/share/fonts --lang eng --linedata_only \
  --noextract_font_properties --langdata_dir ../langdata \
  --tessdata_dir ./tessdata --output_dir ~/tesstutorial/engtrain

이런저런 메세지들이 출력된 후 정상적으로 끝났다면
tesstutorial 폴더 밑에 engtrain 디렉토리가 생성되 있고
안에 폰트별로 lstmf 확장자의 파일이 여러개 생성된 것을 볼 수 있고, engtrain/eng 폴더 안에는

OCR을 인식할 수 있는 모델인 eng.traineddata 파일이 생성된 것을 볼 수 있다.

단, 이 모델을 바로 OCR 인식에 사용하기에는 인식률이 떨어지므로 튜닝도 해야하고, 추가적인 학습이 필요할 것으로 보인다.

 

(계속)