tesseract-ocr でOCR
tesseract-ocr でOCR
tesseract-ocr と pyocr を使ってみたのでメモ.
環境
-
Windows 10
-
conda 4.2.12
-
pdftoppm
-
tesseract
今回は,「tesseract」 を使った. tesseractはOCRエンジンで, コマンドプロンプトから利用できる. pythonのモジュールを使えば,pythonからも使える.
tesseract-ocr のインストール
今回はWindowsなのでインストーラ tesseract-ocr-setup-3.02.02.exe
をDLしてインストールした.インストーラは,Home · tesseract-ocr/tesseract Wiki · GitHub のold version3.02をインストールした.どうやら公式のインストーラの開発は止まっているらしい.
インストーラを叩いて従っていけば,特に問題なくインストールできた. 学習データを含んで要求容量は,Space required 59.5MB であった.
インストールできたか確認
コマンドプロンプトから利用できるので,以下のコマンドでバージョン確認ができる.
> tesseract -v
tesseract 3.02
leptonica-1.68 (Mar 14 2011, 10:43:03) [MSC v.1500 LIB Release 32 bit]
libgif 4.1.6 : libjpeg 8c : libpng 1.4.3 : libtiff 3.9.4 : zlib 1.2.5
サポートしている画像形式
PNMに対応しているので,ppmファイルも扱える. GIF はサポートしていないよう・
tesseractをコマンドプロンプトからの利用
コマンドプロンプトから利用する.
まず画像を作っておく.pdfの場合,ppmファイルにしておくのがいい.
以下のコマンド,画像ファイルを指定してテキストファイルへ文字列が出力される.
> tesseract sample.png sample
この場合,sample.txt
が新しく作られ,そこへ出力される.結果は,
0123456789
abcdefghij klmnopq rstuvwxyz
間にスペースが入るもののこの例ではうまく認識できた.
また,ページの形式をオプション-psm
指定して,精度を変えることができる.
-
0 = Orientation and script detection (OSD) only.
-
1 = Automatic page segmentation with OSD.
-
- 3 = Fully automatic page segmentation, but no OSD. (Default)
-
4 = Assume a single column of text of variable sizes.
-
5 = Assume a single uniform block of vertically aligned text.
-
6 = Assume a single uniform block of text.
-
7 = Treat the image as a single text line.
-
8 = Treat the image as a single word.
-
9 = Treat the image as a single word in a circle.
-
10 = Treat the image as a single character.
pythonからの利用
コマンドプロンプトから利用できたが,「pyocr」というモジュールをimportすることでpythonからも利用できる.pipからインストールできる.
pip install pyocr
使い方は,githubに載っている. その手順を載せる.
準備
from PIL import Image
import sys
import pyocr
import pyocr.builders
import matplotlib.pyplot as plt
tools = pyocr.get_available_tools()
tools
> [<module 'pyocr.tesseract' from 'C:\\Miniconda3\\lib\\site-packages\\pyocr\\tesseract.py'>]
# OCRツールをインストールされているか確認
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())) # インストールされているOCRツールを表示
> Will use tool 'Tesseract (sh)'
# そのOCRツールで使用できる言語を確認
langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
> Available languages: eng, osd
# 使用する言語を選択
lang = langs[0]
print("Will use lang '%s'" % (lang))
> Will use lang 'eng'
画像からテキストへ
画像の読み込みにはPIL モジュールを使う.
im1 = Image.open('image/sample.ppm')
pyocr では,-psm
オプションは `tesseract_layout` に指定する.デフォルトは3
.
txt = tool.image_to_string(
im1,
lang=lang,
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print(txt)
txtオブジェクトに,OCRで出力された文字列が入る.
参考リンク