JavaでOCR
今日はJavaでOCRを用いて画像から文字列を取得し、先日インストールしたMeCabを用いて形態素解析してみたいと思います。
OCR用ライブラリは、下記のライブラリを使用させていただきました。
Asprise Java OCR SDK - royalty-free API library with source code examples converting images to word or searchable PDF by extracting text
環境
CentOS 5.5 final (VMware Fusion)
jdk-1.6.0_17
OCR-Javaライブラリを取得
まずはOCR用ライブラリを取得します。
最近では、検索さえ出来れば偉人達が作成した良ライブラリがすぐに見つかる良い時代になりました。w
ちなみにcompat-libstdc++-33.i386に関して、既にインストール済みのかたは必要ありません。
# yum install compat-libstdc++-33.i386 # mkdir /usr/local/src/asprise # cd /usr/local/src/asprise # wget http://download.asprise.net/software/ocr-v4/Asprise-OCR-Java-Linux_x86_32bit-4.0.zip
まずはサンプルを実行
OCR-Javaを展開すると、サンプルスクリプトが複数用意されていますので、何はともあれまずはサンプルが実行出来るかを確認します。
コンソール上に下記が出力されればOKです。
# unzip Asprise-OCR-Java-Linux_x86_32bit-4.0.zip # sh runDemo1.sh --- A general sample with both characters and barcodes --- Welcome to Asprise OCR v4.0 Demo! Trying to perform OCR on image: /usr/local/src/asprise/sample-images/ocr.gif ---- RESULTS: ------- === ASPRISE OCR SDK EVALUATION === 1) For licensing information, visit: http://asprise.com/product/ocr 2) This evaluation version replaces all recognized 'q' and 'x' occurrences with stars ('*'). [123456789012] Asprise OCR Speed. Accuracy.
画像からOCRで読み取った文字列をMeCabを使用して形態素解析してみる
それでは本日の本題です。まずはじめに、下記を参考にJavaからMeCabが使用出来る環境を用意してください。
JavaでMeCab - akiiiiiiiioの日記
環境が用意出来たら、次はJavaクラスを作成します。
# cd /home/akiiiiiiiio # vi OcrToMecab.java
今回は以下のようなクラスを作成しました。
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import com.asprise.util.ocr.OCR; import org.chasen.mecab.MeCab; import org.chasen.mecab.Tagger; import org.chasen.mecab.Node; public class OcrToMecab { static { try { System.loadLibrary("MeCab"); } catch (UnsatisfiedLinkError e) { System.exit(1); } } public static void main(String[] args) throws IOException { File file = new File(args[0]); BufferedImage img = ImageIO.read(file); String str = new OCR().recognizeEverything(img); System.out.println(new Tagger().parse(str)); } }
それではコンパイル、実行してみたいと思います。今回は、OCR-Javaライブラリのサンプル画像をそのまま引数に指定しています。
# javac -cp /usr/local/src/mecab-java-0.97/MeCab.jar:/usr/local/src/asprise/aspriseOCR.jar OcrToMecab.java # export LD_LIBRARY_PATH=/usr/local/src/mecab-java-0.97/:/usr/local/src/asprise/ # java -cp .:/usr/local/src/mecab-java-0.97/MeCab.jar:/usr/local/src/asprise/aspriseOCR.jar OcrToMecab \ > /usr/local/src/asprise/sample-images/ocr.gif = 記号,一般,*,*,*,*,=,=,=,, = 記号,一般,*,*,*,*,=,=,=,, = 記号,一般,*,*,*,*,=,=,=,, ASPRISE 名詞,固有名詞,組織,*,*,*,* O 記号,アルファベット,*,*,*,*,O,オー,オー,, C 記号,アルファベット,*,*,*,*,C,シー,シー,, R 記号,アルファベット,*,*,*,*,R,アール,アール,, SDK 名詞,固有名詞,組織,*,*,*,* EVALUATION 名詞,一般,*,*,*,*,* = 記号,一般,*,*,*,*,=,=,=,, = 記号,一般,*,*,*,*,=,=,=,, = 記号,一般,*,*,*,*,=,=,=,, 1 名詞,数,*,*,*,*,1,イチ,イチ,, ) 記号,括弧閉,*,*,*,*,")",")",")",, For 感動詞,*,*,*,*,*,* licensing 感動詞,*,*,*,*,*,* information 感動詞,*,*,*,*,*,* , 記号,読点,*,*,*,*,",",",",",",, visit 名詞,固有名詞,組織,*,*,*,* : 記号,一般,*,*,*,*,:,:,:,, http 名詞,固有名詞,組織,*,*,*,* : 記号,一般,*,*,*,*,:,:,:,, / 記号,一般,*,*,*,*,/,/,/,, / 記号,一般,*,*,*,*,/,/,/,, asprise 名詞,固有名詞,組織,*,*,*,* . 記号,句点,*,*,*,*,.,.,.,, com 名詞,固有名詞,組織,*,*,*,* / 記号,一般,*,*,*,*,/,/,/,, product 名詞,固有名詞,組織,*,*,*,* / 記号,一般,*,*,*,*,/,/,/,, ocr 名詞,固有名詞,組織,*,*,*,* 2 名詞,数,*,*,*,*,2,ニ,ニ,, ) 記号,括弧閉,*,*,*,*,")",")",")",, This 感動詞,*,*,*,*,*,* evaluation 感動詞,*,*,*,*,*,* version 感動詞,*,*,*,*,*,* replaces 感動詞,*,*,*,*,*,* all 感動詞,*,*,*,*,*,* recognized 感動詞,*,*,*,*,*,* ' 記号,一般,*,*,*,*,"'","'","'",, q 記号,アルファベット,*,*,*,*,q,キュー,キュー,, ' 記号,一般,*,*,*,*,"'","'","'",, and 名詞,固有名詞,組織,*,*,*,* ' 記号,一般,*,*,*,*,"'","'","'",, x 記号,アルファベット,*,*,*,*,x,エックス,エックス,, ' 記号,一般,*,*,*,*,"'","'","'",, occurrences 名詞,固有名詞,組織,*,*,*,* with 名詞,固有名詞,組織,*,*,*,* stars 名詞,一般,*,*,*,*,* ( 記号,括弧開,*,*,*,*,"(","(","(",, ' 記号,一般,*,*,*,*,"'","'","'",, * 記号,一般,*,*,*,*,*,*,*,, ' 記号,一般,*,*,*,*,"'","'","'",, ) 記号,括弧閉,*,*,*,*,")",")",")",, . 記号,句点,*,*,*,*,.,.,.,, [ 記号,括弧開,*,*,*,*,[,[,[,, 1 名詞,数,*,*,*,*,1,イチ,イチ,, 2 名詞,数,*,*,*,*,2,ニ,ニ,, 3 名詞,数,*,*,*,*,3,サン,サン,, 4 名詞,数,*,*,*,*,4,ヨン,ヨン,, 5 名詞,数,*,*,*,*,5,ゴ,ゴ,, 6 名詞,数,*,*,*,*,6,ロク,ロク,, 7 名詞,数,*,*,*,*,7,ナナ,ナナ,, 8 名詞,数,*,*,*,*,8,ハチ,ハチ,, 9 名詞,数,*,*,*,*,9,キュウ,キュー,, 0 名詞,数,*,*,*,*,0,ゼロ,ゼロ,, 1 名詞,数,*,*,*,*,1,イチ,イチ,, 2 名詞,数,*,*,*,*,2,ニ,ニ,, ] 記号,括弧閉,*,*,*,*,],],],, Asprise 名詞,固有名詞,組織,*,*,*,* OCR 名詞,固有名詞,組織,*,*,*,* Speed 名詞,一般,*,*,*,*,* . 記号,句点,*,*,*,*,.,.,.,, Accuracy 名詞,一般,*,*,*,*,* . 記号,句点,*,*,*,*,.,.,.,, EOS
つらつらと上記のように出力されれば今回の目的は完了です。
今回ご紹介したOCRライブラリを用いれば、画像の全文検索システムなんかもJavaのみで簡単に作成することが出来ると思います。
ただしOCR-Java付属のLICENSE-EVALUATION.txtにも記載がありますが、当ライブラリはあくまで個人の責任の範囲で使用されることをお勧めします。w