Tesseractは、Win、Linux、MaxなどのOS上で動作するオープンソースの光学式文字認識(OCR)エンジンです。
Tesseractは Pythonのモジュールではなく、インストーラーなどを使用して各OSにインストールを行う必要があるが、Anacondaを使えば、他のモジュールと同様の管理で Tesseractでインストールをできる。
そこで今回は、Anacondaに Tesseractと pyocrをインストールして、簡単な文字認識のサンプルコードを作ってみる。
前提
Anacondaと Pythonはインストールされているものとする。
また、このサンプルコードを実装した時の Pythonは 3.9です。
インストール
Tesseract
まず OCRツールの Tesseractをインストールする。ツールでさえも conda install
コマンドでインストールできることに感激。
conda install -c conda-forge tesseract
Pyocr
次に Pythonの OCRライブラリである Pyocrをインストールする。
conda install -c conda-forge pyocr
動作チェック
OCRで文字認識をする前に、Pyocrから Tesseractを呼び出せるかチェックする。
pyocr.get_available_tools
関数を使って、使用可能なOCRツールを取得できるか確認する。
from PIL import Image
import sys
import pyocr
import pyocr.builders
tools = pyocr.get_available_tools()
if len(tools) == 0:
print("No OCR tool found")
sys.exit(1)
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
いざ文字認識
それでは実際に、次のような画像を用意してOCR機能を試してみよう。
先ほどのコードに続けて、以下のコード書く。日本語を含む文字を認識する時は lang="jpn"
とするのがポイントである。(英語の場合は eng
)
txt = tool.image_to_string(
Image.open('./SAMPLE_IMAGE.png'),
lang="jpn",
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )
実行結果は次のとおり。うん、素晴らしい漢字もしっかり認識されており素晴らしい!
隣の客は
よく柿食う客だ
認識した文字の周りに矩形を描画
builder
にLineBoxBuilder
または WordBoxBuilder
を指定することで、戻り値に、単語または行単位に認識した文字の座標を含むボックス情報が返されます。
これを使って、認識した文字の周りに矩形を描画してみましょう。矩形を描画する際に OpenCV を使います。OpenCVのインストール方法は次の記事で紹介していますので、こちらも参考に。
【関連記事】
▶ Anaconda に「OpenCV」をインストール
では、認識した文字の周りに矩形を描画するコードを書いてみます。
LineBoxBuilder
# builder に LineBoxBuilderを指定して、戻り値を行単位に認識したボックス情報で受け取る
res = tool.image_to_string(
Image.open('./SAMPLE_IMAGE.png'),
lang="jpn",
builder=pyocr.builders.LineBoxBuilder(tesseract_layout=6)
)
# 認識した文字の周りに矩形を描画する
out = cv2.imread("./SAMPLE_IMAGE.png")
for d in res:
cv2.rectangle(out, d.position[0], d.position[1], (0, 0, 255), 2)
cv2.imshow('image',out)
cv2.waitKey(0)
cv2.destroyAllWindows()
【実行結果】
手書き文字の認識
次に手書き文字の認識を試してみよう。
こんな感じの手書き文字の画像を用意した。
上で書いたコードで実行した結果は次のとおり。
【実行結果】
る ii に 1 j -
9 EE
3 3 EPS 上 ロ 5 9 =
PT で " av 向叶』 本
ie Li 人 ーー
オーノー。写真が暗すぎたせいか、全然文字が認識されず、意味不明な結果になってしまいました。
まとめ
Anaconda環境にTesseractと Pyocrをインストールして、文字認識をするサンプルを紹介した。
手書きの文字などは、「Google Cloud Vision API」などのAIの力を使ったクラウドサービスの APIを使った方が精度が高くなるが、機械で印字された文字を認識する程度であれば、Tesseractでも十分対応できることが分かった。
0 件のコメント:
コメントを投稿