tesseract-ocrで画像の文字認識をやってみる

2018年3月13日火曜日

OCR tesseract windows 文字認識

t f B! P L

文字認識(OCR)をやってみたい

画像から文字を取得したい。tesseractを利用するのが定番のようだ。 pythonなどからも利用できるようだがとりあえずコマンドラインで使ってみたい。

目標

Windows10にtesseractをインストールしてコマンドラインで使う



インストール

https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows の4.0.0-alpha for windowsからインストーラーをダウンロードする。 複数のリンクがあるが今回は Windows Installer made with MinGW-w64 from UB Mannheim というやつを選んだ。
インストーラーに従ってインストール。
途中でインストールしたいオプションにチェックを入れろと言われたので、日本語データもインストールしておく。
もちろん言語データは後から簡単に追加できるので気楽にインストールを進める。

コマンドラインでtesseractを使ってみる

usernameは環境に合わせて読み替えてください。
  1. cmd.exeを起動して認識したい画像のあるディレクトリに移動し、tesseractへのパスを通す
    • インストールディレクトリを変更していなければ
    • c:\Users\username\AppData\Local\Tesseract-OCRへのパスを通す
  2. 環境変数に言語データがあるディレクトリへのパスを入れる
    • set TESSDATA_PREFIX=C:\Users\username\AppData\Local\Tesseract-OCR\tessdata
  3. 実行してみる
    • tesseract sample.png result -l jpn
    • 必要な引数はsource output (options)
    • この場合はresult.txtに出力される
    • outputにはstdoutも指定できるがcmdだと化けるので日本語を使うときは使わない
  4. 生成されたresult.txtを見る
    • うまく認識されていなかったら画像を変えてみる
こんなエラーがでたら言語データへのパスが入っていない
E:\dev>tesseract sample.png result -l jpn
Error opening data file \Users\username\AppData\Local\Tesseract-OCR\jpn.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'jpn'
Tesseract couldn't load any languages!
Could not initialize tesseract.
もし言語データをインストールしていなかったらhttps://github.com/tesseract-ocr/tessdataここからダウンロードしてtessdataディレクトリに入れる。

sample

サンプル画像
E:\dev>tesseract imouto.png imouto -l jpn
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
Warning. Invalid resolution 0 dpi. Using 70 instead.
result
妹 が あ な た を 呼 ん で い る 。 ' お 兄 ち ゃ ん ?」
大体できている。

より精度のたかい認識

白背景に黒い文字が認識されやすい気がする。 例えばこの画像
これはdokidoki literature clubを検索してでてきた適当な画像の文字列部分を切り取って2倍に拡大したもの。jpgのせいか文字が少し霞んでいる。 これを認識させてみる。 英語なので出力はstdoutでも大丈夫。
E:\dev>tesseract liteori2big.jpg stdout -l eng
Warning. Invalid resolution 0 dpi. Using 70 instead.
Eventne hes ther eves on moe melkine me feel emby axiwerd.
よくない。
次にJTrimを使って色反転してグレースケールしてしきい値95あたりで2値化してまわりを雑に白で塗ったもの。塗りつぶしはワンクリックだった。 雑な処理の過程で一部文字が消えてしまっている
E:\dev>tesseract liteori2bigg2.jpg stdout -l eng
Warning. Invalid resolution 0 dpi. Using 70 instead.
Everyone has their eyes on me, making me f el terribly aw kwar -.
文字が消えないように処理を工夫する必要がありそうだが、全体的に精度が良くなった。

QooQ