java读取图片、PDF中图片上的文字

读取图片上的文字


提示:本文是基于tess4j


前言

总是有一些与众不同的需求在等着研发人员去探索,本文介绍如何通过java读取图片上的文字。


一、tess4j是什么?

说tess4j之前,先说说Tesseract,因为tess4j是基于它的封装。

Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。Tesseract目前已作为开源顶目发布在GoogleProject,它与Leptonica图片处理库结合,可以读取各种格式的图像并将它们转化成超过60种语言的文本,我们还可以不断训 练自己的库,使图像转换文本的能力不断增强,如果团队深度需要,还可以以它为模板,开发出等合自身需求的OCR引擎。

Tess4J 是Java (JNA) 对 Tesseract OCR API 的封装。

Tesseract:https://tesseract-ocr.github.io/

Tess4J官网:http://tess4j.sourceforge.net/codesample.html

语言库:(需要科学上网下载)

https://github.com/tesseract-ocr/tessdata

https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata


Tess4J是Tesseract在Java PC上的应用。在英文和数字识别中性能还是不错的,但是在中文识别中,无论速度还是识别率还是较弱,建议有条件的话,针对场景进行训练,会获得较好结果,本文仅对目前Tess4J的中文识别进行简单介绍 。

二、使用步骤

1.POM引入库

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

2.实例代码

    public static void main1(String[] args) throws IOException {
    
    
        Tesseract tesseract = new Tesseract();
        //设置语言库位置
        tesseract.setDatapath("/xxx/tessdata");
        //设置语言类型
        tesseract.setLanguage("chi_sim");
        //img
        BufferedImage image = ImageIO.read(new File("a.png"));
        try  {
    
    
            String result = tesseract.doOCR(image);
            //PDF
            //String result = tesseract.doOCR(new File("xxx.pdf"));
            System.out.println(result);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

对代码进行说明:
支持操作图片:支持jpg、png等格式的图片。
支持操作PDF。
代码其实不多,因为已经封装了很多细节,我们只需要知道是借助Tesseract实体,通过给他设置语言库和操作语言来实现OCR光学识别。
<

我这里将语言库打包了,有需要的伙伴可以下载:

https://download.csdn.net/download/qq_38653981/87695195


在这里插入图片描述
在这里插入图片描述

其实Tesseract支持渲染格式类型有很多,上面一个枚举其实可以看到,所以不仅仅是图片,比如PDF也是支持的,原理基本都是OCR光学识别,当然,越清楚识别的越精准,如果有特殊要求,比如识别手写的内容,需要做语言训练,说白了就是要新增语言库的识别对应关系,不然程序没法匹配出来特殊的字,比如草书、特定签名、特殊标识等。

如果需要针对手写中文等特殊处理的字进行训练,可以参考这位朋友写的博客:
https://blog.csdn.net/weixin_29254673/article/details/113322249

总结

网上有很多操作的实现方式,我只是针对Tess4J进行了研究学习,更多的细节其实可以多去看看源码,里面有一些更深入的讲解,Tesseract因为涉及安装,所以操作有点麻烦,但是更加精准。一般我们项目开发,还是结合使用最佳,关键的东西就是语言库,这个东西只要完善了,Tess4J会很强大。
以上就是本次分享的内容,欢迎大家点赞学习

猜你喜欢

转载自blog.csdn.net/qq_38653981/article/details/130183351