読者です 読者をやめる 読者になる 読者になる

ruby-tesseract を使う

Ruby OCR

このブログ、概して.NET Frameworkべったりでしたが、実はわたくし、Ruby歴の方が長いです。
初めてのRubyな記事を書きます。

フリーのOCRライブラリ「tesseract」をRubyから触れる「ruby-tesseract」の紹介です。環境はLinux(Debian/Ubuntu)とします。

https://github.com/meh/ruby-tesseract-ocr

Tesseractの導入

抜けがあるかもしれません。

$ sudo apt-get update
$ sudo apt-get install libtesseract3 libtesseract-dev tesseract-ocr 

言語は必要に応じて。apt-cache search tesseract で調べると、いろいろな言語がずらずら出てきます。

$ sudo apt-get install tesseract-ocr-eng tesseract-ocr-jpn

ごく簡単な動作確認。

$ tesseract -v
tesseract 3.02

ruby-tesseractの導入

$ sudo gem install tesseract-ocr

(ここで何か怒られたような気がしますが、思い出せない...)
Ruby-FFIを使っていて、gemで入れるときにネイティブコードのビルドが走ります。

お試し

以下は、認識結果の文字列を出力します。

require 'rubygems'
require 'tesseract-ocr'

engine = Tesseract::Engine.new{ |engine|
    engine.language = :eng
}

puts engine.text_for('hoge.tif')


以下は、各シンボル(≒文字)の情報を出力します。

require 'rubygems'
require 'tesseract-ocr'

engine = Tesseract::Engine.new{ |engine|
    engine.language = :jpn
}

engine.symbols_for('hoge.tif').each_with_index{ |sym, i|
    text = sym.text
    b = sym.bounding_box
    printf("%d | text=%s pos=(x:%d y:%d w:%d h:%d)\n", 
        i, text, b.x, b.y, b.width, b.height)
}

「symbol」のところを、「block」「paragraph」「line」「word」と変えれば、文字単位以外にも行単位・段落単位等での要素の情報が得られます。

得られる情報の種類については、冒頭で挙げたgithubを参考にしましょう。画像・向き・認識の確からしさ等の情報も得られます。その他の使い方も、githubのテストコードから得られるところが多いです。