Java OCR

Sheeraz Gul 2024年2月15日
  1. Java OCR
  2. Java で OCR を使用する方法
Java OCR

このチュートリアルでは、Java での OCR の実装について説明します。

Java OCR

OCR または Tesseract OCR は、1985 年に HP 研究所によって開発された光学式文字読み取りエンジンであり、2006 年以降は Google によって開発されています。 tesseract OCR は Unicode UTF-8 サポートで動作し、100 を超える言語を検出できます。これが、言語スキャン ソフトウェアの作成に使用される理由です。

最新の Tesseract OCR は、ライン認識に使用される OCR ベースのニューラル ネットワーク システム LSTM を含む tesseract バージョン 4 です。 tesseract OCR は、Java で AI と機械学習を使用して画像処理を実行する機能を提供します。

OCR アプリケーション

OCR のアプリケーションは、次の点で定義できます。

  1. イメージのデータを前処理します。たとえば、フィルター処理、傾き補正、グレースケールへの変換などです。
  2. 単語、セリフ、文字も検出できます。
  3. 後処理で文字を認識し、言語データからの信頼度に基づいて最適な文字を選択します。この言語データには、文法、辞書なども含まれます。
  4. トレーニング データ セットに基づいてランキング リストを生成することもできます。

Java で OCR を使用する方法

Java で OCR を使用するには、次の手順に従います。

  1. まず、Tess4j API をダウンロードします。
  2. ダウンロードしたファイルを解凍します。
  3. OCR の場合、IDE で新しいプロジェクトを作成する必要があります。
  4. 新しいプロジェクトが作成されたら、ビルド パスに jar ファイルをインポートします。
  5. jar ファイルは .\Tess4J-3.4.8-src\Tess4J\dist パスにあります。

上記の方法が機能しない場合は、ダウンロードしたファイルをどこかに解凍し、Eclipse に移動して、[ファイル システムからプロジェクトを開く] オプションを選択し、解凍したフォルダーのパスを選択します。

これにより、tess4j OCR プロジェクトが Eclipse で直接開かれ、クラスを追加してアプリケーションを作成します。

Java で tesseract OCR を使用して、画像からテキストへの変換の簡単な例を試してみましょう。

package tess4jtest;

import java.io.File;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class test {
  public static void main(String[] args) {
    // Instance of tesseract
    Tesseract DemoTesseract = new Tesseract();
    try {
      // path to the tessdata in the extracted folder
      DemoTesseract.setDatapath(
          "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\tessdata");
      // InputPath
      String OutputText = DemoTesseract.doOCR(
          new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample.png"));

      System.out.print(OutputText);
    } catch (TesseractException ex) {
      ex.printStackTrace();
    }
  }
}

上記のコードは、次の画像からテキストを読み取ります。

コードのサンプル画像

上記のコードの出力を見てみましょう。

Demmck is a resource for everyone interested in programming. embedded software, and electronics. It
covers the programming languages like Python‘ CIC++‘ ct and so on in mi: website’sfirstdevelopment
smge. Openrsource hardware alsofalls in the website's scope, like Arduino‘ Raspberry PL and BeagleBone.
Demmckaims to provide tutorials, howito's, and cheat sheets to different levels of developers and
hobbyists

ご覧のとおり、OCR が画像を読み取ろうとしたため、画像の出力が一部変更されています。 次の手書きの例で同じ例を試してみましょう。

コードからの手書きサンプル

次のコード行を変更します。

String OutputText = DemoTesseract.doOCR(
    new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample.png"));

String OutputText = DemoTesseract.doOCR(
    new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample1.png"));

手書きの画像に対する上記のコードの出力は以下のとおりです。

This Is a handwr.' ++en
Exampte
NrHC as good as X"  "Cam.

上記の画像はクリアと見なされますが、クリアされていない画像がある場合はどうなりますか? クリアされていない画像に対して OCR を実行するには、まず画像を処理する必要があります。 例を試してみましょう。

package tess4jtest;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import net.sourceforge.tess4j.*;

public class test {
  public static void ImageProcess(BufferedImage Input_Image, float scaleFactor, float offset)
      throws IOException, TesseractException {
    // First of all, create an empty image buffer
    BufferedImage Output_Image = new BufferedImage(1050, 1024, Input_Image.getType());

    // Now create a 2D platform
    Graphics2D DemoGraphic = Output_Image.createGraphics();

    // draw a new image
    DemoGraphic.drawImage(Input_Image, 0, 0, 1050, 1024, null);
    DemoGraphic.dispose();

    // rescale the OP object for the grey images
    RescaleOp RescaleImage = new RescaleOp(scaleFactor, offset, null);

    // perform scaling
    BufferedImage Buffered_FOP_Image = RescaleImage.filter(Output_Image, null);
    ImageIO.write(Buffered_FOP_Image, "jpg",
        new File(
            "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\output\\output.png"));

    Tesseract DemoTesseract = new Tesseract();

    DemoTesseract.setDatapath(
        "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\tessdata");

    String OutputStr = DemoTesseract.doOCR(Buffered_FOP_Image);
    System.out.println(OutputStr);
  }

  public static void main(String args[]) throws Exception {
    File InputFile =
        new File("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\New folder (3)\\Tess4J\\sample2.png");

    BufferedImage Input_Image = ImageIO.read(InputFile);

    double Image_Double =
        Input_Image.getRGB(Input_Image.getTileWidth() / 2, Input_Image.getTileHeight() / 2);

    // compare the values
    if (Image_Double >= -1.4211511E7 && Image_Double < -7254228) {
      ImageProcess(Input_Image, 3f, -10f);
    } else if (Image_Double >= -7254228 && Image_Double < -2171170) {
      ImageProcess(Input_Image, 1.455f, -47f);
    } else if (Image_Double >= -2171170 && Image_Double < -1907998) {
      ImageProcess(Input_Image, 1.35f, -10f);
    } else if (Image_Double >= -1907998 && Image_Double < -257) {
      ImageProcess(Input_Image, 1.19f, 0.5f);
    } else if (Image_Double >= -257 && Image_Double < -1) {
      ImageProcess(Input_Image, 1f, 0.5f);
    } else if (Image_Double >= -1 && Image_Double < 2) {
      ImageProcess(Input_Image, 1f, 0.35f);
    }
  }
}

上記のコードは、最初にノイズの多い画像を処理してから、画像テキストを読み取ろうとします。 このコードに使用される画像は以下のとおりです。

不鮮明な画像のサンプル

出力を参照してください。

I liVEI'` 1W,
Every :10 I 0
£0 Workyéy git;
A/Jo T would
M: £0 visié MW

OCR の長所と短所

Java で OCR を使用する利点は次のとおりです。

  1. オフィスなどでの作業効率アップに貢献します。
  2. OCR により、コンテンツが損なわれていないことが保証され、時間を節約できます。
  3. tesseract OCR は、指定されたコンテンツを即座に検索できるため、非常に便利です。
  4. 作業者の手作業を省きます。

OCR の欠点は次のとおりです。

  1. OCR は言語認識のみに限定されます。
  2. この OCR は、コンテンツの 100% の精度を提供しません。
  3. この OCR は、トレーナー データを作成するために多くの労力を必要とします。
  4. OCR のパフォーマンスは画像に基づいているため、より良い結果を得るために画像をさらに処理する必要がある場合があります。
著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook