Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)

由于需要在应用中将原本的身份认证手动提交身份信息改为用户上传身份证照自动提取信息,提升用户体验,第一时间想到阿里云等平台的收费服务及开源技术Tesseract-OCR(Tesseract-OCR提供了全套训练工具,可降低开发成本,需要下载客户端使用),同时提供了tess4j(tess4j是Java对Tesseract-OCR的封装,使Java应用程序可以调用tess4j API使用Tesseract-OCR),这里先体验一下开源技术tess4j。

一、tess4j实现提取图片信息

1、创建一个maven普通Java项目,标记部分为后面添加。

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第1张图片

2、添加tess4j相关依赖。如果非maven工程需下载源码包,将源码包下的lib文件夹拷贝至项目下,下一步的图片中显示了源码包目录结构

        
        
            net.sourceforge.tess4j
            tess4j
            3.2.1
        

3、下载源码包

tess4j源码包:https://sourceforge.net/projects/tess4j/

中文库地址:https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata

其他语言包地址:https://github.com/tesseract-ocr/tessdata

3.1、下载tess4j源码包并解压

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第2张图片

3.2、将tess4j里的文件夹tessdata拷贝至项目根目录,与src同级。

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第3张图片

3.3、tessdata默认只有英文库eng.traineddata,识别中文需要下载中文包并将中文包拷贝至tessdata里eng.traineddata同级目录下。

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第4张图片

4、在项目中创建图片资源目录,存放本地图片供识别使用,这里在根目录创建并存入几张中、英文、数字图片。

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第5张图片

5、编写测试类。


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

/**
 *  tess4j测试类
 */

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

                //创建ITesseract接口的实现实例对象
                ITesseract iTesseract = new Tesseract();
                //设置tessdata训练库语言包地址,项目根目录下为默认地址可不设置
//                iTesseract.setDatapath("E:\IDEA\IntelliJ IDEA 2019.1.3\IdeaProjects\Tess4jDemo\tessdata");
                //默认识别英文
                //如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中
//                iTesseract.setLanguage("chi_sim");

                // 指定本地图片
                File img = new File("E:\\IDEA\\IntelliJ IDEA 2019.1.3\\IdeaProjects\\Tess4jDemo\\Tess4jImages\\num.jpg");
                //开始识别时间
                long startTime = System.currentTimeMillis();
                //识别结果
                String ocrResult = iTesseract.doOCR(img);
                // 输出识别结果
                System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms");
                System.out.println("识别结果: \n" + ocrResult );

    }
}

6、运行结果

6.1、数字图片识别

6.1.1

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第6张图片

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第7张图片

6.1.2

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第8张图片

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第9张图片

6.2、英文图片识别。

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第10张图片

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第11张图片

6.3、中文图片识别,将代码中设置中文库的代码注释取消

6.3.1

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第12张图片

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第13张图片

6.3.2

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第14张图片

Java使用Tesseract-OCR文字识别(Java调用tess4j提取图片中文、英文、数字信息)_第15张图片

 

结果很明显:在简单环境下,印刷体,数字识别最好,中、英文识别差不多效果一般,复杂环境下,识别效果都很差,必须使用官方提供的训练工具对各种场景提升识别能力

 

你可能感兴趣的:(Java,Java,Tesseract-OCR,tess4j)