【windows】pythonで画像内の文字を読み取る方法
- 2018.09.16
- IT・プログラミング
- python

windows10+pythonで画像に記載された文字を読取る方法を調べ、いくつか躓いた点があったのでやり方を書き留めます。
anacondaは使用しておりません。
動作環境
OS:windows 10
Pythonのバージョン:3.6.5
使用する外部ライブラリ:pyocr(バージョン0.5.3)
使用するOCRの技術:tesseract(バージョン4.0.0-beta.4.20180912)
pyocrのインストール
まず最初に、コマンドプロンプトでpyocrをインストールします。
pip install pyocr
公式ドキュメント:World / OpenPaperwork / pyocr · GitLab
tesseractのインストール
次にOCRを行う「tesseract」のインストール。
Link:Home · tesseract-ocr/tesseract Wiki · GitHub
上記リンクのwindowsの箇所にある「Tesseract at UB Mannheim」のリンクから、自分の環境にあったインストーラーの実行ファイルをダウンロードします。
※私がダウンロードしたのは「tesseract-ocr-w64-setup-v4.0.0-beta.4.20180912.exe」
インストーラーの実行ファイルはすべてデフォルトの設定で行うと、CドライブのProgram Files (x86)の下に「Tesseract-OCR」がインストールされるようです。
しかし、私の場合は「C:\Users\ユーザー名\AppData\Local\Tesseract-OCR」にダウンロードしてあったので、もしProgram Files (x86)になければそちらを参照してみてください。
tesseractをpyocrで読み取る
次は「Tesseract-OCR」のフォルダ場所が分かったら、環境変数のPathに該当フォルダを追加します。
下記ソースコードがpyocrを用いてOCRツールが読み取れるかのサンプルコードになるので試してみてください。
from PIL import Image
import sys
import pyocr
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()))
langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = langs[0]
print("Will use lang '%s'" % (lang))
「No OCR tool found」が出たら、Tesseract-OCRの読み取りに失敗しています。
私の場合、環境変数にpathを追加したのですがうまく行かなかったため、コマンドプロンプト上で最初に下記コマンドを用いて一時的にpathを追加してからソースコードを実行することで、Tesseract-OCRの読み取りに成功しました。
set path=%path%;C:\Users\ユーザ名\AppData\Local\Tesseract-OCR
ソースコードを実行し、下記のように表示されたら成功です。
Will use tool 'Tesseract (sh)' Available languages: eng, osd Will use lang 'eng'
デフォルトだと英語を読み取ることが可能です。日本語を対象にしたい方は別途調べてみてください。
画像から文字を読み取るソースコード
先程記載したソースコードに、画像から文字を読み取る下記ソースコードを追加してみてください。
txt = tool.image_to_string(
Image.open('画像ファイル名'),
lang=lang,
builder=pyocr.builders.TextBuilder()
)
print( txt )
Image.openで「画像のファイル名.画像形式」を指定し、langで言語を指定。(この場合は”eng”)
builderで画像情報をテキストに変換です。
公式の情報をもとに上記コードを実行したのですが、私の場合はまたもやエラーコードが生じ、躓きました。
raise TesseractError(status, errors) pyocr.error.TesseractError: (1, b"Error, unknown command line argument '-psm'\r\n")
調べたところ、ライブラリのpyocrがインストールされている箇所「~\Python\Python36\Lib\site-packages\pyocr」の「tesseract.py」が原因でした。
「–psm」と書くべきところを、「-psm」と書いている箇所があったようです。
変更前
def psm_parameter():
"""Return the psm option string depending on the Tesseract version."""
version = get_version()
return "--psm" if version[0] > 3 else "-psm"
変更後
def psm_parameter():
"""Return the psm option string depending on the Tesseract version."""
version = get_version()
return "--psm" if version[0] > 3 else "--psm"
私の場合はこれで無事画像ファイルないの文字を読み取り、テキストを出力することに成功しました。
調べてみると、「builders.py」でも同じように-psmと書かれている箇所を修正する必要がある方もいたようです。
-
前の記事
TOEICスコアを半年で200点上げた時にやったこと 2018.08.17
-
次の記事
Mixed Reality ポータルがエラーで起動せず試行錯誤した後の解決策 2018.09.17