OCR に興味があったので試してみました。
tesseract
OCRエンジンのオープンソースです。
tesseractのインストール
Windows で tesseract を使えるようにしました。
まず、https://github.com/parrot-office/tesseract/releases/tag/3.5.1 から tesseract-Win64.zip をダウンロードします。
ダウンロードしたらディレクトリ(C:\Program Files\Tesseract-OCR)を作成して、zip ファイルを C:\Program Files\Tesseract-OCR に展開します。
辞書データの準備
https://github.com/tesseract-ocr/tesseract/wiki/Data-Files の eng.traineddata、jpn.traineddata をダウンロードします。
ディレクトリ(C:\Program Files\Tesseract-OCR\tessdata)を作成して eng.traineddata、jpn.traineddata を置きます。
環境変数の設定
変数 | 値 |
---|---|
Path | C:\Program Files\Tesseract-OCR |
TESSDATA_PREFIX | C:\Program Files\Tesseract-OCR\tessdata |
tesseract を試す
コマンドプロンプトで tesseract を実行します。
sample.png を tesseract でテキストにしてみます。
tesseract sample.png result -l jpn
何言つてんだよ! !
その崖っぷちが最髙のチヤンスなんだぜ ! !
まつおかしゅうぞう
ちゃんとテキスト化できました(笑)
pyocr
tesseract を python から使えるようにしたラッパーです。
pyocr のインストール
環境は anaconda@windows。
pyocr 用に仮想環境を作って pyocr をインストールします。
> conda create -n ocr python=3.6
> conda info -e
# conda environments:
#
base * c:\tools\Anaconda3
ocr c:\tools\Anaconda3\envs\ocr
> activate ocr
(ocr)> pip install pyocr
pyocr から tesseract を呼び出せるか確認
https://gitlab.gnome.org/World/OpenPaperwork/pyocr の Usage Initialization で検証します。
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.
(ocr)> python test.py
Will use tool 'Tesseract (sh)'
Available languages: eng, jpn
Will use lang 'eng'
tesseract が正しく認識されているようです。
pyocr を使ってみる
from PIL import Image
import sys
sys.path.append('/path/to/dir')
import codecs
import pyocr
import pyocr.builders
tool = pyocr.get_available_tools()[0]
builder = pyocr.builders.TextBuilder()
# 画像から文字列を取得する
txt = tool.image_to_string(
Image.open('sample2.png'),
lang='jpn',
builder=builder
)
# 文字列を書き出す
with codecs.open("result2.txt", 'w', encoding='utf-8') as file_descriptor:
builder.write_file(file_descriptor, txt)
(ocr)> python img_to_txt.py
ー番になるつていつたよな?
日本ーなるつつつたよな!
ぬるま湯なんかつかつてんじゃねぇよお前! !
まつおかしゆうぞう
アツイ言葉が画像から読み取れました(笑)
今後
とりあえず軽く試してみて思った以上に使えそうなことが分かりました。
次は手書きの文字でもちゃんと認識できるのか試したいです。