目的
pyOCRを用いて、カード中の説明文をテキスト化する際の備忘録です
準備
- pyOCR、Tesseract、jpn.traineddataをインストール
Mac環境でpyOCRで画像データをテキスト化する
PyOCR インストール
$ sudo pip install pyocr
>
>OCRエンジン部である Tesseract をインストール
>
>```
$ brew install tesseract
$ ls /usr/local/Cellar/tesseract/4.1.0/share/tessdata/
jpn.traineddataを取得
$ wget https://github.com/tesseract-ocr/tessdata/raw/4.00/jpn.traineddata
$ mv jpn.traineddata /usr/local/Cellar/tesseract/4.1.0/share/tessdata/
- カード
(例)カードは以下を使用させて頂きます。
引用:[遊戯王デュエルリンクス攻略](https://www.google.com/url?sa=i&url=https%3A%2F%2Fkamigame.jp%2F%25E9%2581%258A%25E6%2588%25AF%25E7%258E%258B%25E3%2583%2587%25E3%2583%25A5%25E3%2582%25A8%25E3%2583%25AB%25E3%2583%25AA%25E3%2583%25B3%25E3%2582%25AF%25E3%2582%25B9%2F%25E3%2582%25AB%25E3%2583%25BC%25E3%2583%2589%2F%25E9%259D%2592%25E7%259C%25BC%25E3%2581%25AE%25E7%2599%25BD%25E9%25BE%258D.html&psig=AOvVaw3wIPO8FpnvpxrtFSCtCIN2&ust=1587370256244000&source=images&cd=vfe&ved=0CA0QjhxqFwoTCPiXxpiF9OgCFQAAAAAdAAAAABAD)
![card1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/8f50d346-efbd-5f03-0021-4e59f56d5df1.png)
# コード
```py:sample.py
from PIL import Image
import sys
sys.path.append('/path/to/dir')
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()))
langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
txt = tool.image_to_string(
Image.open('card.png'),
lang='jpn',
builder=pyocr.builders.TextBuilder()
)
print(txt)
テスト
$ python sample.py
Will use tool 'Tesseract (sh)'
Available languages: eng, jpn, jpn_vert, osd, snum
士 い 攻 繁 カ を 誇 る 侵 設 の E ラ ゴ ン 。 ど ん な 祖 子 で
も 物 碑 す る 、 そ の 碇 壊 カ は 計 知 れ な い 。
備考
どうすればより高い精度で検出できるのだろう。
CodingError対策
問題:
OCRの結果が出力されない
対策:
画像中の文字が小さくて解析できていない可能性があります。
画像サイズを大きくすると解析できました。
(もしくは、他に必要な前処理があれば実行すると良い。例:背景ノイズ除去)