2コマンドで簡単インストール!AnacondaでPython + Tesseractの環境を作る

2022年5月6日金曜日

Anaconda Python

t f B! P L

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機能を試してみよう。

enter image description here

先ほどのコードに続けて、以下のコード書く。日本語を含む文字を認識する時は lang="jpn" とするのがポイントである。(英語の場合は eng

txt = tool.image_to_string(
    Image.open('./SAMPLE_IMAGE.png'),
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )

実行結果は次のとおり。うん、素晴らしい漢字もしっかり認識されており素晴らしい!

隣の客は
よく柿食う客だ

認識した文字の周りに矩形を描画

builderLineBoxBuilder または 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()

【実行結果】
enter image description here

手書き文字の認識

次に手書き文字の認識を試してみよう。

こんな感じの手書き文字の画像を用意した。

enter image description here

上で書いたコードで実行した結果は次のとおり。

【実行結果】

る          ii に    1  j     -
         9     EE
   3      3       EPS    上      ロ    5   9     =
    PT       で       "     av         向叶』    本
ie    Li                                    人   ーー

オーノー。写真が暗すぎたせいか、全然文字が認識されず、意味不明な結果になってしまいました。

まとめ

Anaconda環境にTesseractと Pyocrをインストールして、文字認識をするサンプルを紹介した。

手書きの文字などは、「Google Cloud Vision API」などのAIの力を使ったクラウドサービスの APIを使った方が精度が高くなるが、機械で印字された文字を認識する程度であれば、Tesseractでも十分対応できることが分かった。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ