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

一、什么是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依赖如下:

   
            net.sourceforge.tess4j
            tess4j
            4.4.0
  

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识别)