目的
python + Tesseractによる画像処理をOCRで試し、使い勝手を調査します。
google ドライブのOCRを使用した場合、画像内の文字認識がかなりの高精度で判断でき、便利なことが分かりました。
ただ、不便なこともいくつかありました。
・複数の画像の処理をする場合、手作業に時間がかる。
・文字認識までに時間がかかる。
・余計なスペースが入る。
OCRとは
OCRは、Optical Character Reader の略で、画像データの文字部分を認識し、デジタルの文字データに変換する光学文字認識機能のことです。例えば、jpgやpngなどの画像データの拡張子ファイルから文字部分を取り出して、書かれている文字をテキストデータにできるようなイメージです。
環境
Python version:3.9.7
OS: windows 10.0
Anaconda:conda 4.11.0
インストール
TesseractとPyOCRをインストールします。
Tesseract
- Tesseractをここからダウンロードします。
インストール時の注意点は、「Choose Components」画面が表示まで進めたとき、2つ作業があります。
①「Additional script data(download)」を展開し、「Japanese script」と「Japanese vertical script」にチェックを入れる。
②「Additional language data(download)」を展開し、「Japanese」と「Japanese(Vertical)」にチェックを入れます。
pyocr
pyocrをインストールする。
pip install pyocr
文字認識の確認
適当に英語が記載されているファイルを用い、文字認識を確認します。
私は、画像ファイルをtest.png
として試しています。
from PIL import Image
import pyocr
# tesseractのpath
pyocr.tesseract.TESSERACT_CMD = r'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
tools = pyocr.get_available_tools()
tool = tools[0]
# 画像の文字を読み込む
txt = tool.image_to_string(Image.open('test.png'), lang="eng")
print(txt) # 「Test Message」が出力される
試した画像ファイルでは、英語の文字認識はうまくできました。
日本語での文字認識
デフォルトは、英語に設定されています。日本語にするには上記ファイルのeng
からjpn
に変更すると行えます。
実行してみましたが、文字認識の結果がいまいちだったので、機械学習データの変更をしてみました。
ファイルの配置先は、C:\Program Files\Tesseract-OCR\tessdata
に入れます。
【tessdata_best/jpn.traineddata】
https://github.com/tesseract-ocr/tessdata_best/blob/master/jpn.traineddata
【tessdata_best/jpn_vert.traineddata】
https://github.com/tesseract-ocr/tessdata_best/blob/master/jpn_vert.traineddata
結果は、こんな感じでうまく文字を認識できませんでした。もう少し、工夫する必要があるようです。
結果
現時点では、google ドライブのOCRを使用し、文字認識をした方が精度高く認識できそうです。
簡単に文字認識できる方法ないかな。。。
追記 Vision APIが使えそうかも。。
リンク
今回、下記リンクを参考にさせていただきました。
PythonとOCRエンジンで画像から文字を認識する
Python+Tesseractによる画像処理でOCRを試してみた!