コンテンツにスキップ。

ニューラルネットベースのLSTM Tesseract 4.00のトレーニングについては、Tesseract 4.00のトレーニングをご覧ください。


Tesseract 3.03–3.05を新しい言語用にトレーニングするために提供されているツールを使用する方法。

重要な注意:Tesseractのトレーニングに時間と労力を費やす前に、品質の向上ページを読むことを強くお勧めします。

Tesseract 3.04および3.05には、Tesseractのトレーニングのさまざまなフェーズを簡単に実行するためのスクリプトが用意されています。使用方法の詳細については、tesstrain.shページをご覧ください。

トレーニングプロセスに関する質問

トレーニング手順

付録

トレーニングプロセスに関する質問

トレーニング中に問題が発生し、助けが必要な場合は、tesseract-ocrメーリングリストを使用して質問してください。

絶対にトレーニングに関する問題の報告や質問をissueとして報告しないでください!

はじめに

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.01以降に含まれています)で処理します。アラビア語(ペルシア語、ウルドゥー語なども同様)の場合、4.0より前のTesseractバージョンをトレーニングしようとしないでください。それは絶望的です。4.0の場合は、LSTMメソッドのみでトレーニングしてください。

追加の言語のTraineddataがGoogleから3.04リリース用に提供されています。

Tesseractは、(中国語のような)大きな文字セットの言語では動作が遅くなりますが、問題なく動作するようです。

Tesseractは、同じ文字の異なる形状を、異なるフォントを明示的に分離することによって知る必要があります。フォントの数は64フォントに制限されています。実行時間は提供されるフォントの数に大きく依存し、32を超えるフォントをトレーニングすると大幅な速度低下につながることに注意してください。

追加のライブラリが必要

3.03以降、トレーニングツールを構築するには追加のライブラリが必要です。

sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev

トレーニングツールの構築

3.03以降、ソースからTesseractをコンパイルする場合は、個別のmakeコマンドを使用してトレーニングツールを作成およびインストールする必要があります。上記の追加ライブラリをインストールしたら、tesseractソースディレクトリから以下を実行します。

make training
sudo make training-install

必要なデータファイル

別の言語用にトレーニングするには、tessdataサブディレクトリにいくつかのデータファイルを作成し、combine_tessdataを使用して、これらを1つのファイルにまとめる必要があります。命名規則は、languagecode.file_nameです。リリースされたファイルの言語コードはISO 639-3標準に従いますが、任意の文字列を使用できます。英語(3.0x)に使用されるファイルは次のとおりです。

…そして、最後にまとめられたファイルは次のとおりです。

および

traineddataファイルは、既知のファイルタイプのオフセットを含む目次を含む、入力ファイルを単純に連結したものです。現在受け入れられているファイル名のリストについては、ソースコードのccutil/tessdatamanager.hを参照してください。

テキスト入力ファイルの要件

テキスト入力ファイル(lang.config、lang.unicharambigs、font_properties、ボックスファイル、辞書の単語リストなど)は、以下の基準を満たす必要があります。

どこまで簡略化できるか?

以下の手順を使用して、unicharsetinttempnormprotopffmtable必ず作成する必要があります。限られた範囲のフォント(たとえば、単一のフォントなど)のみを認識しようとする場合、1つのトレーニングページで十分な場合があります。他のファイルを提供する必要はありませんが、アプリケーションによっては精度が向上する可能性が高くなります。

トレーニング手順

手順の一部は必然的に手動です。可能な限り多くの自動化されたヘルプが提供されています。以下で参照されているツールはすべて、トレーニングサブディレクトリに構築されています。

すべてのコマンドは、入力ファイルがある同じフォルダで実行する必要があります。

トレーニング画像とボックスファイルの生成

テキストファイルの準備

最初のステップは、使用する完全な文字セットを決定し、例のセットを含むテキストまたはワープロファイルを準備することです。トレーニングファイルを作成する際に念頭に置いておくべき最も重要な点は次のとおりです。

各文字のサンプルが最小限にあることを確認してください。10は良いですが、まれな文字の場合は5でOKです。

より頻繁な文字のサンプルは、少なくとも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.03の新機能

上記仕様に従って、トレーニングテキストを含むUTF-8テキストファイル(training_text.txt)を準備します。認識したいフォントのtruetype/opentypeフォントファイルを取得します。各フォントに対して、以下のコマンドを順番に実行して、一致するtif/boxファイルペアを作成します。

training/text2image --text=training_text.txt --outputbase=[lang].[fontname].exp0 --font='Font Name' --fonts_dir=/path/to/your/fonts

–fontへの引数にはスペースを含めることができるため、引用符で囲む必要があることに注意してください。例:

training/text2image --text=training_text.txt --outputbase=eng.TimesNewRomanBold.exp0 --font='Times New Roman Bold' --fonts_dir=/usr/share/fonts

トレーニングテキストをレンダリングできるシステム内のすべてのフォントをリストするには、次を実行します。

training/text2image --text=training_text.txt --outputbase=eng --fonts_dir=/usr/share/fonts  --find_fonts --min_coverage=1.0 --render_per_font=false

この例では、training_text.txtファイルには英語で記述されたテキストが含まれています。’eng.fontlist.txt’ファイルが作成されます。

text2imageで利用できる他のコマンドライン引数がたくさんあります。詳細については、text2image --helpを実行してください。

text2imageを使用した場合は、トレーニング用にTesseractを実行ステップに進むことができます。

古い手動の方法

次に、トレーニングページの画像を作成するために印刷してスキャンするか(または、いくつかの電子レンダリング方法を使用します)。最大64個のトレーニングファイルを使用できます(複数ページ)。イタリック体や太字など、さまざまなフォントやスタイルを混合して(ただし、個別のファイルで)作成するのが最適です。

次のステップでコードを別のファイルに挿入する必要があるため、トレーニングテキストをUTF-8テキストファイルとして保存する必要があります。

大量のトレーニングデータの明確化 64個の画像制限は、フォントの数に対するものです。各フォントを単一のマルチページtiffに入れる必要があり、座標の後で各文字のページ番号を指定するようにボックスファイルを変更できます。したがって、任意のフォントに対して任意に大量のトレーニングデータを作成できるため、大規模な文字セット言語のトレーニングが可能になります。マルチページtiffの代わりに、単一のフォントに対して多数のシングルページtiffを作成することもできます。その場合は、各フォントのtrファイルをいくつかの単一フォントのtrファイルに連結する必要があります。いずれにせよ、mftrainingへの入力trファイルにはそれぞれ単一のフォントが含まれている必要があります。

ボックスファイルの作成

別のボックスファイルの作成ページを参照してください。

トレーニング用にTesseractを実行

トレーニング画像とボックスファイルのペアごとに、トレーニングモードで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に送信します。

ボックスファイルの名前は、パスを含めて、tifファイルの名前と一致している必要があることに注意してください。一致しない場合、Tesseractは見つけることができません。このステップの出力はfontfile.trで、トレーニングページの各文字の特徴が含まれています。[lang].[fontname].exp[num].txtも、改行1つだけでテキストなしで書き込まれます。

重要 apply_boxの出力にエラーがないか確認してください。FATALITIESが報告された場合は、ボックスファイルを修正するまでトレーニングプロセスを続行する意味がありません。新しいbox.train.stderr設定ファイルを使用すると、出力場所を簡単に選択できます。FATALITYは通常、このステップでボックスファイルにリストされている文字のいずれかのトレーニングサンプルが見つからなかったことを示します。座標が間違っているか、問題の文字の画像に問題があります。文字の実行可能なサンプルがない場合、認識できず、生成されたinttempファイルは後でunicharsetファイルと一致せず、Tesseractは中止します。

致命的であり、注意が必要な別のエラーは、「Box file format error on line n」(n行目のボックスファイル形式エラー)に関するエラーです。「Bad utf-8 char…」が先行する場合は、UTF-8コードが正しくないため、修正する必要があります。「utf-8 string too long…」というエラーは、文字の説明の24バイト制限を超えたことを示しています。24バイトを超える説明が必要な場合は、問題を報告してください。

[lang].[fontname].exp[num].trファイルの内容を編集する必要はありません。その中のフォント名を設定する必要はありません。

興味のある方は、こちらに形式に関する情報があります。

unicharsetファイルの生成

Tesseractのunicharsetファイルには、Tesseract OCRエンジンが認識するようにトレーニングされている各シンボル(unichar)に関する情報が含まれています。

現在、unicharsetファイルの生成は、unicharset_extractorset_unicharset_propertiesの2つのコマンドを使用して2つのステップで実行されます。

注:unicharsetファイルは、inttempnormproto、およびpffmtableが生成されるたびに(つまり、ボックスファイルが変更されたときにすべて再作成する必要があります)再生成する必要があります。これらは同期している必要があるためです。

unicharsetファイル形式の詳細については、この付録を参照してください。

unicharset_extractor

Tesseractは、出力できる可能性のある文字のセットを知る必要があります。unicharsetデータファイルを生成するには、上記で生成されたボックスファイルに対してunicharset_extractorプログラムを使用します。

unicharset_extractor lang.fontname.exp0.box lang.fontname.exp1.box ...

set_unicharset_properties

3.03の新機能

このツールは、データファイルのセットとともに、unicharsetに追加のプロパティ(主にフォントから取得したサイズ)を追加できるようにします。

training/set_unicharset_properties -U input_unicharset -O output_unicharset --script_dir=training/langdata

--script_dirは、トレーニング文字セットに関連する.unicharsetファイルを含むディレクトリを指す必要があります。これらは、https://github.com/tesseract-ocr/langdataからダウンロードできます。

unicharset_extractorset_unicharset_propertiesを実行すると、すべてのフィールドがこの例のように正しい値に設定されたunicharsetファイルが得られます。

font_propertiesファイル

次に、font_propertiesテキストファイルを作成する必要があります。このファイルの目的は、フォントが認識されたときに出力に表示されるフォントスタイル情報を提供することです。

font_propertiesファイルの各行は、次のようにフォーマットされています:fontname italic bold fixed serif fraktur
ここで、fontnameはフォントの名前を示す文字列であり(スペースは許可されません!)、italicboldfixedserif、およびfrakturはすべて、フォントに指定されたプロパティがあるかどうかを示す単純な0または1のフラグです。

:

timesitalic 1 0 0 1 0

font_propertiesファイルは、shapeclusteringおよびmftrainingコマンドで使用されます。

mftrainingを実行する場合、*.trファイルの各fontnameフィールドは、font_propertiesファイルのfontnameエントリと一致する必要があります。そうでない場合、mftrainingは中止します。

:langdataリポジトリにある3000のフォント(必ずしも正確ではありません)をカバーするデフォルトのfont_propertiesファイルがあります。

クラスタリング

すべてのトレーニングページの文字の特徴が抽出されたら、それらをクラスタリングしてプロトタイプを作成する必要があります。

文字の形状の特徴は、shapeclusteringmftraining、およびcntrainingプログラムを使用してクラスタリングできます。

shapeclustering

shapeclusteringは、通常、インド諸語を除いて使用すべきではありません。(基本文字が2つ以上の非スペーシング修飾子と組み合わされているラテン文字アルファベット言語(例:ḗ、ɔ̄́、r̥̄)には、shapeclusteringを使用する必要がある場合があります。これには、ラテン文字転写のインド諸語が含まれますが、これに限定されない場合があります。そうしないと、mftrainingAssert failed:in file unicharset.cppエラーが発生します。)

shapeclustering -F font_properties -U unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...

shapeclusteringは、シェイプクラスタリングによってマスターシェイプテーブルを作成し、shapetableという名前のファイルに書き込みます。

mftraining

mftraining -F font_properties -U unicharset -O lang.unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...

-Uファイルは、上記のunicharset_extractorで生成されたunicharsetであり、lang.unicharsetは、combine_tessdataに与えられる出力unicharsetです。

mftrainingは、他の2つのデータファイルを出力します:inttemp(形状プロトタイプ)およびpffmtable(各文字の予想される特徴の数)。

mftrainingは、shapeclusteringを実行しなかった場合、shapetableファイルを生成します。shapeclusteringを使用したかどうかに関係なく、このshapetableをトレーニング済みデータファイルに含める必要があります。

cntraining

cntraining lang.fontname.exp0.tr lang.fontname.exp1.tr ...

これにより、normprotoデータファイル(文字正規化感度プロトタイプ)が出力されます。

辞書データ(オプション)

Tesseractは、各言語に対して最大8つの辞書ファイルを使用します。これらはすべてオプションであり、Tesseractがさまざまな可能な文字の組み合わせの可能性を判断するのに役立ちます。

7つのファイルは有向非巡回語グラフ(DAWG)としてコード化されており、もう1つはプレーンUTF-8テキストファイルです。

名前 タイプ 説明
word-dawg dawg 言語の辞書単語から作成されたdawg。
freq-dawg dawg word-dawgに含まれる最も頻繁な単語から作成されたdawg。
punc-dawg dawg 単語の周りにある句読点パターンから作成されたdawg。「単語」部分は単一のスペースに置き換えられます。
number-dawg dawg 元々数字を含んでいたトークンから作成されたdawg。各数字はスペース文字に置き換えられます。
bigram-dawg dawg 単語がスペースで区切られ、各数字がで置き換えられた単語バイグラムのdawg。
user-words テキスト 辞書に追加する追加の単語のリスト。通常は空のままにして、必要に応じてユーザーが追加します。 tesseract(1)を参照してください。

DAWG辞書ファイルを作成するには、まず言語の単語リストが必要です。スペルチェッカー(例:ispellaspell、またはhunspell)から単語リストの基礎として使用する適切な辞書ファイルが見つかる場合があります。ライセンスには注意してください。単語リストは、1行に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を使用して)uncombineし、次にdawg2wordlistで単語リストを抽出します。

unicharambigsファイル

unicharambigsファイルは、文字または文字セット間の可能性のあるあいまいさを記述するテキストファイルであり、手動で生成されます。

ファイル形式を理解するには、次の例を見てください。

v1
2       ' '     1       "       1
1       m       2       r n     0
3       i i i   1       m       0

最初の行はバージョン識別子です。

残りの行は、次の形式でタブ区切りのフィールドです。

<number of characters for match source> <characters for match source> <number of characters for match target> <characters for match target> <type indicator>

タイプインジケーター には次の値を含めることができます。

タイプ 説明
0 非必須の置換。 これは、Tesseractに対し、「ソース」を「ターゲット」に置き換えることで、辞書にない単語から辞書単語を作成する場合、セグメンテーション検索へのヒントとしてあいまいさを考慮するように通知します。あいまいさによって別の辞書単語に変換できる辞書単語は、適応分類器をトレーニングするために使用されません。
1 必須の置換。 これは、Tesseractに対し、一致した「ソース」を常に「ターゲット」文字列で置き換えるように通知します。
例の行 説明
2 ' ' 1 " 1 2つの連続した単一引用符(')が見られたときはいつでも、二重引用符(")に置き換える必要があります。
1 m 2 r n 0 文字「rn」は、「m」として誤って認識される場合があります。
3 i i i 1 m 0 文字「m」は、シーケンス「iii」として誤って認識される場合があります。

個々の文字はすべてunicharsetに含める必要があります。つまり、使用されるすべての文字は、トレーニング対象の言語の一部である必要があります。

ルールは双方向ではないため、「m」が検出されたときに「rn」を考慮したい場合、またはその逆の場合は、それぞれのルールが必要です。

バージョン3.03以降では、unicharambigsファイルの新しい、より単純な形式がサポートされています。

v2
'' " 1
m rn 0
iii m 0

この形式では、「エラー」と「修正」はスペースで区切られたシンプルなUTF-8文字列であり、さらにスペースの後にはv1と同じタイプの指定子(オプションの場合は0、必須の置換の場合は1)が続きます。このよりシンプルな形式の欠点は、TesseractがUTF-8文字列をユニチャーセットのコンポーネントにエンコードする必要があることです。複雑なスクリプトでは、このエンコードが曖昧になる可能性があります。この場合、各コンポーネントに使用するUTF-8文字数が最小になるようにエンコードが選択されます。つまり、最も短いユニチャーセットのコンポーネントでエンコードが構成されます。

トレーニングで使用される他のほとんどのファイルと同様に、unicharambigsファイルはUTF-8としてエンコードされ、改行文字で終わる必要があります。

unicharambigs形式は、unicharambigs(5) manページでも説明されています。

unicharambigsファイルが存在しない場合もあります。

すべてをまとめる

以上です!必要なのは、すべてのファイル(shapetablenormprotointtemppffmtableunicharset)をまとめて、lang.プレフィックス(たとえば、eng.)で名前を変更し、それらに対して次のようにcombine_tessdataを実行することだけです。

combine_tessdata lang.

言語コードには任意の文字列を使用できますが、言語のISO 639-2コードのいずれかに一致する3文字のコードを使用することをお勧めします。

結果のlang.traineddataはtessdataディレクトリに入ります。これで、Tesseractは(理論的には)次のコマンドであなたの言語のテキストを認識できます。

tesseract image.tif output -l lang

combine_tessdataのその他のオプションについては、マニュアルページまたはソースコードのコメントで確認できます。

traineddataファイルの内部構造の一部は、サードパーティのオンラインTraineddata inspectorで調べることができます。

付録

*.trファイル形式

ボックスファイル内のすべての文字には、次のように、.trファイルに対応するエントリのセット(順番に)があります。

<fontname> <character> <left> <top> <right> <bottom> <pagenum>
 4
mf <number of features>
<x> <y> <length> <dir> 0 0
...
cn 1
<ypos> <length> <x2ndmoment> <y2ndmoment>
if <number of features>
<x> <y> <dir>
...
tb 1
<bottom> <top> <width>

マイクロフィーチャー(mf)は、1次および2次モーメントに正規化されたアウトラインのポリゴンセグメントです。mf行の後には、<フィーチャーの数>によって決定される一連の行が続きます。
xはx位置[-0.5,0.5]です
yはy位置[-0.25,0.75]です
lengthはポリゴンセグメントの長さ[0,1.0]です
dirはセグメントの方向[0,1.0]です

文字正規化フィーチャー(cn)は、位置とサイズ(たとえば、cC,')を区別するためのモーメント正規化を修正するために使用されます。

if - Intフィーチャー

tb - Geoフィーチャー

unicharsetファイル形式

Tesseractのunicharsetファイルには、Tesseract OCRエンジンが認識するようにトレーニングされている各シンボル(unichar)に関する情報が含まれています。

ユニチャーセットファイルの最初の行には、ファイル内のユニチャーの数が含まれています。

この行の後、後続の各行は単一のユニチャーの情報を提供します。最初のそのような行には、スペース文字用に予約されたプレースホルダーが含まれています。

各ユニチャーは、ユニチャーセットファイル内の行番号(-1)であるUnichar IDによって、Tesseract内で参照されます。したがって、スペースはユニチャー0を取得します。

ユニチャーセットファイル内の各ユニチャー行には、次のスペースで区切られたフィールドが必要です。
character properties glyph_metrics script other_case direction mirror normed_form

ユニチャーセットファイルの例

110
NULL 0 NULL 0
N 5 59,68,216,255,87,236,0,27,104,227 Latin 11 0 1 N
Y 5 59,68,216,255,91,205,0,47,91,223 Latin 33 0 2 Y
1 8 59,69,203,255,45,128,0,66,74,173 Common 3 2 3 1
9 8 18,66,203,255,89,156,0,39,104,173 Common 4 2 4 9
a 3 58,65,186,198,85,164,0,26,97,185 Latin 56 0 5 a
...

propertiesフィールドの詳細

もう1つの例を次に示します。簡単にするため、この例では各行の最初の2つのフィールドのみが表示されています。その他のフィールドは省略されています。

...
; 10 ...
b 3 ...
W 5 ...
7 8 ...
= 0 ...
...
文字 句読点 数字 大文字 小文字 アルファ 2進数 16進数。
; 1 0 0 0 0 10000 10
b 0 0 0 1 1 00011 3
W 0 0 1 0 1 00101 5
7 0 1 0 0 0 01000 8
= 0 0 0 0 0 00000 0

2〜6列では、0は「いいえ」、1は「はい」を意味します。