コンテンツにスキップします。

ユーザーパターンの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 fileconfig 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