Tesseract-OCRでOCR 設定 Ubuntuで

2019年6月13日

TesseractといえばオープンソースOCR(文字認識)の定番ライブラリと思いますが、私も仕事で多少触っていますので、基本的な使い方、注意点をメモって見ます。

2019年5月時点の記事です。

Tesseractの現在使われているバージョンは3と4の2つありますが、認識精度は当たり前ですが、4 のほうがよいですので、可能でしたらバージョン4を使うほうがよいです。

ただし私の環境のUbuntu16.04ですと標準のリポジトリからインストールすると3になってしまいます。Ubuntu18.04ですとbetaですが、バージョン4になっていますね。

Ubuntu16.04でもがんばればTesseract4インストールできますが、ソースからもってきてコンパイルインストールなので、私のようなアマチュアLinux愛好家にはちょっと敷居が高いですね。一応私でも出来ましたが、この部分は自信ないですので、記載しません。

インストールは一応以下でUbuntu16.04/18.04でどちらも同じです。

$ sudo apt-get install tesseract-ocr

バージョン確認コマンド

$ tesseract -v

結果

#Ubuntu18.04
tesseract 4.0.0-beta.1
 leptonica-1.75.3

#Ubuntu16.04
tesseract 3.04.01
 leptonica-1.73

#Ubuntu16.04 気合でTesseract4を入れた場合
tesseract 4.1.0-rc1-15-gc02f
 leptonica-1.74.4

対応している言語を確認します

$ tesseract --list-langs

jpnが出てこないで、jpnが必要な場合はデータ追加です。

$ sudo apt-get install tesseract-ocr-jpn

当然ですが、apt-getでtesseractをインストールしていない場合は手動でjpnデータをインストールする必要があります(割愛。。)。

動作確認

OCRしたい画像ファイルが日本語が含まれているtest.jpg、出力のテキストファイルをoutput.txtとしたい場合は

$ tesseract test.jpg output -l jpn

とりあえずこれで何か文字は出力されると思いますが、現実的にテストではなく何か実際に利用シーンがある場合にはより精度をあげるために’psm'(Page Segmentation Modes)オプションを指定してやったほうがベターです。これが微妙に4系と3系でオプションのわたし方が違うようですので、注意が必要ですね。

4系は’–psm’ですが、3系は’-psm’ですね。私のように諸事情で4系、3系を併用している場合は面倒です。。私が普段利用しているのはpsm 7です。あと8でしょうか。これをつけると正しく認識できることが結構ありました。画像認識のプロではないので、理由はわかりませんが。

  7    Treat the image as a single text line.
  8    Treat the image as a single word.

実際のコマンド

#tesseract4系
$ tesseract test.jpg output -l jpn --psm 7

#tesseract3系
$ tesseract test.jpg output -l jpn -psm 7

私は実際の仕事ではOSのコマンドラインからではなくて、pythonのpytesseractでtesseractを呼び出していますが、ここでも4系、3系でpsmオプションを渡してやる場合にも、注意が必要ですね。以下のconfig=の部分になります。

#tesseract4系
output=pytesseract.image_to_string(Image.open('test.jpg'),config='--psm 7')
#tesseract3系
output=pytesseract.image_to_string(Image.open('test.jpg'),config='-psm 7')

pytesseractを使った場合は–psmでも-psmでもエラーにはなりませんが、OCR結果が出力されませんね。OSコマンドラインから実行するとエラーを返してくれますが。

OCR実践

実際に以下のあいうえお画像ファイルをocrしてみました。

あいうえお画像
#tesseract4系
あい うえ お

#tesseract3系
あいうえお

この文字列画像に関してはなぜか4系で不要な空白が含まれてますね。。

ただこれ以外にもいろいろOCRしてますが、4系のほうが認識率は高いのは間違いないと思います。

ただ4系、3系でもOpenCVを使っていろいろ調整すると3系でも十分いけるような気がします。次はOpenCVとpytesseractを組み合わせた記事を書いてみたいと思います。