今回の記事はTesseractOCRのVer4.0でLSTMが搭載され変わった点についてご紹介していきます。Tesseractに関して興味がある方は是非参考にして見てください。
TesseractOCR Ver4.0の変化
まず最も変化した点はOCR出力結果の精度です。かなり良くなっております。3系では通常のtextを画面キャプチャしたものですとかなり得意な形でなければ4系では認識できています。3系では完璧とは言えない程度。ここら辺の違いを詳しく見たい方は下記記事内に検証した記事がありますのでそちらをご確認ください。
ではなぜこの様な違いが出てくるのかと言うと使用しているエンジンの違いがあります。3系ではおそらくパターンマッチを行なっているものとどこかで聞いたことがあるのですが、4系では、LSTMベースのニューラルネットを使用しているそうです。
LSTMとは何か気になる方もいると思いますので簡単にかきます。
大体ネットの記事では難しい図を使用しているのですが、できるだけ簡単に完結に説明します。
LSTMとは?
長・短期記憶英「Long short-term memory」これを略しています。
この言葉の意味は置いておき下記に概念を記載します。
例えば日本語で「私」と言う言葉があります。その言葉の次に来る言葉はある程度制限できますよね?
「私」+「は〜」「も〜」など
間違っても「私」+「ん」「く」などは来ないですよね通常は。
この様に「私」と言うインプットの前後(例では後ろのみですが)の要素も「私」という言語を認識する上でヒントになってくると言う物がLSTMです。
使用箇所は主に自然言語(音声、文章)の認識処理などですね。
通常のCNNが下記の様な図になるところを右図の様にしてニューラルネットを構築しているのがLSTMニューラネットです。
TesseractOCRVer 4.0.0 とVer 4.1.1 の違い
Tesseract OCRの3系では便利な文字制限や文字除外という機能「ホワイトリスト」「ブラックリスト」がありました。
しかしTesseractOCR4.0.0ではその機能が使用できませんでした。
理由としてLSTM特有の「RecodeBeamSearch()」クラスが邪魔しており、「get_enabled()」が作動していない様です。こちらC++で記述されている様なので自力でソース改変を行えば使用できる様ですが私はC++もCもよくわかっていないので断念です。
将来的なアプローチとして4.1.1がリリースされるとこのエラーは解消された様です。
しかし、まだ4.1.1はWindowsインストーラーにはなくソースコード からbuildする必要がある様です。
まあそこまで難しくありません。
下記記事では4.1..1のTesseractOCRをDockerのUbuntuにインストールする記事を記載しております。
環境構築を行う方は是非下記記事を参考にしてください。
「DockerのPython環境でTeseractOCRを利用して文字認識」
4.1.1では問題なく「ホワイトリスト」「ブラックリスト」を使用できることを確認しました。
また上記の文字制限は結果出力の精度向上にも非常に優位性があります。
では、今回の記事は以上です。Tesseract OCRをPythonで使用している記事や環境構築など割とたくさん記事を書いているので関連記事も見てください。
コメント