コンテンツへスキップ。

認識デバッグのためのViewerの使い方

はじめに

Tesseractには、セグメンテーションと認識を表示するための内部状態表示機能が組み込まれています。

ビルドとインストール

Viewerを実行するには、以下のコンポーネントが必要です。

パスにcurlが存在する場合は、make ScrollView.jarでこれらのjarファイルをtesseract/javaに自動的にダウンロードします。

これらのjarファイルはすべて同じディレクトリに配置する必要があります。Tesseractは、環境変数SCROLLVIEW_PATHまたは同名のコンパイラ定義を通じて、その場所を認識します。

Dmitri Silaevによる代替ダウンロードリンクは、http://www.4shared.com/zip/FnP8RSu0/tess_debug_3_02.htmlから入手できます。piccolo-1.2.jarpiccolox-1.2.jarScrollView.jarをダウンロードしたパッケージからC:\Tesseract-OCR\javaにコピーします。

Linuxの場合

Windowsの場合

ScrollView.jarのビルドプロセスは定義されていません。パッケージtesseract-2.04.exe.tar.gztesseract-ocr-3.02-win32-portable.ziptesseract-ocr-setup-3.02.02.exeに含まれています。piccolo-1.2.jarpiccolox-1.2.jarを同じ場所に(Tesseract-OCR/java)配置します。次に、SCROLLVIEW_PATH環境変数をjavaディレクトリを指すように設定します。

セグメンターデバッグモード

セグメンターのテストを実行するには、次のようにします。

tesseract phototest.tif test1 segdemo inter

次のような表示になります。

tesseract_debug

画像で見つかった単語は青い長方形で表されます。3つのメニューがあります。

MODESは、左クリックまたは選択の動作モードを設定します。DISPLAYは、ウィンドウに表示されるコンテンツを変更します。(即時ではありません) OTHERは、さまざまなグローバルアクションを提供します。エディター画像ウィンドウで右クリックすると、「新しい」構成変数の値を動的に変更できます。ただし、変更したいものによっては、多くの有用な変数が古いスタイルのもので、この方法では変更できません。いつか誰かが、すべての古いスタイルの変数を新しいものに更新してくれるでしょう。

メニューがかなり奇妙に見えることに注意してください。これは、このツールがもともと、文字にラベルを付け、各文字を構成する連結コンポーネントに関する情報などを詳細に記述した、グランドトゥルースファイルを作成する機能を提供するために設計されたためです。この機能のほとんどは冗長であり、10年以上使用されていません。宣伝されている機能の一部はプログラムを簡単にクラッシュさせる可能性がありますが、ここで説明されている機能は動作するはずです…

文字を表示するには、DISPLAY/Bounding Boxesの選択を解除し、DISPLAY/Polygonal Approxを選択してから、OTHER/Uniform displayを選択します。

ズームインするには、カーソルを単語の上に置き、マウスホイールを自分から2回または3回スクロールします。クリックするたびにサイズが2倍になります。ズームアウトするには、マウスホイールを自分の方へスクロールします。マウスホイールがない場合は…運が悪いかもしれません。この領域のJavaコードには、いくつかの作業が必要です。

次に、MODES/Recog wordsを選択し、単語をクリックします。「code」(2行目の2番目の単語)を選択すると、次のような表示になります。

Tesseractを起動したターミナルウィンドウにもテキストが表示される場合があります。

chop_word:
6.81 -2.16 : c [63 ]a 14.38 -4.56 : o [6f ]a 14.53 -4.61 : e [65 ]a 15.15 -4.81
: ¢ [a2 ]
chop_word:
3.98 -1.11 : 0 [30 ]0 8.37 -2.33 : o [6f ]a 10.94 -3.04 : c [63 ]a 14.43 -4.01 :
 ¤ [a4 ]
chop_word:
8.24 -1.77 : d [64 ]a
chop_word:
17.58 -4.26 : e [65 ]a 23.65 -5.73 : a [61 ]a
system words:
52.17 -5.73 : c [63 ]a  : o [6f ]a  : d [64 ]a  : a [61 ]a 45.49 -4.26 : c [63 ]
a  : o [6f ]a  : d [64 ]a  : e [65 ]a
permute_characters : 45.49 -4.26 : c [63 ]a  : o [6f ]a  : d [64 ]a  : e [65 ]a

system words:
52.17 -5.73 : c [63 ]a  : o [6f ]a  : d [64 ]a  : a [61 ]a 45.49 -4.26 : c [63 ]
a  : o [6f ]a  : d [64 ]a  : e [65 ]a
permute_characters : 45.49 -4.26 : c [63 ]a  : o [6f ]a  : d [64 ]a  : e [65 ]a

それぞれの意味:各chop_wordの後の行は、エディター画像ウィンドウに異なる色で表示された元の連結コンポーネントそれぞれの分類器の出力です。各分類器の結果は、評価、信頼度、文字列、その16進Unicode表現、およびそのctypeを示す文字で構成されます。評価は正の距離数値であり、アウトラインの長さでスケールされます。信頼度は、最も近いプロトタイプからの距離ですが、負の値であるため、0に近い数値よりも負の値の方が悪くなります。ctypeは、小文字の場合は「a」、大文字の場合は「A」、「x」はどちらでもない文字、「0」は数字です。ctypeがないということは、上記いずれでもないことを意味します。

最後のchop_wordの後にpermute_charactersがあります。これは、分類器の出力から単語文字列を作成する最初の試行を示しています。評価はすべての文字の評価の合計であり、信頼度はすべての文字の中で最悪のものです。

このケースにはありませんが、improve 1とimprove 2は、分割されたブロブの2つの半分と、対応するpermute_charactersになります。

ここで、セグメンテーションウィンドウをクリックします。dとeがすべて同じ色になり、対応する分類器の結果がターミナルに表示されます。これは、アソシエーターが異なる文字セグメンテーションを試行して、結果を改善できるかどうかを確認しているものです。

もう一度クリックすると、cとo、oとd、最後にcとoをdとeと同時に結合する実験を行います。

さらにクリックすると、単語のベースラインと平均線を含む最終的なセグメンテーションを示すFXDemoという新しいウィンドウが表示されます。

これで、エディターウィンドウをクリックできるようになります。Tesseractは再入可能ではないため、一度に複数の単語を認識することはできません。そのため、セグメンターが実行されている間は、別の単語の認識を開始できません ;-)

分類器デバッグモード

tesseract phototest.tif test1 matdemo inter

segdemoと同様に、文字を表示するには、DISPLAY/Bounding Boxesの選択を解除し、DISPLAY/Polygonal Approxを選択してから、OTHER/Uniform displayを選択します。

次に、MODES/Recog blobsを選択し、文字をクリックします。「code」(2行目の2番目の単語)の「e」を選択すると、次のような表示になります(文字を中央に表示するには、ウィンドウをスクロールする必要がある場合があります)。

そして、このテキストがターミナルに表示されます。

AD Matches =  e [65 ]a(8) 21.83  a [61 ]a(16) 29.38
Debugging class = e  (All Templates) ...
Best built-in template match is config 24 (21.0) (cn=0)
No AD templates for class 8 = e

Integer Matcher -------------------------------------------
Match Complete --------------------------------------------
Left-click in IntegerMatch Window to continue or right click to debug...

ここで右クリックすると、3つのアイテムを含む小さなポップアップメニューが表示されます。理論的には、適応型、静的、または両方のテンプレートを使用してデバッグするように要求できます。異なるメニューアイテムを区別するためのコードはまだ記述されておらず、記述したとしても、残りのコードの状態では何の違いもありません。pass1はまだ実行されていないため、適応型テンプレートはありません。いつか、pass1またはpass2で処理される単語を観察するかどうかを選択できるように修正されます。そうすれば、意味が通じるようになります。

ランダムなメニューアイテムをクリックすると、デバッグするクラスを入力するように求めるダイアログテキストボックスが表示されます。これは、文字クラスの文字列を要求するもので、ラテン語のほとんどでは単なる文字ですが、カンナダ語などの他の言語では、文字のシーケンス全体になる可能性があります。非言語話者が非キーボード文字を入力しやすくするために、このボックスは0xddddを4桁の16進Unicodeコードとして受け入れます。

今回は、小文字のcを1つ入力してEnterキーを押します(OKをクリックしても動作しないようです!)すると、ターミナルウィンドウに次のような表示がされます。

Debugging class = 34 = c  (All Templates) ...
Best built-in template match is config  4 (22.0) (cn=1)
No AD templates for class 34 = c

Integer Matcher -------------------------------------------
Match Complete --------------------------------------------
Left-click in IntegerMatch Window to continue or right click to debug...

IntMatchWindowには、小文字のcがかなりうまく一致していることが示されています。上記のeとaの間の数値を取得するということは、cがクラスプルーナーによって拒否されたことを示しています。

IntMatchWindowでは、特徴とプロトタイプ間の対応関係が表示されます。プロトタイプは細長い線、特徴は短くて太い線です。最も一致するものから最悪のものまでの色は、このやや恣意的な順序で表示されます。白、緑、赤、青。灰色の線は、不明なものがどの種類のプロトタイプに一致したかを示す必要がありますが、1つの分類遅れているようです。正方形は静的分類器を示し、正規化の単位を示します。路面電車の線は適応型分類を示し、ベースライン、平均線、ディセンダー、アセンダーの位置を示します。

その他のMODEの可能性

一般的に、選択したMODEは、左マウスボタンで選択またはクリックしたブロブまたは単語に対して何らかのアクションを実行します。

MODE Show BL Norm Wordは、左クリックした作業(エディターウィンドウ内)を、ベースラインと平均線が追加された別のウィンドウに表示します。執筆時点では、何かを表示するには、マウスをBlnWordsウィンドウに移動する必要があります。

Recog Blobsは、すべてのセグメンテーションをクリックする必要なく、単一のブロブで分類器をテストするのに役立ちます。「単語」として選択を扱うため、複数のブロブを選択し、分類されたほとんどの組み合わせを見る可能性があります。

Show pointは、Tesseractの座標空間で特定のブロブの座標を取得するのに役立ちます。これにより、textord_test_xとtextord_test_yに入力して、特定のブロブが出力に含まれない理由を調べることができます。

他に機能するMODEは、Dump Word、Row Gaps Hist、Block Gaps Histだけで、これらはすべてターミナルウィンドウに出力します。

その他の表示モード

Display/Bounding Boxesの選択を解除し、Display/Polygonal Approxを選択した後にOther/Uniform Displayを選択しないと、表示時間を節約できます。代わりに、クリックした各単語が新しい形式で再表示されます。

トラブルシューティング

多数のScrollView: Waiting for server…メッセージの途中で「kill %1: no such job」というメッセージが表示されますか?Javaの起動に問題があります。Windowsでは、エラーメッセージはターミナルウィンドウに出力されますが、Linuxでは、svutil.cppを編集して、cmd_template文字列から「>/dev/null 2>&1」を削除する必要があります。

Linuxでこのコマンドを実行してみてください。

java -Xms512m -Xmx1024m -Djava.library.path=$SCROLLVIEW_PATH -cp $SCROLLVIEW_PATH/ScrollView.jar:$SCROLLVIEW_PATH/piccolo-1.2.jar:$SCROLLVIEW_PATH/piccolox-1.2.jar com.google.scrollview.ScrollView

Windowsでこれを実行してみてください。

java -Xms512m -Xmx1024m -Djava.library.path=%SCROLLVIEW_PATH% -cp %SCROLLVIEW_PATH%/ScrollView.jar;%SCROLLVIEW_PATH%/piccolo-1.2.jar;%SCROLLVIEW_PATH%/piccolox-1.2.jar com.google.scrollview.ScrollView

JavaとSCROLLVIEW_PATHの設定に問題がない場合は、次のように表示されます。

Socket started on port 8461。

それ以外の場合は、例えば、次の問題を解決する必要があります。

その他の注意事項

これはデバッグツールであり、適切なUIではないため、通常の処理パス以外のものを適切に処理しません。問題/バグには、これらに限定されませんが、以下が含まれます。