자바 OCR

Sheeraz Gul 2023년10월12일
  1. 자바 OCR
  2. Java에서 OCR을 사용하는 방법
자바 OCR

이 자습서는 Java에서 OCR을 구현하는 방법을 보여줍니다.

자바 OCR

OCR 또는 Tesseract OCR은 1985년 HP 연구소에서 개발한 광학 문자 판독 엔진으로 2006년부터 Google에서 개발했습니다. tesseract OCR은 유니코드 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. .\Tess4J-3.4.8-src\Tess4J\dist 경로에서 jar 파일을 찾을 수 있습니다.

위의 방법이 작동하지 않으면 다운로드한 파일을 어딘가에 추출하고 Eclipse로 이동하여 파일 시스템에서 프로젝트 열기 옵션을 선택하고 추출된 폴더의 경로를 선택합니다.

이렇게 하면 Eclipse에서 직접 tess4j OCR 프로젝트가 열리고 클래스를 추가하여 애플리케이션을 생성합니다.

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