Tesseract-OCRの学習(識字率をあげる)

提供:wiki - PCスキルの小技・忘却防止メモ
移動: 案内, 検索

Tesseract-OCRの学習(識字率をあげる)

目次

基本

文字画像と文字をマッピングさせる。

※細かく設定をしたいなら他のサイトを探してください

フォントセット名

頻繁に出てくるファイル名なのことなんだが、ややこしくなるので仮に「フォントセット名」と命名しておく。

1書体1ファイルとする
フォントセット名は「(言語名).(書体の名称).exp(インデックス番号)」

「言語が日本語で、書体がzebra」だったら「jpn.zebra.exp0」となる。

複数書体(複数ファイル)を使う場合「jpn.zebra.exp0」「jpn.cat.exp1」「jpn.dog.exp2」となる。

※書体が違うならインデックス番号は「0」のままで良いらしいんだが、失敗したので「1」や「2」にしてみた。

生成されるファイルの名称は下記のようなルール

  • 画像名:フォントセット名.png、フォントセット名.tif
  • boxファイル名:フォントセット名.box
  • trファイル名:フォントセット名.tr

▼「フォントセット名:jpn.zebra.exp0」の場合

  • 画像名:jpn.zebra.exp0.png
  • boxファイル名:jpn.zebra.exp0.box
  • trファイル名:jpn.zebra.exp0.tr

基本の流れ

  1. 文字画像を用意
  2. boxファイルの作成
  3. boxファイルの修正
  4. trファイルの作成
  5. mftrainingの実行準備
  6. mftrainingの実行
  7. cntrainingの実行
  8. combine_tessdataの実行準備
  9. combine_tessdataの実行
  10. tessdataへ移動

文字画像を用意

png形式で大丈夫っぽい。tiff形式のほうが望ましいか?

  • 1文字を20px以内に収めるのが無難っぽい(大きすぎるとエラーになるという噂もちらほらあったりする)

ファイル名は後でリネームする手間を省くため最初からフォントセット名にしておく。

boxファイルの作成

画像からboxファイルを作成する

コンソールから下記実行。

>tesseract 「画像名」 「フォントセット名」 -l jpn batch.nochop makebox

※成功すると「boxファイル」が出来る。

複数書体(複数ファイル)を使う場合は、複数回実行し複数の「boxファイル」を作成する

boxファイルの修正

boxファイルをテキストエディタで開き、座標と文字が正しいかチェックし必要に応じて修正する

1行につき、1文字記載されている

「Z 0 0 20 20 0」の場合

  • 最初の「Z」は文字画像から文字に変換した内容(違うなら正しい文字に書き換え)
  • 次の2つ「0 0」は対象の文字画像の左上の座標
  • 次の2つ「20 20」は対象の文字画像の右下の座標
  • 最後の「0」はインデックス番号らしいが、詳細は不明。気にしなくていいかも?

trファイルの作成

画像とフォントセット名からtrファイルを作成する(※先にboxファイル生成しておくこと)

コンソールから下記実行。

>tesseract 「画像名」 「フォントセット名」 nobatch box.train.stderr

※成功すると「trファイル」が出来る。

複数書体(複数ファイル)を使う場合は、複数回実行し複数の「trファイル」を作成する

mftrainingの実行準備

mftrainingの実行準備として「unicharset」ファイルと「font_properties」ファイルを用意する。

■unicharsetファイルの作成(boxファイルが複数あるならスペースでつなぐ)

>unicharset_extractor 「boxファイル名」

※成功すると「unicharset」が出来てる。

▼boxファイルが複数ある場合のサンプル

>unicharset_extractor jpn.aaa.exp0 jpn.bbb.exp1

■font_propertiesファイルの作成(ファイル名:font_properties 拡張子不要)

手動でテキストファイルを用意し、中身は下記。

fonta 0 0 0 0 0

※「fonta」は「フォントセット名」の「書体の名称」のこと。

mftrainingの実行

mftrainingの実行は2回行い、ともに「unicharset」ファイルと「font_properties」と「trファイル」を使う

■1回目

>mftraining -F font_properties -U unicharset 「trファイル」

※「trファイル」が複数ある場合はスペースでつなぐ

成功すると「inttemp」「shapetable」「pffmtable」が出来る。

■2回目

>mftraining -F font_properties -U unicharset -O jpn.unicharset unicharset 「trファイル」

※「trファイル」が複数ある場合はスペースでつなぐ

成功すると「jpn.unicharset」が出来る。

▼trファイルが複数ある場合のサンプル

>mftraining -F font_properties -U unicharset jpn.aaa.exp0 jpn.bbb.exp1
>mftraining -F font_properties -U unicharset -O jpn.unicharset unicharset jpn.aaa.exp0 jpn.bbb.exp1

cntrainingの実行

>cntraining 「trファイル」

※「trファイル」が複数ある場合はスペースでつなぐ

成功すると「normproto」が出来る。

▼trファイルが複数ある場合のサンプル

>cntraining jpn.aaa.exp0 jpn.bbb.exp1

combine_tessdataの実行準備

「mftrainingの実行」で出来たファイル(inttempshapetablepffmtable)と「cntrainingの実行」で出来たファイル(normproto)に「jpn.」をつける。

  • inttemp → jpn.inttemp
  • shapetable → jpn.shapetable
  • pffmtable → jpn.pffmtable
  • normproto → jpn.normproto

combine_tessdataの実行

>combine_tessdata jpn.

成功すると「jpn.traineddata」が出来る。

tessdataへ移動

「combine_tessdataの実行」で出来たファイル(jpn.traineddata)を「tessdataフォルダ」へ移動させる。

書体を追加したい

追加することは、おそらくできるはずだが詳細は不明。毎回作りなおす必要があるのか?

作り直す場合は下記ファイルを削除しておけばよさげ。

  • jpn.inttemp
  • jpn.shapetable
  • jpn.pffmtable
  • jpn.normproto
  • jpn.unicharset
  • unicharset

関連項目