はしくれエンジニアもどきのメモ

情報・Web系技術・Englishの勉強メモ・備忘録です。

tesseract-ocr でOCR

tesseract-ocr でOCR

tesseract-ocr と pyocr を使ってみたのでメモ.

環境

  • Windows 10

    • conda 4.2.12

    • pdftoppm

tesseract

今回は,「tesseract」 を使った. tesseractはOCRエンジンで, コマンドプロンプトから利用できる. pythonのモジュールを使えば,pythonからも使える.

github.com

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 はサポートしていないよう・

  • BMP

  • PNM

  • PNG

  • JFIF

  • JPEG

  • TIFF

Tesseract-ocr - COPTR

tesseractをコマンドプロンプトからの利用

コマンドプロンプトから利用する.

まず画像を作っておく.pdfの場合,ppmファイルにしておくのがいい. 

cartman0.hatenablog.com

以下のコマンド,画像ファイルを指定してテキストファイルへ文字列が出力される.


> tesseract sample.png sample
  
この場合,sample.txt が新しく作られ,そこへ出力される.結果は,

0123456789
abcdefghij klmnopq rstuvwxyz
間にスペースが入るもののこの例ではうまく認識できた.

また,ページの形式をオプション-psm指定して,精度を変えることができる.

  • 0 = Orientation and script detection (OSD) only.

  • 1 = Automatic page segmentation with OSD.

  • 2 = Automatic page segmentation, but no OSD, or OCR

  • - 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で出力された文字列が入る.