
0. 시작하기전..
OCR은 광학문자인식 기술로 역사가 상당히 오래된 기술입니다.
최근(?) 들어 딥러닝이 떠오르며 lstm 모델을 통한 OCR엔진이 나오게 되었고 이를 학습/ 준비하는 과정을 정리 했습니다.
1. 개발환경
- WSL2 - UBUNTU18.04
- tesseract4.1.1
- GPU 없음
WSL 설치에 대해선
2021/01/25 - [분류 전체보기] - [Linux] 윈도우 에서 리눅스 사용하기 WSL
[Linux] 윈도우 에서 리눅스 사용하기 WSL
docs.microsoft.com/ko-kr/windows/wsl/install-win10 Windows 10에 WSL(Linux용 Windows 하위 시스템) 설치 Bash 터미널을 사용하여 Linux 배포(Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin 및 Alpine 포함)를..
hidden-loca.tistory.com
2. 설치
폴더를 만들고 들어갑니다.
$ mkdir Tessact
$ cd Tesseract
tesstrain 을 받아옵니다.
$ git clone https://github.com/tesseract-ocr/tesstrain.git
$ cd tesstrain
make를 설치후 make 입력시 사용할수 있는 속성이 나옵니다.
$ sudo apt install make
$ make
find: ‘data/foo-ground-truth’: No such file or directory
find: ‘data/foo-ground-truth’: No such file or directory
Targets
unicharset Create unicharset
lists Create lists of lstmf filenames for training and eval
training Start training
traineddata Create best and fast .traineddata files from each .checkpoint file
proto-model Build the proto model
leptonica Build leptonica
tesseract Build tesseract
tesseract-langs Download tesseract-langs
clean-box Clean generated .box files
clean-lstmf Clean generated .lstmf files
clean-output Clean generated output files
clean Clean all generated files
Variables
TESSDATA Path to the .traineddata directory with traineddata suitable for training
(for example from tesseract-ocr/tessdata_best). Default: /home/munggae/Tessact/tesstrain/usr/share/tessdata
MODEL_NAME Name of the model to be built. Default: foo
OUTPUT_DIR Output directory for generated files. Default: data/foo
WORDLIST_FILE Optional Wordlist file for Dictionary dawg. Default: data/foo/foo.wordlist
NUMBERS_FILE Optional Numbers file for number patterns dawg. Default: data/foo/foo.numbers
PUNC_FILE Optional Punc file for Punctuation dawg. Default: data/foo/foo.punc
START_MODEL Name of the model to continue from. Default: ''
PROTO_MODEL Name of the proto model. Default: 'data/foo/foo.traineddata'
CORES No of cores to use for compiling leptonica/tesseract. Default: 4
LEPTONICA_VERSION Leptonica version. Default: 1.80.0
TESSERACT_VERSION Tesseract commit. Default: 4.1.1
TESSDATA_REPO Tesseract model repo to use. Default: _best
GROUND_TRUTH_DIR Ground truth directory. Default: data/foo-ground-truth
MAX_ITERATIONS Max iterations. Default: 10000
EPOCHS Set max iterations based on the number of lines for the training. Default: none
DEBUG_INTERVAL Debug Interval. Default: 0
LEARNING_RATE Learning rate. Default: 0.002
NET_SPEC Network specification. Default: [1,36,0,1 Ct3,3,16 Mp3,3 Lfys48 Lfx96 Lrx96 Lfx192 O1c###]
LANG_TYPE Language Type - Indic, RTL or blank. Default: ''
PSM Page segmentation mode. Default: 13
RANDOM_SEED Random seed for shuffling of the training data. Default: 0
RATIO_TRAIN Ratio of train / eval training data. Default: 0.90
TARGET_ERROR_RATE Default Target Error Rate. Default: 0.01
지금 단계에선 대충 보고 넘어갑니다.
빌드 전, 입력
sudo apt update
sudo apt upgrade
sudo apt install g++ # or clang++ (presumably)
sudo apt install pkg-config libpng-dev libjpeg8-dev libtiff5-dev
sudo apt install zlib1g-dev libicu-dev libpango1.0-dev libcairo2-dev
sudo apt install autoconf automake libtool
sudo apt install make unzip
sudo apt install python3-pip
python3 -m pip install pip --upgrade
python3 -m pip install pillow
Tesseract는 leptonica를 빌드해야 빌드가 됩니다. 이전에 따로 테서렉트를 설치했다면 상관 없지만 새로 설치할경우 렙토니카를 먼저 빌드해야 합니다.
$ sudo make leptonica
$ sudo make tesseract
빌드완료시 eng.traineddata 가 다운받아집니다.
확인)
$ tessseract -v

Tesseract 버전이 잘나오면 성공.
3.학습
tesstrain 폴더 안쪽 ocrd-testset.zip 안에 예시 이미지와 라벨 텍스트가 있습니다.
이미지는 tif/tiff를 기본값으로, 텍스트는 .gt.txt를 기본으로 합니다.


ich denke. Aber was die ſelige Frau Geheimräthin
위와같이 여백이 거의 없는 문자열과 그 답을 적은 텍스트 파일로 이뤄집니다.
기본값으로 './data/foo-ground-truth/'안에 넣어주며 옵션을 통해 경로와 이름을 정해 줄 수있습니다.
$ mkdir data
$ mkdir data/foo-ground-truth
$ unzip ocrd-testset.zip -d ./data/foo-ground-truth/
다시 make 를 입력해 천천히 살펴보겠습니다.
$ make
Targets
unicharset Create unicharset
lists Create lists of lstmf filenames for training and eval
training Start training
traineddata Create best and fast .traineddata files from each .checkpoint file
proto-model Build the proto model
leptonica Build leptonica
tesseract Build tesseract
tesseract-langs Download tesseract-langs
clean-box Clean generated .box files
clean-lstmf Clean generated .lstmf files
clean-output Clean generated output files
clean Clean all generated files
Variables
TESSDATA Path to the .traineddata directory with traineddata suitable for training
(for example from tesseract-ocr/tessdata_best). Default: /home/munggae/Tessact/tesstrain/usr/share/tessdata
MODEL_NAME Name of the model to be built. Default: foo
OUTPUT_DIR Output directory for generated files. Default: data/foo
WORDLIST_FILE Optional Wordlist file for Dictionary dawg. Default: data/foo/foo.wordlist
NUMBERS_FILE Optional Numbers file for number patterns dawg. Default: data/foo/foo.numbers
PUNC_FILE Optional Punc file for Punctuation dawg. Default: data/foo/foo.punc
START_MODEL Name of the model to continue from. Default: ''
PROTO_MODEL Name of the proto model. Default: 'data/foo/foo.traineddata'
CORES No of cores to use for compiling leptonica/tesseract. Default: 4
LEPTONICA_VERSION Leptonica version. Default: 1.80.0
TESSERACT_VERSION Tesseract commit. Default: 4.1.1
TESSDATA_REPO Tesseract model repo to use. Default: _best
GROUND_TRUTH_DIR Ground truth directory. Default: data/foo-ground-truth
MAX_ITERATIONS Max iterations. Default: 10000
EPOCHS Set max iterations based on the number of lines for the training. Default: none
DEBUG_INTERVAL Debug Interval. Default: 0
LEARNING_RATE Learning rate. Default: 0.002
NET_SPEC Network specification. Default: [1,36,0,1 Ct3,3,16 Mp3,3 Lfys48 Lfx96 Lrx96 Lfx192 O1c###]
LANG_TYPE Language Type - Indic, RTL or blank. Default: ''
PSM Page segmentation mode. Default: 13
RANDOM_SEED Random seed for shuffling of the training data. Default: 0
RATIO_TRAIN Ratio of train / eval training data. Default: 0.90
TARGET_ERROR_RATE Default Target Error Rate. Default: 0.01
Targets
unicharset Create unicharset
lists Create lists of lstmf filenames for training and eval
training Start training
traineddata Create best and fast .traineddata files from each .checkpoint file
proto-model Build the proto model
leptonica Build leptonica
tesseract Build tesseract
tesseract-langs Download tesseract-langs
clean-box Clean generated .box files
clean-lstmf Clean generated .lstmf files
clean-output Clean generated output files
clean Clean all generated files
- unicharset : .gt.txt 파일들을 읽어와 unicode 표를 작성합니다. 기존 모델(pretrained)이 있다면 기존 모델의 것도 불러옵니다. data/(모델이름 기본값 : foo) 폴더에 저장됩니다.
- lists : 학습에 필요한 box파일과 lstmf 파일을 만듭니다.
- proto-model : 초기모델을 만듭니다. unicharset과 같이 저장됩니다.
- clean : 모든 결과물들을 지웁니다.
- clean-box,lstmf,output : 해당되는 것들을 지웁니다.
- training : 학습을 시작합니다. 위의 전과정을 거치지 않아도 자동으로 실행이 됩니다.
- traineddata : 학습후 checkpoint 파일로 부터 best_model, fast_model을 생성합니다.
Variables
TESSDATA Path to the .traineddata directory with traineddata suitable for training
(for example from tesseract-ocr/tessdata_best). Default: /home/munggae/Tessact/tesstrain/usr/share/tessdata
MODEL_NAME Name of the model to be built. Default: foo
OUTPUT_DIR Output directory for generated files. Default: data/foo
WORDLIST_FILE Optional Wordlist file for Dictionary dawg. Default: data/foo/foo.wordlist
NUMBERS_FILE Optional Numbers file for number patterns dawg. Default: data/foo/foo.numbers
PUNC_FILE Optional Punc file for Punctuation dawg. Default: data/foo/foo.punc
START_MODEL Name of the model to continue from. Default: ''
PROTO_MODEL Name of the proto model. Default: 'data/foo/foo.traineddata'
CORES No of cores to use for compiling leptonica/tesseract. Default: 4
LEPTONICA_VERSION Leptonica version. Default: 1.80.0
TESSERACT_VERSION Tesseract commit. Default: 4.1.1
TESSDATA_REPO Tesseract model repo to use. Default: _best
GROUND_TRUTH_DIR Ground truth directory. Default: data/foo-ground-truth
MAX_ITERATIONS Max iterations. Default: 10000
EPOCHS Set max iterations based on the number of lines for the training. Default: none
DEBUG_INTERVAL Debug Interval. Default: 0
LEARNING_RATE Learning rate. Default: 0.002
NET_SPEC Network specification. Default: [1,36,0,1 Ct3,3,16 Mp3,3 Lfys48 Lfx96 Lrx96 Lfx192 O1c###]
LANG_TYPE Language Type - Indic, RTL or blank. Default: ''
PSM Page segmentation mode. Default: 13
RANDOM_SEED Random seed for shuffling of the training data. Default: 0
RATIO_TRAIN Ratio of train / eval training data. Default: 0.90
TARGET_ERROR_RATE Default Target Error Rate. Default: 0.01
Variable은 전부 대문자로 =하나에 띄어쓰기 없이 사용합니다.
- MODEL_NAME : 모델이름을 설정합니다
- START_MODEL : 이전에 학습된 모델이 있다면 이어서 학습할수 있습니다.
- GROUND_TRUTH_DIR : data의 경로를 지정할 수 있습니다.
- PSM : Tesseract OCR 사용시의 PSM과 같은 PSM 으로 생각됩니다.
이외에도 학습에 필요한 Hyper Parameter를 일부 설정할 수 있습니다.
다음과 같이 학습 할 수 있습니다.
예시)
make training # 기본 값만 사용
make training MODEL_NAME=cut # cut-ground-truth 의 이미지 학습
make training START_MODEL=eng # eng.traineddata 추가학습(재학습)
이전에 학습된 모델은 tesstrain/usr/share/tessdata에 넣어줘야 합니다.
$ mkdir usr
$ mkdir usr/share
$ mkdir usr/share/tessdata
$sudo cp /usr/share/tessdata/eng.traineddata ./usr/share/tessdata
eng.tessdata를 이용하여 다음 이미지를 읽을 경우 다음과 같습니다.


ich denke. Aber was die ſelige Frau Geheimräthin <- 원문장
영어가 제대로 인식하지 못함을 알 수 있습니다.
영어 모델에 추가적으로 학습하여 읽어보도록 하겠습니다.
$ make clean
$ make training START_MODEL=eng
학습이 끝나면 best, fast data를 만듭니다
$ make traineddata
$ sudo cp ./data/foo/tessdata_best/foo0.022_2187.traineddata /usr/share/tessdata/foo.traineddata
모델들은 ./data/foo/tessdata_best,fast 에 각각 저장되며 foo(loss).traineddata로 저장되기에 loss가 가장 적은 것을 택하면 됩니다.
원문
ich denke. Aber was die ſelige Frau Geheimräthin
영어

추가 학습

새로 추가하여 학습한 모델이 정확하게 나왔습니다.
'Back > Deep Learning' 카테고리의 다른 글
[YOLOv4][Darknet] 빌드 및 예시 (0) | 2021.05.12 |
---|---|
[DL] 그래픽카드 Deep Learning bench Mark (0) | 2021.04.27 |
[Python][Keras ][Tensorflow] Keras 모델 TFlite 변환과 최적화 (0) | 2020.11.04 |
[Tensorflow] Image classification model maker예측하기. (2) | 2020.10.20 |
[Tensorflow] Tensorflowlite를 이용한 Image classification model maker (1) | 2020.10.08 |