OCRツール「Tesseract OCR」をインストールしてPythonで使う

person 73spicafolder_openPython, 技術系access_time 2017-05-28

ocr_test

個人的な創作物の中で,「画面のスクリーンショットを取ってその中の文字をOCRで読み取る」ということをしたかったので調べたところ,Tesseract OCRというOCRツールがあることを知りました.しかもPythonライブラリであるpyocrを使うことでPythonからも扱うことができるということで早速使ってみました.

そのインストール手順のメモになります.

OCRとは

OCR(Optical Character Recognition/Reader、オーシーアール、光学的文字認識)とは、手書きや印刷された文字を、イメージスキャナやデジタルカメラによって読みとり、コンピュータが利用できるデジタルの文字コードに変換する技術です。

私の用途的に説明すると,画像データ中の文字をテキストに起こしてくれる技術ということです.

Tesseract OCRとは

OCRツールの一種で,以下の特徴があります.

  • Githubで公開されているオープンソースのOCRツール
  • 様々な言語の訓練データが公開されている(日本語もあるよ)
  • Pythonからも使える

おそらくPythonに限らずにTesseract OCR(以下,Tesseract)を使えるようなライブラリはあると思います.

Tesseract + PythonでOCRを行う

以下の順で説明していきます.

  • 環境
  • Tesseractのインストール
  • Tesseractを使ってみる
  • pyocrのインストールしてPythonで使う

環境

  • xUbuntu 16.04
  • Python2.7

Tesseractのインストール

今回は確実に最新版をインストールするために,ソースからビルドしてみます.と言っても,Githubに公開されている手順通りにやっていくだけです.また,Githubの手順では自身でトレーニングを行うためのトレーニングツールが必要な人向けの手順も書いてありますが,私は取り急ぎOCRが使えれば良かったため,本記事では飛ばしたいと思います.

まずは依存関係をインストールします.

次にLeptonicaという画像ライブラリをインストールします.apt-getでも入れられるのですが,Tesseractの最新版では1.74.0が必要になりますので,Leptonicaも最新版をソースからビルドします.ソースはこちらから最新版を得られます.

さて,ここまででTesseractをビルドする準備ができました.以下のようにしてビルドします.

これでTesseractが入りました.

Tesseractは/usr/local/share/配下の訓練データを参照してOCRを行います.Tesseractインストール直後は訓練データがありませんので,こちらから興味のある言語の訓練データをダウンロードしましょう.私は英語日本語が使いたいので,eng.traineddatajpn.traineddataをダウンロードし,/usr/local/share/配下に置きました.

ここまで行うと,コマンドラインからTesseractを使用できるようになります.適当なデータで試してみましょう.私はこのようなデータを使いました.

my_test

コマンドは以下です.

 

my_test.pngが上の画像ファイル,resultは出力ファイル名です.自動的にresult.txtとなります.結果は以下です.

result

テスト用の画像作るときも結果を参照する時も同じエディタを使っていてわかりにくいかもですが,ちゃんと読み取れています.

同様に日本語でもやってみます.

my_jpn_test

コマンドは以下です.

-l オプションで言語を指定します.結果は以下です.

jpn_result

思ったよりきちんと読み取れています.

(参考にした記事では,複雑な文章等を扱うとはちゃめちゃな結果になるとありました.そのような場合は自分で訓練データを作ると良いそうです.公開されている訓練データも改善されているのかもしれませんね.)

追記)

いくつかの日本語の文章を試してみましたが,やはり英語に比べると精度が低いようです.しかし画像を拡大したりするだけで精度が変わるので,画像中の文字が細かい場合や画像自体が小さい場合は画像を加工すればだいぶ読みやすくなります.

pyocrをインストールしてPythonで使う

では,TesseractをPythonから使ってみます.まずはpyocrをインストール.

これでPythonでTesseractを扱えます.

(参考にした記事ではTesseractをソースからビルドした場合,とあるひと手間必要とのことでしたが,現在は修正されてひと手間がいらないみたいです.)

では,簡単なテストコードを書いてみます.先ほどの日本語のデータでテストしてみます.

 

このように,コマンドラインから実行した時と同様の結果なります.

ソースコード中のimage_to_stringというメソッドの引数にbuilderというものがあります.さらに中を見ると,pyocrのTextBuilderの中でterreract_layoutというパラメータに6を指定しています.これはTerreractコマンドの-psmオプションにあたるもので,-psm 6 と同義になります.このオプションはpage seg modeの略で,画像をどのように(どんな画像だと思って)読み取るかというものです.以下が各値の対応です(参考).

例えば,縦書きのテキストの画像を読み取る場合,virtically aligned textなので5を指定します.精度良く読み取るためには,このようなオプションの値もしっかり設定する必要があるでしょう.

まとめ

Tesseract OCRをxUbuntuにインストールしてコマンドラインで簡単なOCRを行いました.今回はソースからビルドする方法を紹介しました.

また,pyocrをインストールしてPythonからTesseract OCRを使用しました.

 

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">