欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java使用Tess4j 识别图片文字

程序员文章站 2022-04-15 14:38:06
...

最近在搞图片识别的功能,这里记录下进度

公司是希望自己做,不使用商业化的图片识别,于是我找到了开源的  tessreact ,目前只有它支持中文

经过几天的研究,发现这个东西基本都是通过安装软件,然后调用cmd 命令实现的,很是麻烦

我找到了tess4j ,tess4j 整合了tessreact的dll,只需要简单的几句话就可以运行了

如果你 打不开 tess4j 官网,那你就需要vpn了,目前国内的vpn服务都挂了,我给大家推荐 蓝灯(*)


下载好 tess4j 后 解压

java使用Tess4j 识别图片文字


创建maven项目 ,将tessdata放到项目根目录

java使用Tess4j 识别图片文字


在pom.xml 中引用

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

有点耐心,可能会很慢,tess4j 要引用的依赖包 很多


要识别中文,你还需要 下载中文语言包 ,chi_sim.traineddata

来这找吧,都是语言包


准备工作做完,创建一个java类,测试

 File imageFile = new File("C:\\Users\\1\\Desktop\\其他\\IMG_1345.JPG");    
        ITesseract instance = new Tesseract();  // JNA Interface Mapping    
//         ITesseract instance = new Tesseract1(); // JNA Direct Mapping    
        instance.setLanguage("chi_sim");//添加中文字库  
        try {    
            String result = instance.doOCR(imageFile);    
            System.out.println(result);    
        } catch (TesseractException e) {    
            System.err.println(e.getMessage());    
        } 

运行成功,但是 识别的好慢,要10多秒


有些人会出现下面的异常,其实我也出现了


Exception in thread "main" java.lang.UnsatisfiedLinkError: 找不到指定的模块。

	at com.sun.jna.Native.open(Native Method)
	at com.sun.jna.Native.open(Native.java:1759)
	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
	at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
	at com.sun.jna.Library$Handler.<init>(Library.java:147)
	at com.sun.jna.Native.loadLibrary(Native.java:412)
	at com.sun.jna.Native.loadLibrary(Native.java:391)
	at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(LoadLibs.java:81)
	at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42)
	at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:367)
	at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:280)
	at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:212)
	at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:196)
	at com.xueyou.orc.Identify.main(Identify.java:13)


对于这个异常,我查找了好半天,最终发现 是 tess4j包 的引用版本问题,我之前 引用的是 3.4.0 版本,后来才改成 3.2.1版本

还有一种说法,tesseract-orc 中的 dll 在windos下是通过vc2013 编译的,需要你安装相应的工具包

我安了,没什么卵用


现在最大的问题是两个 

1.中文训练好麻烦

2.识别时间太长