美文网首页
详细教程:Java如何使用Tess4J进行ocr识别

详细教程:Java如何使用Tess4J进行ocr识别

作者: 54番茄 | 来源:发表于2020-06-11 16:04 被阅读0次

    一、什么是OCR(Optical Character Recognition)?

       先了解下概念,ORC即光学字符识别,简单讲就是对图片文件中的文字进行分析识别,获取的过程。在很多生活场景中都用到,如车牌的扫描识别、身份证扫描识别、图片文本内容识别等。
       Tesseract是一个著名的开源OCR引擎,初期是由惠普实验室研发,后期开源,由Google改进优化升级,目前查到windows最新的安装包版本已经到了setup-v5.0.0.20190623.exeMacbrew下载默认的是Tesseract 4.0.0Linux的是Tesseract 4.1.1,想训练字库提高OCR识别率,可以下载window安装包下载地址以及训练工具jTessBoxEditorFX-2.3.0.zip(FX为中文训练软件)。我先入手的window版本的,毕竟Tess4J的jar包中附带了编译好的dll文件上手更快,训练教程文档后面在整理。
       Tess4J是对Tesseract OCR APIJava JNA 封装。使java能够通过调用Tess4J的API来使用Tesseract OCR。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF。这个开始接触的时候,我对这两个东西还搞混淆了。明确说一下,Tess4J是java直接可使用的jar包,而Tesseract OCR是支持Tess4J进文件文字识别的基础,Tess4J可直接使用Maven方式引入。
    备注:本人尝试了下Tess4J最新版本但是会报错找不到模块,最后选着了4.4.0这个版本做的调试。

    二、项目搭建

       好了,闲话少叙,废话少说,咱们开始进入正题,先以windows环境开始。
    1.  新建一个maven工程,引入Tess4J的依赖,等待maven下载(下载不下来的自己用下面的地址下然后安装到本地Maven仓库Tess4j Maven地址
    POM依赖如下:

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

    2.  引入依赖成功后,我们打开tess4j的jar包,可以发现在包内已经有编译好的dll库,这个是支持window环境动态库,我们在调用tess4j进行图片识别时,它会先把包内的dll拷贝到新创建的临时目录,同时语言库也是一样,这个Tess4j会自动完成的,我们直接调用就可以了。

    Tess4j jar包结构
    3.  下载Tess4j的所需要的语言库,我下载了chi_sim.traineddata(中文简体)语言库,存放自定义目录下,(网上有说放入可以直接放入项目resources目录下,本人试了几次,总是报错,后期考虑可能替换自己的训练库,就不在纠结放在项目中了,这样可以随时替换)。其他语言库可根据自己需求选择下载:tessdata语言库下载地址
    ok,上代码:
        public void testDoOCR_ImageByte(byte[] imageByte) {
            logger.info("doOCR on a jpg image");
            try {
                InputStream sbs = new ByteArrayInputStream(imageByte);
                BufferedImage img = ImageIO.read(sbs);
                ITesseract instance = new Tesseract();
                //设置语言库所在的文件夹位置,最好是绝对的,不然加载不到就直接报错了
                instance.setDatapath("/Users/用户/Desktop/tessdata");
                //设置使用的语言库类型:chi_sim 中文简体
                instance.setLanguage("chi_sim");
                String result = instance.doOCR(img);
                logger.info("扫描的文本:"+result);
            } catch (Exception e) {
                logger.error("扫描图片文本错误:{}", e);
            }
        }
    
    运行结果

    总结:最简单最快速的ocr图文识别项目就完成了。在了解Tess4j前,我对百度AipOcr、有道的ORC,先进行了学习,对比Tess4j后,不管是识别率还是速度,都相差甚远,这个是正常的毕竟人家有强大的GPU在后面支持呢,但是Tess4j最大的优势就开源且免费,并且可以部署私有云,像百度、有道云这些部署私有云的费用是相当可观的啊。不知道增加图片的训练后能否提高Tess4j效率啊。

    三、MAC环境下使用Tess4j进行调试

    Mac OS系统上没法直接使用Tess4j包,需要安装tesseract,因为没有编译好的dylib动态库,所以需要在此环境下安装Tesseract-OCR引擎,这个里面是有dylib动态库来支持Tess4j进行图文识别。
    打开终端,我用的Homebrew命令安装的:

    在mac中使用 brew install 安装的软件默认都是最新版本的
    brew install tesseract
    

    安装开始会存在权限问题,因为Tesseract我是先安装完了在进行的文档整理,所以详细的安装已经没有记录了,获取权限后就可以安装了,我这里没出现什么奇怪的问题。
    安装完成后,查看一下版本:

    tesseract --version
    
    安装完成查看tesseract版本信息
    在终端使用命令测试Tesseract识别功能,如下:
    完整命令:
    tesseract /Users/用户/Desktop/ceshitupian.png  wenben -l chi_sim
    
    要识别的图片路径:
    /Users/用户/Desktop/522D5B50-D761-4030-B3AB-F90031D30DF8.png
    识别后文本会以wenben.txt文件写出
    识别所需要的语言库名称:chi_sim
    

    ok,Tesseract安装成功,把上面window上面的项目拷贝过来,在Mac上直接运行,记得指定语言库的位置,但是运行后仍然报错,如下:

    缺少环境配置
    这是因为没有设置程序运行的语言环境:
    打开idea -> Run -> Edit Configuration -> Environment variables设置
    LC_CTYPE=C
    

    这里就不需要再去设置其他的了,程序会默认去/usr/local/lib中加载动态库,运行如下图打印:

    image.png

    四、Linux环境下使用Tess4j

       Linux跟mac环境一样也是没法直接使用 tess4j,需要安装tesseract和leptonica,进行编译后,才能得到所需要的so库,步骤相当麻烦。

    Linux环境详细编译过程:《Linux环境如何支持使用tess4j进行ORC》

    参考《LC_CTYPE=C含义》

    相关文章

      网友评论

          本文标题:详细教程:Java如何使用Tess4J进行ocr识别

          本文链接:https://www.haomeiwen.com/subject/jkqstktx.html