Tesseractによる光学式文字認識
1. 概要
AIと機械学習の技術の進歩に伴い、画像内のテキストを認識するためのツールが必要になります。
このチュートリアルでは、光学式文字認識(OCR)エンジンであるTesseractについて、画像からテキストへの処理の例をいくつか紹介します。
2. 正八胞体
正八胞体 HPが開発したオープンソースのOCRエンジンであり、
画像処理用の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で利用できます。