Tesseractのtraineddataを作る

ちょっと所要で手書きの数字を認識させたい今日この頃。
参考にさせていただきました。

で、今回手書きの数字データMNISTからmnist.traineddataを作ってみた。
MNISTから画像ファイルの抽出はこちら。

で、Windows10環境にWSL(Windows Subsystem for Linux)でUbuntu環境こさえてやってみた。

# root権限
$ sudo su -

# Ubuntuを更新
$ apt update
$ apt upgrade -y

# Tesseractインストール
$ add-apt-repository ppa:alex-p/tesseract-ocr -y && apt update
$ apt install -y tesseract-ocr
# 作業フォルダ作成
$ mkdir ~/tess
$ cd ~/tess

# 言語情報を取得
$ git clone --depth 1 https://github.com/tesseract-ocr/tesseract.git
$ git clone --depth 1 https://github.com/tesseract-ocr/langdata.git
$ echo "export TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata/" >> ~/.profile && source ~/.profile
$ wget https://github.com/tesseract-ocr/tessdata/raw/master/jpn.traineddata -P $TESSDATA_PREFIX
$ wget https://github.com/tesseract-ocr/tessdata_best/raw/master/eng.traineddata -O $TESSDATA_PREFIX/eng_best.traineddata
$ wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn.traineddata -O $TESSDATA_PREFIX/jpn_best.traineddata
$ wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn_vert.traineddata -P $TESSDATA_PREFIX

# 言語情報の確認(6個あるはず)
$ tesseract --list-langs

# 動作確認(ocr-test.pngは適当に画像を用意すること)
$ tesseract ~/tess/ocr-test.png stdout -l jpn

# OCR-Dをダウンロード
$ cd ~/tess
$ git clone --depth 1 https://github.com/OCR-D/ocrd-train.git

# Pythonに必要なライブラリをインストール
# apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev

# 公式からダウンロードして/tmp/Python-3.8.3.tarに保存したとして解凍
$ cd /tmp
$ tar xzf Python-3.8.3.tgz

# Pythonをインストール
$ cd Python-3.8.3
$ ./configure -enable-shared
$ make
$ make install
$ sh -c "echo '/usr/local/lib' > /etc/ld.so.conf.d/custom_python3.conf"
$ ldconfig

# 確認(バージョンが表示されるはず)
$ python3 -V

# pillowもインストール
$ apt install -y python3-pip
$ pip3 install pillow --upgrade pip

$ cd ~/tess/ocrd-train
$ mkdir data
# MNISTの画像ファイル(*.tiff)とラベル(*.gt.txt)を fontname-ground-truthフォルダとして ocrd-train/data配下につくる
# ここでは mnist-ground-truthとして配置したとみなす
# traindataを作成
$ nohup time -f "Run time = %E\n" make training MODEL_NAME=mnist >> train.log 2>&1 &
# 実行結果をモニタ
$ tail -f train.log
# 実行結果をtessesactの辞書データ置き場にコピー
$ cp data/mnist.traineddata $TESSDATA_PREFIX/mnist.traineddata

# 動作確認(ocr-test.pngは適当に画像を用意すること)
# この時点では警告『Failed to load any lstm-specific dictionaries for lang mnist!!』が出るが解析はできる
$ tesseract ~/tess/ocr-test.png stdout -l mnist

適当な画像(ocr-test.png)を解析してみたところ、-l jpnを指定したよりは認識率は上がった。
が、まだまだですね。

$ tesseract ~/tess/ocr-test.png stdout -l jpn
[23 代159S40
123V5678o
$ tesseract ~/tess/ocr-test.png stdout -l mnist
1233458780
1345779

make trainingコマンドが20分程度で終わってしまっているのもなー
チューニングしようがあるのか謎い…。


他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。

返信を残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)