tesseractでOCR@Windows7


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

tesseract

OCRエンジンのオープンソース.
https://github.com/tesseract-ocr/tesseract

tesseractのインストール

Windows7で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

画像

結果

result.txt
何言つてんだよ! !
その崖っぷちが最髙のチヤンスなんだぜ ! !

まつおかしゅうぞう

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

pyocr

tesseractをpythonから使えるようにしたラッパー.
https://gitlab.gnome.org/World/OpenPaperwork/pyocr

pyocrのインストール

環境はanaconda@windows7.
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で検証する.

test.py
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を使ってみる

img_to_txt.py
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

画像

結果

restult2.txt
ー番になるつていつたよな?
日本ーなるつつつたよな!
ぬるま湯なんかつかつてんじゃねぇよお前! !

まつおかしゆうぞう

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

今後

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