JAVA——Tess4J简单的图像识别DEMO

2022-09-05 15:38:22 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

基本概念

Tesseract Open Source OCR Engine :包含一个OCR引擎libtesseract和一个命令行程序tesseract。Tesseract 4添加了一个新的基于LSTM的OCR引擎,该引擎专注于行识别,但仍支持Tesseract 3的传统Tesseract OCR引擎,该引擎通过识别字符模式进行工作。通过使用传统OCR引擎模式(–oem 0),可以与Tesseract 3兼容。它还需要训练有素的数据文件来支持旧式引擎,例如tessdata存储库中的文件。

Tess4J:Tesseract OCR API的 Java JNA包装器。

Maven

代码语言:javascript复制
<dependencies>
        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.4.0</version>
        </dependency>
 </dependencies>

GitHub

Tesseract Open Source OCR Engine :https://github.com/tesseract-ocr/tesseract Tess4J项目:https://github.com/nguyenq/tess4j 语言库:https://github.com/tesseract-ocr/tessdata/blob/master/eng.traineddata

DEMO

1、首先创建一个新的maven项目,将所需jar包引入pom.xml

2、在任意地方创建一个文件夹tessdata,将下载的chi_sim.traineddata 和 eng.traineddata语言包存放在该目录下,也可以直接存放到自己项目的resources/tessdata目录下。

3、编写代码

代码语言:javascript复制
         // 识别图片的路径(修改为自己的图片路径)
        String path = "D:\test.jpg";

        // 语言库位置(修改为跟自己语言库文件夹的路径)
        String lagnguagePath = "D:\tessdata";

        File file = new File(path);
        ITesseract instance = new Tesseract();

        //设置训练库的位置
        instance.setDatapath(lagnguagePath);

        //chi_sim :简体中文, eng    根据需求选择语言库
        instance.setLanguage("eng");
        String result = null;
        try {
            long startTime = System.currentTimeMillis();
            result =  instance.doOCR(file);
            long endTime = System.currentTimeMillis();
            System.out.println("Time is:"   (endTime - startTime)   " 毫秒");
        } catch (TesseractException e) {
            e.printStackTrace();
        }

        System.out.println("result: ");
        System.out.println(result);

5、可选步骤:配置环境变量(TESSDATA_PREFIX) 环境变量地址指向你存放语言包的文件夹路径,如:我的语言包路径在 D:tessdata

运行结果

以一张简单的图片为例:图片放置在D:test.png根目录下,因此使用代码测试前需要修改代码中指定的两个路径!!!

识别图片:

运行代码后:

常见问题

解决chi_sim.traineddata报read_params_file: parameter not found: allow_blob_division

Warning: Invalid resolution 0 dpi. Using 70 instead.

关于tesseract 出错信息:read_params_file: Can’t open chi_sim

扩展学习

提高识别率

1.对称近邻均值滤波

参考: http://blog.csdn.net/fangbinwei93/article/details/50562449

2.指定config为digits,并修改tessdataconfigsdigits文件,将白名单中设置需要识别的内容。如只需要识别数字,则指定whitelist为0123456789即可。

也可在程序中指定:

参考: http://blog.csdn.net/hellousb2010/article/details/39477859

3.尽量指定图像的一块区域识别。比如验证码起始位置和结束位置很多空白的,可以去掉,只对验证码区域做识别。

4.训练字库,提升识别率

参考: http://blog.csdn.net/white0blue/article/details/47972405 http://blog.csdn.net/tuling_research/article/details/41091163

其他参考

tesseract-ocr参数:http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version

参考文章

https://www.jianshu.com/p/ef60ef5395c5

https://www.cnblogs.com/asker009/p/11098220.html

https://blog.csdn.net/qincidong/article/details/82781361

https://blog.csdn.net/zai_xia/article/details/80003778

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135530.html原文链接:https://javaforall.cn

0 人点赞