너무 불친절한 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 인식에 사용하기에는 인식률이 떨어지므로 튜닝도 해야하고, 추가적인 학습이 필요할 것으로 보인다.
(계속)