21xrx.com
2024-09-19 09:35:30 Thursday
登录
文章检索 我的文章 写文章
Java实现图片文字识别技术 ——从OCR到Tesseract
2023-06-15 09:17:05 深夜i     --     --

Java实现图片文字识别技术 ——从OCR到Tesseract

图片文字识别技术是指计算机通过对图像的处理和分析,进而识别出其中所包含的文字信息。而Java作为一种编程语言,在图像处理方面有着广泛的应用。为此,本文将介绍Java实现图片文字识别的技术,并分享两种主要的方法:OCR和Tesseract。

一、OCR技术

OCR技术即“光学字符识别技术”,是指将印刷体的文字图像扫描后再进行自动识别和转化的过程。这种技术已经应用于现代生活的各个领域中,比如银行的支票处理系统、条码识别系统等。

1. 使用Tess4J库进行OCR

Tess4J是一个Java OCR库,可以通过简单的调用将图片中的文字识别出来。使用该库的主要步骤如下:

1)在build.gradle文件中添加依赖:

dependencies

  implementation 'net.sourceforge.tess4j:tess4j:4.5.4'

2)调用Tesseract实例:

import java.io.File;

import net.sourceforge.tess4j.ITesseract;

import net.sourceforge.tess4j.Tesseract;

import net.sourceforge.tess4j.TesseractException;

public class OCR {

  public static void main(String[] args) throws TesseractException {

    File imageFile = new File("image.png");

    ITesseract instance = new Tesseract();

    instance.setDatapath("tessdata"); //设置语言包目录

    String result = instance.doOCR(imageFile);

    System.out.println(result);

  }

}

在这个例子中,我们将图像文件“image.png”传递给Tesseract实例,并使用设置的语言包目录进行识别。接下来,会输出该图片中所包含的文字信息。

2. 使用Google Cloud Vision API进行OCR

除了Tess4J库外,我们还可以使用Google Cloud Vision API进行OCR识别。该API提供了一种简单的方式,可以直接上传图片,使用HTTP协议进行远程调用,而不需要下载任何依赖。

要使用该API,我们需要进行以下几个步骤:

1)创建Google Cloud账号,并开通Cloud Vision API。

2)在build.gradle文件中添加依赖:

dependencies

  implementation 'com.google.apis:google-api-services-vision:v1-rev535-1.25.0'

3)编写Java代码:

import com.google.api.client.googleapis.json.GoogleJsonResponseException;

import com.google.api.client.http.javanet.NetHttpTransport;

import com.google.api.client.json.JsonFactory;

import com.google.api.client.json.jackson2.JacksonFactory;

import com.google.api.services.vision.v1.Vision;

import com.google.api.services.vision.v1.VisionScopes;

import com.google.api.services.vision.v1.model.AnnotateImageRequest;

import com.google.api.services.vision.v1.model.BatchAnnotateImagesRequest;

import com.google.api.services.vision.v1.model.BatchAnnotateImagesResponse;

import com.google.api.services.vision.v1.model.Feature;

import com.google.api.services.vision.v1.model.Image;

import com.google.api.services.vision.v1.model.TextAnnotation;

import java.io.IOException;

import java.io.InputStream;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

public class OCR {

  public static void main(String[] args) throws IOException {

    InputStream inputStream = OCR.class.getResourceAsStream("/test.jpg");

    Image image = new Image();

    byte[] imageBytes = inputStream.readAllBytes();

    image.encodeContent(imageBytes);

    Vision vision = new Vision.Builder(new NetHttpTransport(), new JacksonFactory(), null)

        .setApplicationName("Google-VisionToText/1.0")

        .setGoogleClientRequestInitializer(request -> request.setDisableGZipContent(true))

        .build();

    Feature feature = new Feature();

    feature.setType("TEXT_DETECTION");

    AnnotateImageRequest request = new AnnotateImageRequest();

    request.setImage(image);

    request.setFeatures(Collections.singletonList(feature));

    BatchAnnotateImagesRequest batchRequest = new BatchAnnotateImagesRequest();

    batchRequest.setRequests(Collections.singletonList(request));

    try {

      BatchAnnotateImagesResponse batchResponse = vision.images().annotate(batchRequest).execute();

      List textAnnotations = batchResponse.getResponses().get(0).getTextAnnotations();

      if (textAnnotations == null || textAnnotations.isEmpty()) {

        System.out.println("文本信息为空");

      } else {

        TextAnnotation text = textAnnotations.get(0);

        System.out.printf("语言:%s\n文本:%s", text.getLocale(), text.getDescription());

      }

    } catch (GoogleJsonResponseException e) {

      System.err.println("Failed to annotate " + e.getContent());

    }

  }

}

在这个例子中,我们首先将图片文件“test.jpg”(存放在src/main/resource文件夹中)读取为输入流,然后将其转化为Google Cloud Vision API所需的图像格式。接着,我们使用VISION API的annotate方法将图像进行识别,返回结果中包含了识别出的文本信息。

二、Tesseract技术

Tesseract是一种自由开源的OCR引擎,由Google开发。它能够简单、准确地识别多种语言,并且可扩展成很多应用程序。Tesseract技术的主要步骤如下:

1)安装Tesseract

为了使用Tesseract,我们需要先将其安装到本地。Windows用户可以前往官方网站(https://github.com/UB-Mannheim/tesseract/wiki)下载安装包进行安装。对于Linux用户,可以使用以下命令进行安装:

sudo apt install tesseract-ocr

2)调用Tesseract API

Java代码可以直接调用Tesseract API进行实现,主要步骤如下:

1)在build.gradle文件中添加依赖:

dependencies

  implementation 'org.apache.commons:commons-lang3:3.11'

  implementation 'com.recognition.software:ocrspace-client:1.0.0'

2)编写Java代码:

import java.io.File;

import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import org.apache.commons.lang3.StringUtils;

import io.github.jonathanlink.OcrSpace;

import io.github.jonathanlink.OcrSpaceApiException;

import io.github.jonathanlink.ocrspace.model.ImageProperties;

import io.github.jonathanlink.ocrspace.model.Language;

import io.github.jonathanlink.ocrspace.model.OcrResult;

public class OCR {

  public static void main(String[] args) throws IOException, OcrSpaceApiException {

    Path path = Paths.get("image.png");

    byte[] fileContent = Files.readAllBytes(path);

    OcrSpace ocrSpace = new OcrSpace();

    ocrSpace.setLanguage(Language.chi_sim);

    ocrSpace.setApiKey("your api key"); // 替换成你自己的 API Key

    ImageProperties imageProperties = new ImageProperties();

    imageProperties.setFileName("image.png");

    OcrResult ocrResult = ocrSpace.parseImage(fileContent, imageProperties);

    String result = StringUtils.join(ocrResult.getOcrText(), "\n");

    System.out.println(result);

  }

}

在这个例子中,我们首先读取图像文件“image.png”,然后将其转化为OcrSpace所需的输入格式。接着,我们通过调用OcrSpace的API,将图像进行识别,最后返回识别出的文本信息。

三、总结

本文介绍了使用Java实现图片文字识别技术的方法,通过Tesseract和Google Cloud Vision API,我们可以方便地实现图片文字的识别功能。此外,本文还提供了相应的Java代码案例,以供学习参考。有关Java图片识别文字技术的关键词包括:OCR,Tesseract,Google Cloud Vision API。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复