ニューラルネットベースの LSTM Tesseract 4.00 のトレーニングについては、Training Tesseract 4.00 を参照してください。
Tesseract 3.00~3.02を新しい言語でトレーニングするために提供されているツールをどのように使用するか?
注記: これらの手順は、古いバージョンの Tesseract 用です。最近のバージョンに関するトレーニング手順は[[こちら | Training-Tesseract]]です。 |
はじめに
Tesseract 3.0x は完全にトレーニング可能です。このページでは、トレーニングプロセスについて説明し、さまざまな言語への適用性に関するガイドラインと、結果から期待できることについて説明します。
サードパーティのトレーニングツールもトレーニングに使用できます。
リリース 3.04 時点で、traineddata が既に利用可能な言語の一覧を確認してから、トレーニングを開始してください。
背景と制約事項
Tesseract はもともと英語テキストのみを認識するように設計されていました。エンジンとそのトレーニングシステムを変更して、他の言語と UTF-8 文字を処理できるようにするための努力が払われてきました。Tesseract 3.0 は任意の Unicode 文字(UTF-8 でコード化された文字)を処理できますが、成功する言語の範囲には制限があるため、特定の言語でうまく機能するという期待を高める前に、このセクションを考慮してください!
Tesseract 3.01 には上から下への言語が追加され、Tesseract 3.02 にはヘブライ語(右から左)が追加されました。Tesseract は現在、cube という補助エンジン(Tesseract 3.0 以降に含まれています)を使用して、アラビア語やヒンディー語などのスクリプトを処理します。追加の[言語](https://github.com/tesseract-ocr/tesseract/blob/3.02.02/doc/tesseract.1.asc#languages)のTraineddata は、Google によって 3.04 リリース用に提供されています。
Tesseract は文字セットが大きい言語(中国語など)では遅くなりますが、うまく機能するようです。
Tesseract は、異なるフォントを明示的に分離することで、同じ文字の異なる形状を知る必要があります。フォント数は64フォントに制限されています。実行時間は提供されたフォント数に大きく依存し、32個以上をトレーニングすると大幅に遅くなります。
バージョン 3.00/3.01 の場合、句読点と数字が異なる言語は、ASCII 句読点と数字を想定するいくつかのハードコードされたアルゴリズムによって不利になります。[3.02 で修正済み]
入力ファイルが存在する同じフォルダーで、すべてのコマンドを実行する必要があります。
必要なデータファイル
別の言語をトレーニングするには、tessdata
サブディレクトリにいくつかのデータファイルを作成し、combine_tessdata
を使用してそれらを単一のファイルにまとめる必要があります。命名規則は languagecode.file_name
です。リリースされたファイルの言語コードは ISO 639-3 標準に従いますが、任意の文字列を使用できます。英語(3.00)で使用されるファイルは次のとおりです。
tessdata/eng.config
tessdata/eng.unicharset
tessdata/eng.unicharambigs
tessdata/eng.inttemp
tessdata/eng.pffmtable
tessdata/eng.normproto
tessdata/eng.punc-dawg
tessdata/eng.word-dawg
tessdata/eng.number-dawg
tessdata/eng.freq-dawg
…そして、最終的に圧縮されたファイルは
tessdata/eng.traineddata
そして
tessdata/eng.user-words
は個別に提供される場合があります。
traineddata ファイルは、入力ファイルの単純な連結であり、既知のファイルタイプのオフセットを含む目次が含まれています。現在受け入れられているファイル名のリストについては、ソースコードの ccutil/tessdatamanager.h を参照してください。注記 traineddata ファイル内のファイルは、3.00 より前のリストとは異なり、将来のリビジョンで大幅に変更される可能性があります。
テキスト入力ファイルの要件
テキスト入力ファイル (lang.config、lang.unicharambigs、font_properties、ボックスファイル、辞書の単語リストなど) は、次の基準を満たしている必要があります。
- BOMのない ASCII または UTF-8 エンコーディング
- Unix 改行文字('\n')
- 最後の文字は改行文字('\n')である必要があります。一部のテキストエディターでは、ファイルの最後に空行として表示されます。これを省略すると、「last_char == '\n':Error:Assert failed…」というエラーメッセージが表示されます。
最小限で済ませるには?
unicharset
、inttemp
、normproto
、pffmtable
は、下記の手順に従って作成する必要があります。限定的な範囲のフォント(たとえば、単一のフォントなど)のみを認識しようとしている場合は、単一のトレーニングページで十分な場合があります。他のファイルはもはや提供する必要はありませんが、アプリケーションによっては精度が向上する可能性があります。
トレーニング手順
手順の一部は必然的に手動で行われます。可能な限り自動化された支援が提供されます。以下で参照されているツールはすべて、トレーニングサブディレクトリにビルドされています。
トレーニング画像の生成
最初のステップは、使用する完全な文字セットを決定し、一連の例を含むテキストまたはワードプロセッサファイルを用意することです。トレーニングファイルを作成する際に心に留めておく最も重要な点は次のとおりです。
- 各文字のサンプルを最低限の数用意してください。10個が良いですが、まれな文字の場合は5個でも大丈夫です。
- より頻繁に発生する文字には、より多くのサンプル(少なくとも20個)が必要です。
- 非文字をすべてまとめてしまうという間違いを犯さないでください。テキストをより現実的にします。たとえば、「The quick brown fox jumps over the lazy dog. 0123456789 !@#$%^&(),.{}<>/?」はひどいです。「The (quick) brown {fox} jumps! over the $3,456.78 <lazy> #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam?」の方がはるかに優れています。これにより、テキスト行検出コードは、特殊文字のベースラインメトリックをより適切に取得する可能性が高まります。
- [バージョン 3.00 にのみ関連し、3.01 で修正済み] 印刷時にテキストを少し間隔をあけて配置することが重要になる場合があります。ワードプロセッサで文字間隔と行間隔を広げてください。テキストの間隔が不十分だと、tr ファイル生成中に「FAILURE! box overlaps no blobs or blobs in multiple rows」エラーが発生し、FATALITY - 0 labelled samples of “x”、さらに「Error: X classes in inttemp while unicharset contains Y unichars」につながり、新しいデータファイルを使用できなくなります。
- トレーニングデータはフォント別にグループ化する必要があります。理想的には、単一のフォントのすべてのサンプルを単一の tiff ファイルに入れる必要がありますが、これはマルチページ tiff (libtiff または leptonica がインストールされている場合)になる可能性があるため、単一のフォントの合計トレーニングデータは多くのページと数万文字になる可能性があり、大文字セット言語のトレーニングが可能になります。
- 複数のサイズでトレーニングする必要はありません。10ポイントは大丈夫です。(ただし、非常に小さなテキストは例外です。高さ約 15 ピクセル未満のテキストを認識する場合は、個別にトレーニングするか、認識する前に画像のサイズを変更する必要があります。)
- 画像ファイルにフォントを混ぜないでください(正確には、単一の .tr ファイルに)。これにより、クラスタリング時に特徴が削除され、認識エラーが発生します。
- ダウンロードページの例として挙げられている boxtiff ファイルは、トレーニングデータの形式がわからない場合に役立ちます。
次に、印刷とスキャン(または何らかの電子レンダリング方法を使用)を行い、トレーニングページの画像を作成します。最大 64 個のトレーニングファイル(複数ページ)を使用できます。イタリック体やボールド体など、さまざまなフォントとスタイルを組み合わせるのが最適です(ただし、別々のファイルにします)。
注記: [バージョン 3.00 にのみ関連し、3.01 で修正済み] 間隔の要件により、実際の画像からトレーニングするのは実際には非常に困難です。自分でトレーニングテキストを印刷/スキャンできる方がはるかに簡単です。
また、次のステップで使用するために、トレーニングテキストを UTF-8 テキストファイルとして保存する必要があります。このステップでは、コードを別のファイルに挿入する必要があります。
大量のトレーニングデータの明確化 64 画像の制限はフォントの数です。各フォントは単一のマルチページ tiff に入れる必要があり、ボックスファイルは座標の後に各文字のページ番号を指定するように変更できます。したがって、任意の量のトレーニングデータを与えられたフォントに対して作成でき、大文字セット言語のトレーニングが可能になります。マルチページ tiff の代わりに、単一のフォントに対して多くの単一ページ tiff を作成し、各フォントの tr ファイルをいくつかの単一フォント tr ファイルに連結する必要があります。いずれの場合も、mftraining への入力 tr ファイルには、それぞれ単一のフォントが含まれている必要があります。
ボックスファイルの作成
次のステップでは、Tesseract は各トレーニング画像に対応する「ボックス」ファイルが必要です。ボックスファイルは、トレーニング画像内の文字を順に、行ごとに 1 つずつリストしたテキストファイルであり、画像の周囲の境界ボックスの座標が記載されています。Tesseract 3.0 には、必要な形式のテキストファイルを出力するモードがありますが、文字セットが現在のトレーニングとは異なる場合、テキストが不正確になります。したがって、ここの重要なプロセスは、ファイルを編集して正しい文字を挿入することです。
このコマンドラインを使用して、各トレーニング画像で Tesseract を実行します。
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
例:
tesseract eng.timesitalic.exp0.tif eng.timesitalic.exp0 batch.nochop makebox
さて、難しい部分です。[lang].[fontname].exp[num].box
ファイルを編集し、Tesseract によって配置された不正確な文字の代わりに、各行の先頭にファイル内の各文字の UTF-8 コードを配置する必要があります。例:配布物には eurotext.tif という画像が含まれています。上記のコマンドを実行すると、次の行(141~154 行目)を含むテキストファイルが生成されます。
s 734 494 751 519 0
p 753 486 776 518 0
r 779 494 796 518 0
i 799 494 810 527 0
n 814 494 837 518 0
g 839 485 862 518 0
t 865 492 878 521 0
u 101 453 122 484 0
b 126 453 146 486 0
e 149 452 168 477 0
r 172 453 187 476 0
d 211 451 232 484 0
e 236 451 255 475 0
n 259 452 281 475 0
Tesseractを英語モードで実行したため、ウムラウトが正しく認識されていません。UTF-8に対応したエディタを使用して、この文字を修正する必要があります。u
をü
に変更する必要があります。
UTF-8に対応した推奨エディタ:Notepad++、gedit、KWrite、Geany、Vim、Emacs、Atom、TextMate、Sublime Text。いずれかを選択してください。LinuxとWindowsの両方には、入力できない文字をコピーするために使用できる文字マップがあります。
理論上、boxファイルの各行はトレーニングファイルのいずれかの文字を表す必要がありますが、下付きの二重引用符「のように、水平方向に分割された文字がある場合、マージする必要がある2つのボックスが生成される可能性があります!
例:116~129行目
D 101 504 131 535 0
e 135 502 154 528 0
r 158 503 173 526 0
, 197 498 206 510 0
, 206 497 214 509 0
s 220 501 236 526 0
c 239 501 258 525 0
h 262 502 284 534 0
n 288 501 310 525 0
e 313 500 332 524 0
l 336 501 347 534 0
l 352 500 363 532 0
e 367 499 386 524 0
” 389 520 407 532 0
ご覧のように、下付きの二重引用符文字は2つの単一のカンマとして表現されています。バウンディングボックスは次のようにマージする必要があります。
- 最初の数値(左):2行の最小値をとる(197)
- 2番目の数値(下):2行の最小値をとる(497)
- 3番目の数値(右):2行の最大値をとる(214)
- 4番目の数値(上):2行の最大値をとる(510)
これにより、以下のようになります。
D 101 504 131 535 0
e 135 502 154 528 0
r 158 503 173 526 0
„ 197 497 214 510 0
s 220 501 236 526 0
c 239 501 258 525 0
h 262 502 284 534 0
n 288 501 310 525 0
e 313 500 332 524 0
l 336 501 347 534 0
l 352 500 363 532 0
e 367 499 386 524 0
” 389 520 407 532 0
トレーニング画像で文字の間隔を正しく設定できなかった場合、いくつかの文字が1つのボックスに結合されている可能性があります。この場合、間隔を空けた画像を作り直してやり直すか、ペアが一般的なものである場合は、両方の文字を行の先頭に配置し、バウンディングボックスで両方を表すことができます。(3.00以降、「文字」の説明には24バイトの制限があります。これにより、Unicodeセット内のコードの位置に応じて、6~24個のUnicodeで文字を記述できます。この制限に達した場合は、状況を説明する問題を報告してください。)
注記 boxファイルで使用されている座標系では、(0,0)が左下にあります。
各行の最後の数値は、複数ページのTIFFファイルにおけるその文字のページ番号です(0から始まる)。
boxファイル編集用のビジュアルツールがいくつかあります。AddOnsドキュメントを確認してください。
新しい文字セットのブートストラップ
新しい文字セットのトレーニングを試みる場合は、1つのフォントで適切なboxファイルを作成することに注力し、トレーニングプロセスの残りの部分を実行してから、新しい言語でTesseractを使用して残りのboxファイルを作成することをお勧めします。
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] -l yournewlanguage batch.nochop makebox
これにより、Tesseractがテキストの大部分を正しく認識する可能性が高いため、2番目のboxファイルの作成が容易になります。トレーニングセットに追加するフォント(つまり、下記のmftraining
とcntraining
のコマンドラインに)を作成する際に、このシーケンスを反復して追加できますが、既存のセットに新しいトレーニングデータを追加できる増分トレーニングモードはありません。これは、mftraining
とcntraining
を実行するたびに、コマンドラインで指定したtrファイルからゼロから新しいデータファイルを作成することを意味し、これらのプログラムは既存のintproto
/ pffmtable
/ normproto
に直接追加することはできません。
Tif/Box ペアを提供!
いくつかのTif/Boxファイルのペアはダウンロードページにあります。(TIFFファイルは容量節約のためG4圧縮されているため、libtiffを使用して解凍する必要があります)。独自の言語または既存言語のサブセットに対してより良いトレーニングデータを作成したり、既存の言語に異なる文字/形状を追加したりするために、次の手順に従うことができます。
- 必要な文字の行のみを残して、boxファイルをフィルタリングします。
- トレーニング用のTesseractを実行します(下記)。
- 各フォントについて、複数の言語からの.trファイルを連結して、必要な文字セットを取得し、独自のフォントまたは文字からの.trファイルを追加します。
- .trファイルと同様に、フィルタリングされたboxファイルを連結して、unicharset_extractorに渡します。
- トレーニングプロセスの残りの部分を実行します。注意!これは聞こえるほど簡単ではありません!cntrainingとmftrainingは最大64個の.trファイルしか受け取ることができないため、同じフォントの複数の言語からのすべてのファイルを連結して、64個の言語が結合されたがフォントは個別のファイルを作成する必要があります。trファイルで見つかった文字は、unicharset_extractorに渡すときのboxファイルで見つかった文字のシーケンスと一致する必要があるため、trファイルと同じ順序でboxファイルを連結する必要があります。cn/mftrainingとunicharset_extractorのコマンドラインには、異なるフォントに異なるフィルタリングがある場合に備えて、.trファイルと.boxファイルを(それぞれ)同じ順序で指定する必要があります。これらすべてを実行し、文字マップのように文字を選び出すプログラムが利用できる場合があります。これにより、全体が容易になる可能性があります。
トレーニングのための Tesseract の実行
トレーニング画像とboxファイルのペアごとに、トレーニングモードでTesseractを実行します。
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] box.train
または
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] box.train.stderr
注記 この手順ではTesseractは言語データの存在を要求しますが、言語データ自体は使用されません。そのため、トレーニングする言語に関わらず、英語を使用できます。
最初の形式は、すべてのエラーをtesseract.logという名前のファイルに送信します。2番目の形式は、すべてのエラーをstderrに送信します。
boxファイル名は、パスを含めてtifファイル名と一致する必要があります。そうでないと、Tesseractはそれを検出しません。この手順の出力はfontfile.tr
であり、トレーニングページの各文字の特徴が含まれています。[lang].[fontname].exp[num].txt
も、単一の改行とテキストなしで書き込まれます。
重要 apply_boxからの出力にエラーがないか確認してください。FATALITIESが報告されている場合、boxファイルを修正するまでトレーニングプロセスを続行する意味はありません。新しいbox.train.stderr設定ファイルにより、出力の場所を選択しやすくなっています。FATALITIESは通常、この手順でboxファイルにリストされている文字のトレーニングサンプルが見つからなかったことを示しています。座標が間違っているか、対象の文字の画像に問題があります。文字の利用可能なサンプルがない場合、認識できず、生成されたinttempファイルは後でunicharsetファイルと一致せず、Tesseractは中止します。
もう1つの致命的なエラーで注意が必要なエラーは、「n行目でboxファイルのフォーマットエラー」に関するエラーです。「Bad utf-8 char…」が先行する場合は、UTF-8コードが正しくなく、修正する必要があります。「utf-8 string too long…」というエラーは、文字の説明で24バイトの制限を超えたことを示しています。24バイトより長い説明が必要な場合は、問題を報告してください。
[lang].[fontname].exp[num].tr
ファイルの内容を編集する必要はありません。その中のフォント名は設定する必要はありません。
興味のある方のために、フォーマットに関する情報を示します。boxファイルの各文字には、.trファイルに次の対応するエントリセットがあります(順序どおり)。
UnknownFont <UTF-8 code(s)> 2
mf <number of features>
x y length dir 0 0
... (there are a set of these determined by <number of features>
above)
cn 1
ypos length x2ndmoment y2ndmoment
mf
の特徴は、1次モーメントと2次モーメントに正規化された輪郭の多角形セグメントです。x = xの位置 [-0.5,0.5] y = yの位置 [-0.25,0.75] 長さは多角形セグメントの長さ [0,1.0] dirはセグメントの方向 [0,1.0]
cn
の特徴は、位置とサイズを区別するためにモーメント正規化を修正することです(例:cとC、,と’)。
文字セットの計算
Tesseractは、出力可能な文字のセットを知る必要があります。 unicharset
データファイルを作成するには、上記で生成されたboxファイルに対してunicharset_extractor
プログラムを使用します。
unicharset_extractor [lang].[fontname].exp[num].box lang.fontname.exp1.box ...
Tesseractは、isalpha、isdigit、isupper、islower、ispunctuationの文字プロパティにアクセスする必要があります。このデータはunicharset
データファイルにエンコードする必要があります。このファイルの各行は1つの文字に対応します。UTF-8の文字の後に、プロパティをエンコードするバイナリマスクを表す16進数が続きます。各ビットはプロパティに対応します。ビットが1に設定されている場合、そのプロパティはtrueであることを意味します。ビットの順序は(最下位ビットから最上位ビットまで):isalpha、islower、isupper、isdigitです。
例
- ’;’は句読点文字です。したがって、そのプロパティはバイナリ数10000(16進数で10)で表されます。
- ‘b’はアルファベット文字であり、小文字です。したがって、そのプロパティはバイナリ数00011(16進数で3)で表されます。
- ‘W’はアルファベット文字であり、大文字です。したがって、そのプロパティはバイナリ数00101(16進数で5)で表されます。
- ‘7’は単なる数字です。したがって、そのプロパティはバイナリ数01000(16進数で8)で表されます。
- ’=’は句読点、数字、アルファベット文字ではありません。したがって、そのプロパティはバイナリ数00000(16進数で0)で表されます。
; 10 Common 46
b 3 Latin 59
W 5 Latin 40
7 8 Common 66
= 0 Common 93
日本語または中国語のアルファベット文字のプロパティは、バイナリ数00001(16進数で1)で表されます。
システムがwctype関数をサポートしている場合、これらの値はunicharset_extractor
によって自動的に設定され、unicharset
ファイルを編集する必要はありません。非常に古いシステム(例:Windows 95)では、これらのプロパティ記述コードを追加するために、unicharset
ファイルを手で編集する必要があります。
最後の2列は、スクリプトの種類(ラテン語、共通、ギリシャ語、キリル文字、漢字、NULL)と、指定された言語の文字のIDコードを表します。
注記: inttemp
、normproto
、pffmtable
が生成されるたびにunicharset
ファイルを再生成する必要があります(つまり、boxファイルが変更された場合は、すべてを再作成する必要があります)。同期する必要があるためです。
font_properties (3.01 で新機能)
3.01でのトレーニングの新しい要件は、font_properties
ファイルです。このファイルの目的は、フォントが認識されたときに表示されるフォントスタイル情報を提供することです。font_properties
ファイルは、mftraining
の-F filename
オプションで指定されたテキストファイルです。
font_properties
ファイルの各行は、次のようにフォーマットされます。
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
ここで、<fontname>
はフォントの名前を表す文字列(スペースは使用不可)、<italic>
、<bold>
、<fixed>
、<serif>
、<fraktur>
はすべて、フォントが指定されたプロパティを持っているかどうかを示す単純な0または1のフラグです。
mftraining
を実行する際、各 .tr ファイル名は font_properties
ファイルのエントリと一致する必要があります。一致しない場合、mftraining
は異常終了します。3.01 リリース前のある時点で、この一致要件は .tr ファイル自体のフォント名に移行する可能性があります。.tr ファイル名は fontname.tr
または [lang].[fontname].exp[num].tr
のいずれかです。
例
font_properties
ファイル
timesitalic 1 0 0 1 0
shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr
注記 3.03 では、3000 フォントを網羅するデフォルトの font_properties
ファイルがあります(必ずしも正確ではありません)。このリポジトリにあります:https://github.com/tesseract-ocr/langdata。
クラスタリング
すべてのトレーニングページの文字特徴量が抽出されたら、それらをクラスタリングしてプロトタイプを作成する必要があります。
文字形状の特徴量は、shapeclustering
、mftraining
、cntraining
プログラムを使用してクラスタリングできます。
shapeclustering (3.02 で新登場)
shapeclustering
は、インド系言語を除いて使用しないでください。
shapeclustering -F font_properties -U unicharset [lang].[fontname].exp[num].tr lang.fontname.exp1.tr ...
shapeclustering
は、形状クラスタリングによってマスターシェイプテーブルを作成し、shapetable
という名前のファイルに書き込みます。
mftraining
mftraining -F font_properties -U unicharset -O [lang].unicharset [lang].[fontname].exp[num].tr lang.fontname.exp1.tr ...
-U ファイルは上記 unicharset_extractor
によって生成された unicharset であり、lang.unicharset は combine_tessdata
に渡される出力 unicharset です。
mftraining
は、他の2つのデータファイル、inttemp
(形状プロトタイプ)と pffmtable
(各文字の予想特徴量の数)を出力します。バージョン 3.00/3.01 では、Microfeat
という3番目のファイルもこのプログラムによって書き込まれますが、使用されません。それ以降のバージョンでは、このファイルは生成されません。
注記:shapeclustering
を実行しなかった場合、mftraining
は shapetable
ファイルを生成します。shapeclustering
を使用したかどうかにかかわらず、この shapetable
をトレーニングデータファイルに含める必要があります。
cntraining
cntraining [lang].[fontname].exp[num].tr lang.fontname.exp1.tr ...
これにより、normproto
データファイル(文字正規化感度プロトタイプ)が出力されます。
辞書データ(オプション)
Tesseract は、言語ごとに最大8個の辞書ファイルを使用します。これらはすべてオプションであり、Tesseract がさまざまな可能な文字の組み合わせの可能性を判断するのに役立ちます。
7つのファイルは、Directed Acyclic Word Graph (DAWG) としてコード化されており、もう1つはプレーンな UTF-8 テキストファイルです。
名前 | 種類 | 説明 |
---|---|---|
word-dawg | dawg | その言語の辞書語から作成された dawg。 |
freq-dawg | dawg | word-dawg に含まれるはずだった最も頻繁な単語から作成された dawg。 |
punc-dawg | dawg | 単語の周囲で見つかった句読点パターンから作成された dawg。「単語」の部分はスペース1つに置き換えられます。 |
number-dawg | dawg | 元々は数字が含まれていたトークンから作成された dawg。各数字はスペース文字に置き換えられます。 |
fixed-length-dawgs | dawg | さまざまな固定長の複数の dawg——中国語などの言語に役立ちます。[バージョン 3.03 以降は使用されていません] |
bigram-dawg | dawg | 単語がスペースで区切られ、各数字が *?* に置き換えられた単語バイグラムの dawg。 |
unambig-dawg | dawg | TODO: 説明を追加。 |
user-words | テキスト | 辞書に追加する追加の単語のリスト。通常は空のままにしておき、必要に応じてユーザーが追加します。 tesseract(1) を参照してください。 |
DAWG 辞書ファイルを作成するには、最初にその言語の単語リストが必要です。スペルチェッカー(例:ispell、aspell、または hunspell)から単語リストの基礎として使用できる適切な辞書ファイルを見つけることができます - ライセンスに注意してください。単語リストは、行ごとに1つの単語を含む UTF-8 テキストファイルとしてフォーマットされています。単語リストを必要なセット(例:高頻度語、残りの単語)に分割し、wordlist2dawg
を使用して DAWG ファイルを作成します。
wordlist2dawg frequent_words_list [lang].freq-dawg [lang].unicharset
wordlist2dawg words_list [lang].word-dawg [lang].unicharset
アラビア語やヘブライ語など、右から左へ記述される言語(RTL)の場合、wordlist2dawg
コマンドに -r 1
を追加します。
wordlist2dawg マニュアルページ に他のオプションがあります。
注記:結合された traineddata に辞書ファイルが含まれている場合、少なくとも1つのエントリが含まれている必要があります。それ以外の場合は空になる辞書ファイルは、combine_tessdata
ステップには必要ありません。
珍しい綴りの単語は、辞書ファイルに追加する必要があります。珍しい綴りには、アルファベット文字と句読点または数値文字の混合が含まれる場合があります。(例:i18n、l10n、google.com、news.bbc.co.uk、io9.com、utf8、ucs2)
辞書単語リストのサンプルファイルが必要な場合は、既存の言語データファイル(例:eng.traineddata)を(combine_tessdata を使用して)解凍し、dawg2wordlist を使用して単語リストを抽出します。
最後のファイル (unicharambigs)
Tesseract が使用する最終的なデータファイルは unicharambigs
と呼ばれます。これは、文字または文字セット間の可能な曖昧さを記述し、手動で生成されます。ファイル形式を理解するには、次の例を参照してください。
v1
2 ' ' 1 " 1
1 m 2 r n 0
3 i i i 1 m 0
最初の行はバージョン識別子です。残りの行は、タブ区切りのフィールドで、次の形式です。
<number of characters for match source> <tab> <characters for match source> <tab> <number of characters for match target> <tab> <characters for match target> <tab> <type indicator>
タイプインジケータ は次の値を持つことができます
値 | 種類 | 説明 |
---|---|---|
0 | 必須ではない置換。これは、'source' を 'target' に置き換えることで非辞書語から辞書語が作成される場合、セグメンテーション検索へのヒントとして曖昧さを考慮することを Tesseract に指示します。曖昧性によって別の辞書語に変換できる辞書語は、適応分類器のトレーニングには使用されません。 | |
1 | 必須の置換。これは、Tesseract に一致する 'source' を 'target' 文字列に常に置き換えるように指示します。 |
例行 | 説明 |
---|---|
2 ‘ ‘ 1 “ 1 | 二重引用符(")は、2つの連続した単一引用符(')が検出された場合常に置換する必要があります。 |
1 m 2 r n 0 | 文字 'rn' は、誤って 'm' と認識される場合があります。 |
3 i i i 1 m 0 | 文字 'm' は、誤ってシーケンス 'iii' と認識される場合があります。 |
個々の文字は、unicharset に含まれている必要があります。つまり、使用されるすべての文字は、トレーニングされている言語の一部である必要があります。
ルールは双方向ではないため、'm' が検出されたときに 'rn' を考慮し、その逆も考慮する必要がある場合は、それぞれにルールが必要です。
トレーニングに使用される他のほとんどのファイルと同様に、unicharambigs
ファイルは UTF-8 でエンコードする必要があり、改行文字で終わる必要があります。
unicharambigs(5) マニュアルページ にも unicharambigs
の形式が記載されています。
unicharambigs
ファイルが存在しない場合もあります。
すべてをまとめる
以上です!あとは、すべてのファイル(shapetable
、normproto
、inttemp
、pffmtable
)を収集し、http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes から取得した言語の3文字コードである lang.
プレフィックスを付けて名前を変更し、次のように combine_tessdata
を実行します。
combine_tessdata [lang].
注記:末尾のドットを忘れないでください!
結果として得られる lang.traineddata は、tessdata ディレクトリに配置されます。その後、Tesseract は(理論的には)次のコマンドを使用して、その言語のテキストを認識できます。
tesseract image.tif output -l [lang]
(実際には、言語コードには任意の文字列を使用できますが、他の人も簡単に使用できるようにするには、ISO 639 を使用するのが適切です。)
マニュアルページまたはソースコードのコメントで、combine_tessdata
の詳細なオプションを確認できます。
サードパーティのオンラインTraineddata インスペクターを使用して、traineddata ファイルの内部構造の一部を検査できます。