1. 概要

AIと機械学習の技術の進歩に伴い、画像内のテキストを認識するためのツールが必要になります。

このチュートリアルでは、光学式文字認識(OCR)エンジンであるTesseractについて、画像からテキストへの処理の例をいくつか紹介します。

2. 正八胞体

正八胞体 HPが開発したオープンソースのOCRエンジンであり、 表意文字および右から左への言語のサポートとともに、100を超える言語を認識します。 また、 他の言語を認識するようにTesseractをトレーニングできます

画像処理用の2つのOCRエンジン– LSTM(Long Short Term Memory)OCRエンジンと、文字パターンを認識することで機能するレガシーOCRエンジンが含まれています。

OCRエンジンは、レプトニカライブラリを使用して画像を開き、プレーンテキスト、hOCR(HTML for OCR)、PDF、TSVなどのさまざまな出力形式をサポートします。

3. 設定

Tesseractは、すべての主要なオペレーティングシステムでダウンロード/インストールできます。

たとえば、macOSを使用している場合、Homebrewを使用してOCRエンジンをインストールできます。

brew install tesseract

パッケージには、デフォルトで、英語、方向およびスクリプト検出(OSD)などの言語データファイルのセットが含まれていることがわかります。

==> Installing tesseract 
==> Downloading https://homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz
==> Pouring tesseract-4.1.1.high_sierra.bottle.tar.gz
==> Caveats
This formula contains only the "eng", "osd", and "snum" language data files.
If you need any other supported languages, run `brew install tesseract-lang`.
==> Summary
/usr/local/Cellar/tesseract/4.1.1: 65 files, 29.9MB

ただし、他の言語をサポートするためにtesseract-langモジュールをインストールできます。

brew install tesseract-lang

Linuxの場合、yumコマンドを使用してTesseractをインストールできます。

yum install tesseract

同様に、言語サポートを追加しましょう。

yum install tesseract-langpack-eng
yum install tesseract-langpack-spa

ここでは、英語とスペイン語の言語トレーニングデータを追加しました。

Windowsの場合、インストーラーは Tesseract at UBMannheimから入手できます。

4. Tesseractコマンドライン

4.1. 走る

Tesseractコマンドラインツールを使用して、画像からテキストを抽出できます。

たとえば、私たちのWebサイトのスナップショットを撮りましょう。

次に、 tesseract コマンドを実行して、 baeldung.png スナップショットを読み取り、output.txtファイルにテキストを書き込みます。

tesseract baeldung.png output

output.txtファイルは次のようになります。

a REST with Spring Learn Spring (new!)
The canonical reference for building a production
grade API with Spring.
From no experience to actually building stuff.
y
Java Weekly Reviews

Tesseractが画像のコンテンツ全体を処理していないことがわかります。 出力の精度は、画質、言語、ページセグメンテーション、トレーニング済みデータ、画像処理に使用されるエンジンなどのさまざまなパラメータに依存するためです。

4.2. 言語サポート

デフォルトでは、OCRエンジンは画像の処理時に英語を使用します。 ただし、-l引数を使用して言語を宣言できます。

多言語テキストを使用した別の例を見てみましょう。

まず、デフォルトの英語で画像を処理しましょう。

tesseract multiLanguageText.png output

出力は次のようになります。

Der ,.schnelle” braune Fuchs springt
iiber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marron rapido salta sobre el perro
perezoso. A raposa marrom rapida
salta sobre 0 cao preguicoso.

次に、ポルトガル語で画像を処理しましょう。

tesseract multiLanguageText.png output -l por

したがって、OCRエンジンはポルトガル語の文字も検出します。

Der ,.schnelle” braune Fuchs springt
iber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marrón rápido salta sobre el perro
perezoso. A raposa marrom rápida
salta sobre o cão preguiçoso.

同様に、言語の組み合わせを宣言できます。

tesseract multiLanguageText.png output -l spa+por

ここでは、OCRエンジンは主にスペイン語を使用し、次にポルトガル語を画像処理に使用します。 ただし、出力は、指定した言語の順序によって異なる場合があります。

4.3. ページセグメンテーションモード

Tesseractは、OSD、自動ページセグメンテーション、スパーステキストなどのさまざまなページセグメンテーションモードをサポートしています。

さまざまなモードで値0〜13の –psm 引数を使用して、ページセグメンテーションモードを宣言できます。

tesseract multiLanguageText.png output --psm 1

ここでは、値1を定義することにより、画像処理用のOSDによる自動ページセグメンテーションを宣言しました。

サポートされているすべてのページセグメンテーションモードを見てみましょう。

4.4. OCRエンジンモード

同様に、画像の処理中に、レガシーエンジンやLSTMエンジンなどのさまざまなエンジンモードを使用できます。

このために、0から3の値で –oem引数を使用できます。

tesseract multiLanguageText.png output --oem 1

OCRエンジンモードは次のとおりです。

4.5. Tessdata

Tesseractには、LSTMOCRエンジン用の2セットのトレーニング済みデータが含まれています。ベストトレーニング済みLSTMモデルトレーニング済みLSTMモデルの高速整数バージョンです。

前者はより良い精度を提供し、後者は画像処理のより良い速度を提供します。

また、Tesseractは、レガシーエンジンとLSTM OCRエンジンの両方をサポートする、結合されたトレーニング済みデータを提供します。

サポートするトレーニング済みデータを提供せずにレガシーOCRエンジンを使用すると、Tesseractはエラーをスローします。

Error: Tesseract (legacy) engine requested, but components are not present in /usr/local/share/tessdata/eng.traineddata!!
Failed loading language 'eng'
Tesseract couldn't load any languages!

したがって、必要な .traineddata ファイルをダウンロードして、デフォルトの tessdata の場所に保持するか、 –tessdata-dir引数を使用して場所を宣言する必要があります。

tesseract multiLanguageText.png output --tessdata-dir /image-processing/tessdata

4.6. 出力

必要な出力形式を取得するための引数を宣言できます。

たとえば、検索可能なPDF出力を取得するには:

tesseract multiLanguageText.png output pdf

これにより、提供された画像上に検索可能なテキストレイヤー(認識されたテキストを含む)を含むoutput.pdfファイルが作成されます。

同様に、hOCR出力の場合:

tesseract multiLanguageText.png output hocr

また、tesseractコマンドラインの使用法の詳細については、 tesseract –helpおよびtesseract –help-extraコマンドを使用できます。

5. Tess4J

Tess4Jは、Tesseract APIのJavaラッパーであり、JPEG、GIF、PNG、BMPなどのさまざまな画像形式のOCRサポートを提供します。

まず、最新の tess4jMaven依存関係をpom.xmlに追加しましょう。

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.1</version>
</dependency>

次に、tess4jによって提供されるTesseractクラスを使用して、画像を処理できます。

File image = new File("src/main/resources/images/multiLanguageText.png");
Tesseract tesseract = new Tesseract();
tesseract.setDatapath("src/main/resources/tessdata");
tesseract.setLanguage("eng");
tesseract.setPageSegMode(1);
tesseract.setOcrEngineMode(1);
String result = tesseract.doOCR(image);

ここでは、datapathの値をosd.traineddataおよびeng.traineddataファイルを含むディレクトリの場所に設定しました。

最後に、処理された画像のString出力を確認できます。

Assert.assertTrue(result.contains("Der ,.schnelle” braune Fuchs springt"));
Assert.assertTrue(result.contains("salta sopra il cane pigro. El zorro"));

さらに、setHocrメソッドを使用してHTML出力を取得できます。

tesseract.setHocr(true);

デフォルトでは、ライブラリは画像全体を処理します。 ただし、 doOCR メソッドを呼び出しながら、 java.awt.Rectangle オブジェクトを使用して、画像の特定のセクションを処理できます。

result = tesseract.doOCR(imageFile, new Rectangle(1200, 200));

Tess4Jと同様に、 Tesseract Platform を使用して、TesseractをJavaアプリケーションに統合できます。 これは、JavaCPPプリセットライブラリに基づくTesseractAPIのJNIラッパーです。

6. 結論

この記事では、画像処理の例をいくつか使用して、TesseractOCRエンジンについて説明しました。

最初に、 tesseract コマンドラインツールを調べて、 -l –psm などの一連の引数とともに画像を処理しました。 oem

次に、TesseractをJavaアプリケーションに統合するためのJavaラッパーであるtess4jについて説明しました。

いつものように、すべてのコード実装はGitHub利用できます。