Anacondaだけで環境を構築して、Python+OCRをやってみる

## 背景
Anaconda + python + tesseract で文字認識をしたみた。
tesseractがHomeBrewやMacPortを使ったりする方法しかネット上になかったため、
今回はAnacondaだけで、インストールしてやってみた方法を残します。

## 環境
MacOS Mojave ver10.14.4
Anaconda Navigator 1.9.7
　※Anacondaのインストールは、[こちら](https://qiita.com/satoshi-iwaki/items/e431b4182e50a2918a17)を参考にいたしました
JupiterNotebook 5.4.0
OpenCV 3.4.2

## 事前準備
こちらの記事を参考にやってみました。
https://qiita.com/it__ssei/items/fd804dcb10997566593b
・tesseractのインストール
・pyocrのインストール
が必要とのこと。まずはやってみましょう！

### OCRツール（tesseract）概要
PythonでOCRで調べると必ず、こいつの存在が出てくるメジャーツール。
元々は米Hewlett-Packardが開発していたOCRツールでお蔵入りしていたものを
Googleが引き取って、公開しているツールのようです。（ありがたや！）

### OCRツール（tesseract）インストール
まずは、[公式ページのインストール方法](https://github.com/tesseract-ocr/tesseract/wiki)を見ると、
Macの場合は、HomeBrew/MacPortでインストールと書かれています。
じゃあ、これらをインストールするための方法を調べると、まずはXcodeをインストールする必要があると。。。
手間が多いな＆Macの容量が無くてXcode入れられない。。。
https://qiita.com/pypypyo14/items/4bf3b8bd511b6e93c9f9

ということで、Anacondaだけで、できないかと調べてみたわけです。
すると、あるじゃないですか！Anacondaでインストールできる環境が！
https://anaconda.org/search?q=tesseract
こちらはAnacondaが標準で提供していないツールを有志の方がAnacondaで使えるように
公開してくれているという涙が出るほど便利なサイトになります。
例えば、今回のtesseractで検索すると、いくつか公開してくれています！
（本当に感謝です！！）
![スクリーンショット 2019-05-11 22.25.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/82717154-83b7-998b-f882-abd879398973.png)

このページの、conda-forge/tesseract を開いてみると、
Anacondaにインストールするためには、
conda install -c conda-forge tesseract
を実行すれば良いと書いてあります。（なるほど）
![スクリーンショット 2019-05-11 22.31.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/c182d685-fd45-15b7-4e50-a16813868740.png)


感謝を胸に自分のAnacondaにインストールしてみましょう。
まずは、AnacondaNavigatorの
Enviroments→（自分の使う仮想環境）→矢印をクリック→ open terminal を開く
![スクリーンショット 2019-05-11 22.27.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/2a1643e2-f9aa-abb9-569e-2160cef29bbf.png)

コンソール画面が開いたら、下記を打ち込みます！
途中、実行してよいか？（y/n?）と聞かれますが、迷わず y+Enter を押しましょう！

```python
conda install -c conda-forge tesseract
```

Errorが出なければ、OK。インストールされているはずです。
一応、下記コマンドで、tesseractが入っているかを確認しましょう
Anacondaに入っているモジュールを一覧表示してくれます。

```python
conda list
```

### pyocr インストール
この調子で、pyocrもAnacondaでインストールだ！と思ったら、
pyocrは残念ながら、windowsとLinux verしかないみたい。（筆者はMac）
https://anaconda.org/search?q=pyocr
ということで、今回は、pipで入れました。
※pip：別のパッケージ管理ツール
※widows/Linuxユーザの方は、condaで入れてみても良いかも！

```python
pip install pyocr
```

## モジュールの動作確認
さて、ここまでで事前準備を終えることができたので、
いよいよOCRに挑戦です！とその前に、モジュールが動作するかを確認しましょう。
こちらの記事を参考にやってみました
https://qiita.com/it__ssei/items/fd804dcb10997566593b

### pyocrからtesseractを呼び出す
まずは、公式コードで、確認

```python
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)
# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'

langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = langs[0]
print("Will use lang '%s'" % (lang))
# Ex: Will use lang 'fra'
# Note that languages are NOT sorted in any way. Please refer
# to the system locale settings for the default language
# to use.
```

```python:実行結果
Will use tool 'Tesseract (sh)'
Available languages: afr, amh, ara, asm, aze, aze_cyrl, bel, ben, bod, bos, bre, bul, cat, ceb, ces, chi_sim, chi_sim_vert, chi_tra, chi_tra_vert, chr, cos, cym, dan, deu, div, dzo, ell, eng, enm, epo, est, eus, fao, fas, fil, fin, fra, frk, frm, fry, gla, gle, glg, grc, guj, hat, heb, hin, hrv, hun, hye, iku, ind, isl, ita, ita_old, jav, jpn, jpn_vert, kan, kat, kat_old, kaz, khm, kir, kmr, kor, kor_vert, lao, lat, lav, lit, ltz, mal, mar, mkd, mlt, mon, mri, msa, mya, nep, nld, nor, oci, ori, osd, pan, pol, por, pus, que, ron, rus, san, script/Arabic, script/Armenian, script/Bengali, script/Canadian_Aboriginal, script/Cherokee, script/Cyrillic, script/Devanagari, script/Ethiopic, script/Fraktur, script/Georgian, script/Greek, script/Gujarati, script/Gurmukhi, script/HanS, script/HanS_vert, script/HanT, script/HanT_vert, script/Hangul, script/Hangul_vert, script/Hebrew, script/Japanese, script/Japanese_vert, script/Kannada, script/Khmer, script/Lao, script/Latin, script/Malayalam, script/Myanmar, script/Oriya, script/Sinhala, script/Syriac, script/Tamil, script/Telugu, script/Thaana, script/Thai, script/Tibetan, script/Vietnamese, sin, slk, slv, snd, spa, spa_old, sqi, srp, srp_latn, sun, swa, swe, syr, tam, tat, tel, tgk, tha, tir, ton, tur, uig, ukr, urd, uzb, uzb_cyrl, vie, yid, yor
Will use lang 'afr'
```
呼び出すと、上のような実行結果がでてきました。
使える言語はものすごく含まれています。
もちろん、eng,jpnがあるので、英語／日本語はいけそうですね。

## 文字認識（OCR）
さて、本番です！！
英語と日本語の２パターンをやってみましょう。

### 英語のOCR

| 読み込ませたい画像       | 
|:-----------------|

![en.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/722c952f-eba2-9b17-32ae-276457d72acb.png)

```python
txt = tool.image_to_string(
    Image.open('./imagesFolder/en/en.png'),
    lang="eng",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )
# txt is a Python string
```
言語設定を「eng」に設定するのがポイントですね。
文字として認識されました！！やったぜ！
![スクリーンショット 2019-05-11 23.09.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/00824124-a878-977d-80a7-3eec7788f10c.png)


### 日本語のOCR
| 読み込ませたい画像       | 
|:-----------------|

![iroha.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/e279c21b-231b-c03f-a4a9-3e1224290294.png)

```python
txt = tool.image_to_string(
    Image.open('./imagesFolder/iroha.png'),
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )
# txt is a Python string
```
言語設定を「jpn」に設定するのがポイントですね。
文字として認識されました！！やったぜ！
![スクリーンショット 2019-05-11 23.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288322/ca3890c9-23bf-8c2a-f69d-5441df791d5b.png)


## 終わりに
以上、Anacondaだけで環境を構築して、Python+OCRをやってみました！
思った以上に、文字が読み取れて満足です。
これを使って、会社の書類の自動読み取り処理で業務を効率化していければと思います！

## 参考
PythonでOCR
https://qiita.com/it__ssei/items/fd804dcb10997566593b