当前位置:首页 > Java

java如何使用ocr

2026-03-21 11:19:34Java

使用Tesseract OCR进行Java文本识别

Tesseract是一个开源的OCR引擎,支持多种语言。在Java中可以通过Tesseract的Java封装库(如tess4j)进行调用。

依赖配置
在Maven项目中添加tess4j依赖:

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

代码示例

import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import java.io.File;

public class OCRExample {
    public static void main(String[] args) {
        Tesseract tesseract = new Tesseract();
        tesseract.setDatapath("path/to/tessdata"); // 设置Tesseract数据目录
        tesseract.setLanguage("eng"); // 设置识别语言(如"eng"表示英文)

        try {
            String result = tesseract.doOCR(new File("path/to/image.png"));
            System.out.println(result);
        } catch (TesseractException e) {
            e.printStackTrace();
        }
    }
}

使用OpenCV和Tesseract结合

OpenCV可用于预处理图像(如降噪、二值化),提高OCR识别率。

依赖配置

<dependency>  
    <groupId>org.openpnp</groupId>  
    <artifactId>opencv</artifactId>  
    <version>4.5.5-1</version>  
</dependency>  

预处理图像示例

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ImagePreprocessor {
    static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

    public static void preprocess(String inputPath, String outputPath) {
        Mat image = Imgcodecs.imread(inputPath, Imgcodecs.IMREAD_GRAYSCALE);
        Imgproc.threshold(image, image, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);
        Imgcodecs.imwrite(outputPath, image);
    }
}

使用Google Cloud Vision API

Google Cloud Vision提供高精度的OCR服务,适合商用场景。

依赖配置

<dependency>  
    <groupId>com.google.cloud</groupId>  
    <artifactId>google-cloud-vision</artifactId>  
    <version>3.0.0</version>  
</dependency>  

代码示例

java如何使用ocr

import com.google.cloud.vision.v1.*;
import com.google.protobuf.ByteString;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CloudVisionOCR {
    public static void detectText(String filePath) throws IOException {
        List<AnnotateImageRequest> requests = new ArrayList<>();
        ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath));

        Image img = Image.newBuilder().setContent(imgBytes).build();
        Feature feat = Feature.newBuilder().setType(Feature.Type.TEXT_DETECTION).build();
        AnnotateImageRequest request = AnnotateImageRequest.newBuilder()
                .addFeatures(feat)
                .setImage(img)
                .build();
        requests.add(request);

        try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
            BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
            for (AnnotateImageResponse res : response.getResponsesList()) {
                System.out.println(res.getTextAnnotationsList().get(0).getDescription());
            }
        }
    }
}

注意事项

  • Tesseract数据文件:需下载tessdata语言包(如eng.traineddata)并指定路径。
  • 图像质量:OCR效果依赖图像清晰度,预处理(如去噪、增强对比度)可显著提升结果。
  • 云服务限制:Google Cloud Vision等API有调用次数限制,需注册账号并配置密钥。

分享给朋友:

相关文章

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io.Fil…

java如何生成随机数

java如何生成随机数

生成随机数的方法 在Java中生成随机数可以通过多种方式实现,以下是几种常见的方法: 使用Math.random()方法 Math.random()方法返回一个double类型的伪随机数,范围在[0…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…

java如何遍历map

java如何遍历map

遍历Map的几种方法 在Java中,遍历Map有多种方式,可以根据需求选择合适的方法。以下是常见的几种遍历方式: 使用entrySet遍历 通过entrySet()方法获取键值对的集合,可以同时访问…

如何导入java项目

如何导入java项目

导入Java项目的方法 使用IDE导入(如IntelliJ IDEA或Eclipse) 打开IDE后选择导入现有项目,导航至项目根目录(包含pom.xml或build.gradle的文件位置)。IDE…

react thunk 如何使用

react thunk 如何使用

使用 React Thunk 的基本步骤 安装 Redux 和 Redux Thunk 作为依赖项: npm install redux redux-thunk 在 Redux store 配置中应…