ようやく検証が終了しました。
画面共有とssh でログインしてリモートの環境でUbuntu を操作していたのですが、それが検証に手間取った理由でした。同じコマンドを実行しているはずなのに、エラーが出るときと出ないときがあったためでしたが、原因は画面共有でクリップボードの内容が送られるとコマンドが改変されることのようです。どこが改変されているのかは判明しておりません。
今回、参考にさせて頂いたのは下記。
https://qiita.com/aki_abekawa/items/418e069038fbdb77c59e
https://qiita.com/aki_abekawa/items/c2b94187f2ba7dc56993
学習の方針は、
a. フォントから学習
b. フォントから学習したtraineddata に更に画像から学習
「a. フォントから学習」ではネットからOCR を実施したい文字に似たフォントを探してきて下さい。今回は「1」と「7」がくせ者でした。「1」はただの縦棒、「7」は折れているのが1 回だけで、なかなか見つかりませんでした。
実行環境は下記。
Ubuntu18.04.3
macOS 上で仮想環境。CPU4 コア、メモリ8GB 、ディスクスペース60GB をまり当てました。メモリは4GB 、ディスクスペース30GB でも行けそうです。
tesseract 4.1.0
leptonica-1.78.0
Ubuntu は日本語版で無い方です。日本語版だとpython3 を動かすときにprint 分に.encode を付加する必要があるようです。
下記が実行したコマンドです。恐らく不要な物もあります。また参考にしたホームページとは多少違います。
sudo apt install ssh
systemctl start sshd
sudo apt install git
sudo apt install python3
sudo apt update && apt upgrade
sudo add-apt-repository ppa:alex-p/tesseract-ocr -y && apt update
sudo 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
sudo wget https://github.com/tesseract-ocr/tessdata_best/raw/master/eng.traineddata -O $TESSDATA_PREFIX/eng_best.traineddata
sudo wget https://github.com/tesseract-ocr/tessdata/raw/master/jpn.traineddata -P $TESSDATA_PREFIX
sudo wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn.traineddata -O $TESSDATA_PREFIX/jpn_best.traineddata
sudo wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn_vert.traineddata -P $TESSDATA_PREFIX
以上が環境の準備です。
combine_tessdata -e $TESSDATA_PREFIX/eng_best.traineddata ~/tess/eng_best.lstm
/usr/share/fonts にフォントを置くこと。
text2image --list_available_fonts --fonts_dir /usr/share/fonts
python3 /home/apple/tess/create_code_list.py
上記でchars.txt と言うのが作成されます。作成後、今回は0 から9 以外は不要なので削除します。
python3 create_training_text.py
上記で、training_bs.txt と言うのが作成されますが、数字のみなのでExcel で乱数で作成しました。1 行40 文字、9880 行で作成しました。normalize_text.py は使いませんでした。
mkdir ~/tess/training_bs/
nohup time bash ~/tess/tesseract/src/training/tesstrain.sh \
--fonts_dir /usr/share/fonts \
--lang eng \
--fontlist "フォント名" "フォント名" \
--linedata_only \
--training_text ~/tess/training_bs.txt \
--langdata_dir ~/tess/langdata \
--noextract_font_properties \
--output_dir ~/tess/training_bs \
> ~/tess/training_bs/generate.log 2>&1 &
tail -f ~/tess/training_bs/generate.log
で動作を確認できます。
mkdir ~/tess/deg
「deg」は半角英数なら何でも良いようです。
nohup time lstmtraining \
--model_output ~/tess/deg/40000 \
--continue_from ~/tess/eng_best.lstm \
--old_traineddata $TESSDATA_PREFIX/eng_best.traineddata \
--traineddata ~/tess/training_bs/eng/eng.traineddata \
--train_listfile ~/tess/training_bs/jpn.training_files.txt \
--max_iterations 40000 \
>> ~/tess/deg/train.log 2>&1 &
イタレーションの回数は4 万回にしました。
動作確認は下記。
tail -f ~/tess/deg/train.log
lstmtraining --stop_training --continue_from ~/tess/deg/40000_checkpoint --traineddata '/home/apple/tess/training_bs/eng/eng.traineddata' --model_output ~/tess/degf.traineddata
これでdegf.traineddata ファイルが作成されるはずです。
ここまでが「a. フォントから学習」です。