ユーザーパターンのAPI例
辞書にない言葉があり、アルファベットと数字の特定パターンに従うフィールドのIDタイプを認識する場合、ユーザーパターンが役立つ場合があります。例:\A\A\d\d\d\A
このドキュメントでは、認識の向上にユーザーパターンを適用するためのC++でtesseract-ocr API (4.x)を利用する方法を簡単に示す例を紹介します。tesseract-ocrがすべての依存関係を含め、正しくインストールされている必要があります。また、ユーザーはC++、プラットフォームでのプログラムのコンパイルおよびリンクに精通している必要があります。
これは、tesseract-ocrフォーラムで提供された例に基づいており、tesseract 4.xの機能の最近の実装のために更新されています。
ユーザーパターンが適用された後にこの例で100%の精度を得ることができても、常にそうとは限りませんことにご注意ください。ユーザーパターン(ユーザー辞書など)は、デコード中にヒントとして適用されるだけで、排他的ではありません。通常、画像の前処理により認識の品質が向上し、推奨されます。
要件
認識の向上にユーザーパターンを適用するには、以下が必要です。
ユーザーパターンのファイル
ユーザーパターンのファイルは、1行に1つのパターンを含め、UTF-8形式である必要があります。どのパターンを含めるかを選択する際は、非常に一般的なパターンを提供するとtesseractの実行が遅くなる可能性があることに留意してください。ファイルに単一のパターンを設定すると、最適な結果が得られる場合があります。
使用できるパターンの詳細については、trie.hを参照してください。
ユーザーパターンのファイルの例
テキストファイルを作成し、各パターンをUNIX行末(改行文字)で別の行に書き込み、最後に空白行を追加します。例:
\A\A\d\d\d\d\A
ここでは、そのパターンファイルをpath/to/my.patterns
と名付けたものとします。
構成ファイル
APIの場合、ユーザーパターンのファイルに関する情報は、構成ファイルで指定する必要があります。
(CLIでも機能しますが、ユーザーパターンのファイルに直接オプションを設定することもできます。)
構成ファイルの例
テキストファイルを作成し、user_patterns_file
をそのまま書き込みます。その後、1行でパス名を追加し、UNIX行末(改行文字)で最後に空白行を追加します。例:
user_patterns_file path/to/my.patterns
ここでは、その構成ファイルをpath/to/my.patterns.config
と名付けたものとします。
CLIの例
コマンドラインから、ユーザーパターンを次のように呼び出すことができます。
tesseract input.tif output --user-patterns path/to/my.patterns
APIの例
input として次のimage file (Arial.png
) を使用します
次のコードは、そのimage file に対する上記の user patterns file とconfig file を使用します
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
int main()
{
Pix *image;
char *outText;
char *configs[]={"path/to/my.patterns.config"};
int configs_size = 1;
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
if (api->Init(NULL, "eng", tesseract::OEM_LSTM_ONLY, configs, configs_size, NULL, NULL, false)) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
image = pixRead("Arial.png");
api->SetImage(image);
outText = api->GetUTF8Text();
printf(outText);
api->End();
delete api;
delete [] outText;
pixDestroy(&image);
return 0;
}
スクリプトをビルドして実行します
#!/bin/bash
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
g++ -std=c++17 -o my.patterns.api my.patterns.api.cpp -llept -ltesseract
export TESSDATA_PREFIX=~/tessdata_best
./my.patterns.api > Arial-patterns.txt
diff -u Arial-patterns.txt Arial-gt.txt
この画像のuser patterns file を使用すると、認識率は 100% 正しいです。そうしないと、いくつかのエラーがあります
--- Arial-patterns-no.txt 2019-07-05 04:21:04.367188492 +0000
+++ Arial-gt.txt 2019-07-05 04:05:11.000000000 +0000
@@ -1,20 +1,20 @@
DQ2679M
LO6217I
QK2101G
-JBO363H
+JB0363H
KN2873M
-Z2B0929J
+ZB0929J
JF3829W
-YNO0584J
-SVv8400Q
+YN0584J
+SV8400Q
FY4523X
KS0016J
OB3016R
VA4335P
-QHO205V
-UH20932
+QH0205V
+UH2093Z
GW3760Y
-S02306T
+SO2306T
XT8204F
-MR6804|
-0OX5866M
+MR6804I
+OX5866M