【Windows】tesseractでOCR

OCR

OCR に興味があったので試してみました。

スポンサーリンク

tesseract

OCRエンジンのオープンソースです。

GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)
Tesseract Open Source OCR Engine (main repository) - GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

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 を置きます。

環境変数の設定

変数
PathC:\Program Files\Tesseract-OCR
TESSDATA_PREFIXC:\Program Files\Tesseract-OCR\tessdata

tesseract を試す

コマンドプロンプトで tesseract を実行します。
sample.png を tesseract でテキストにしてみます。

tesseract sample.png result -l jpn
何言つてんだよ! !
その崖っぷちが最髙のチヤンスなんだぜ ! !

まつおかしゅうぞう

ちゃんとテキスト化できました(笑)

pyocr

tesseract を python から使えるようにしたラッパーです。

World / OpenPaperwork / pyocr · GitLab
A Python wrapper for Tesseract and Cuneiform -

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
ー番になるつていつたよな?
日本ーなるつつつたよな!
ぬるま湯なんかつかつてんじゃねぇよお前! !

まつおかしゆうぞう

アツイ言葉が画像から読み取れました(笑)

今後

とりあえず軽く試してみて思った以上に使えそうなことが分かりました。
次は手書きの文字でもちゃんと認識できるのか試したいです。

タイトルとURLをコピーしました