週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

Python初心者がOCR【環境構築:Anaconda】


pythonOCRをするにはpyocrというモジュールを使用可能にする必要があります。
私はAnacondaというPythonパッケージを利用しています。
インストール方法は下記記事
www.python.jp

AnacondaをインストールするとAnaconda-Navigatorというものが出てきます
そこの左側にある「environments」をクリックすると
f:id:ml_begin:20180522221919p:plain

モジュールをインストールすることができます。
下画像は、すでにインストールされたモジュールが表示されています。

f:id:ml_begin:20180522222750p:plain

PythonOCRをするのに便利なモジュールとして「pyocr」というものがあります。
しかし、anacondaには入っていません。

その場合の追加方法について書きます。

コマンドラインにて下記コマンドを入力

$source activate <anacondaで作成した環境名>
$pip install pyocr

これで終わり。

※作成した環境名は下記コマンドでわかります。

$ conda info --envs

「*」マークがついているのが環境名です。

準備ができたので次回はOCRで文字認識やってみます。
2018.05.23
まだ準備完了しておりません!
tesseractをダウンロードし、pytesseractもダウンロード
したのですが、まだうまく動きません。
しばしお待ちを。。

2018.05.24
無事、OCRできるようになりました。
上記のコマンドを入力した後、

$brew install tesseract
$pip install pytesseract

これでとりあえずOCRはできます。
これでエラーが出た場合は、tesseractがAnaconda-spyderが読み込むライブラリの場所と
別の場所にある可能性があるのでtesseractの場所を下記コマンドで探索

$which tesseract

ディレクトリを移動して、anacondaディレクトリ/bin 下に移動させます

$cp tesseract /anaconda3/bin/

これでできるはずです。

試しに、
f:id:ml_begin:20180524222722j:plain
この画像から文字を読み込んでみます。

import pytesseract
from PIL import Image

url_img = 'image.jpeg'
img = Image.open(url_img)
text = pytesseract.image_to_string(img, lang="eng")
print(text)

結果

Manama:
~, g Rfibwsau

何かしら読み取ったようです。今回の結果が英語で出力されているのは、

ext = pytesseract.image_to_string(img, lang="eng")
lang="eng"

で指定しているからです。
ここを"jpn"に変えると、

lang="jpn"

こんなエラーが出てきます。(でてこなかったらこれより先は無視してください)

TesseractError: (1, 'Tesseract Open Source OCR Engine v3.04.01 with Leptonica Error opening data file /~~~/tesseract/3.04.01_2/share/tessdata/jpn.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory. Failed loading language \'jpn\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')

このエラー文には

/~~~/tesseract/3.04.01_2/share/tessdata/の
jpn.traineddataを参照していますが、ありません。

と書いてあるので、jpn.traineddataをここに置く必要があります。
現在の状況では、そこには

eng.traineddata

英語のデータしか入っていないことが分かります。
ですので、日本語のデータをダウンロードしてきます。
github.com
このダウンロードしたファイルをtessdataの下に移動させます。

eng.traineddata   jpn.traineddata

これでlang="jpn"に変更し、実行します。
重すぎるので日本語については、次の機会に改善します。

なので今回はlang="eng"でお試し。
お試し画像は
f:id:ml_begin:20180524231805p:plain
実行します。

--結果--
Abcdefg hijklmn

参考サイト
https://qiita.com/yotayokuto/items/c55bfa2b892beddc488eqiita.com