java 使用tess4J(Tesseract-OCR)进行图片文字识别

java中识别文字使用的软件是tesseractocr(使用的版本是3.02,3以后的版本才支持中文),这个软件需要安装在本地电脑中,安装的过程中全部都按照默认进行安装(以便于Java直接调用)

中文训练库下载地址 

http://download.csdn.net/download/wsk1103/10268436

该软件默认的识别的是英文,如果相要能识别中文,需要将中文的训练文本chi_sim.traineddata存放到C:\Program Files (x86)\Tesseract-OCR\tessdata中,其中该中文训练文本解压后39M左右,遗憾的是如果想要识别中英文的话,还得继续谷歌搜索一下,在这里就不列出来了。 
如果想要识别中英文混合的话,参考—基于百度API图片文字识别:

这个识别率就比较高了
http://blog.csdn.net/wsk1103/article/details/79316220

package com.sinosoft.yjcz.util.readImage;
import net.sourceforge.tess4j.Tesseract;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;


/**
 *  ZQQ on 2018/6/26.
 */
@SuppressWarnings("all")
public class OCR {
    /**
     *
     * @param srImage 图片路径
     * @param ZH_CN 是否使用中文训练库,true-是
     * @return 识别结果
     */
    public static String FindOCR(String srImage, boolean ZH_CN) {
        try {
            System.out.println("start");
            double start=System.currentTimeMillis();
            File imageFile = new File(srImage);
            if (!imageFile.exists()) {
                return "图片不存在";
            }
            BufferedImage textImage = ImageIO.read(imageFile);
            Tesseract instance=Tesseract.getInstance();
            instance.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");//设置训练库
            if (ZH_CN)
                instance.setLanguage("chi_sim");//中文识别
            String result = null;
            result = instance.doOCR(textImage);
            double end=System.currentTimeMillis();
            System.out.println("耗时"+(end-start)/1000+" s");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "发生未知错误";
        }
    }

}

异常 处理
1. Exception in thread “main” java.lang.Error: Invalid memory access 
这个异常表示没有设置训练库的位置 
2. 不是有效的win32程序 
尝试重新安装一下tesseractocr 
安装的路径默认就可以了。 
3. Exception in thread “main” java.lang.UnsupportedClassVersionError: net/sourceforge/tess4j/Tesseract : 
发生该异常的原因是JDK版本低于1.7,使用1.7以上即可解决问题。 
其他: 
1. 提高识别率:使用百度开发者平台提供的API 
http://blog.csdn.net/wsk1103/article/details/79316220

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot与Tesseract-OCR结合使用可以实现图片识别文字的功能。下面是四种实现方式: 1. 使用Tesseract-OCR命令行工具 ```java import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class TesseractOCRCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { // 调用Tesseract-OCR命令行工具进行图片识别文字 String command = "tesseract image.png output"; Process process = Runtime.getRuntime().exec(command); process.waitFor(); } } ``` 2. 使用Tesseract-OCRJava API ```java import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException; import org.springframework.stereotype.Component; @Component public class TesseractOCRJavaAPI { public String recognizeText(String imagePath) throws TesseractException { Tesseract tesseract = new Tesseract(); tesseract.setDatapath("path/to/tessdata"); // 设置tessdata目录的路径 return tesseract.doOCR(new File(imagePath)); } } ``` 3. 使用Spring Boot集成的Tesseract-OCR Starter 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j-spring-boot-starter</artifactId> <version>4.5.1</version> </dependency> ``` 然后在代码中使用TesseractOCRService进行图片识别文字: ```java import net.sourceforge.tess4j.TesseractException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class TesseractOCRService { @Autowired private TesseractOCR tesseractOCR; public String recognizeText(String imagePath) throws TesseractException { return tesseractOCR.doOCR(new File(imagePath)); } } ``` 4. 使用Spring Boot集成的Tesseract-OCR Starter和Spring Cloud Stream 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j-spring-boot-starter</artifactId> <version>4.5.1</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka</artifactId> </dependency> ``` 然后在代码中使用TesseractOCRProcessor进行图片识别文字: ```java import net.sourceforge.tess4j.TesseractException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.cloud.stream.messaging.Processor; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.stereotype.Component; @Component @EnableBinding(Processor.class) public class TesseractOCRProcessor { @Autowired private TesseractOCR tesseractOCR; @StreamListener(Processor.INPUT) public void processImage(@Payload byte[] imageBytes) throws TesseractException { String text = tesseractOCR.doOCR(imageBytes); // 处理识别到的文字 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值