使用 tesseract 做 OCR 文字识别(Java)

文章目录

  • 1. 背景介绍
  • 2. 方案选型
  • 3. 方案落地
    • 3.1 示例工程
    • 3.2 搭建开发环境
      • 3.2.1 windows 10
      • 3.2.2 mac
    • 3.3 搭建部署环境
  • 4. 参考资料

1. 背景介绍

网络上介绍 tesseract 做 OCR 文字识别的文章较少,且时间久远,实际落地时难免出现纰漏,笔者也是走了不少弯路,故梳理一份最新的文档,方便后人查阅。

2. 方案选型

刚开始有多种方向,考虑到易用性和数据安全,最终采用 tesseract,下面罗列选型的过程

  • OpenCV

    计算机视觉领域的老大哥,原生提供 C++ 接口,也可以通过引入 org.openpnp:opencv:4.5.1-2 支持 Java对接,然而我没有找到专门用于 OCR 的接口

  • Tesseract

    是一款专业的 OCR 引擎,尽管也是 C++ 编写的,但配合 net.sourceforge.tess4j:tess4j:4.5.5 可以提供简洁的 Java API

  • 腾讯云文字识别 OCR(入口)

    成熟的 API,不仅能做到 OCR,还能对内容进行分词,如名片、收货人信息等,如果对数据不敏感,建议对接,效果好而且省时省力

3. 方案落地

3.1 示例工程

文末提供下载

  1. 新建 maven 工程

  2. 引入依赖

    <dependency>
        <groupId>net.sourceforge.tess4jgroupId>
        <artifactId>tess4jartifactId>
        <version>4.5.5version>
    dependency>
    
  3. 使用 Tesseract API 完成文本识别

    // 创建实例
    Tesseract instance = new Tesseract();
    // 设置语言
    instance.setLanguage("chi_sim");
    // 设置语言包路径
    instance.setDatapath("src/main/resources/tessdata");
    // 设置文本文件
    File file = new File("src/main/resources/sample/test.png");
    try {
      // 文本识别
      String result = instance.doOCR(file);
      System.out.println(result);
    } catch (TesseractException e) {
      e.printStackTrace();
    }
    

3.2 搭建开发环境

3.2.1 windows 10

  1. 安装 tesseract-ocr

    下载地址 https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.0.0.20190623.exe

    其他版本可以查看 https://digi.bib.uni-mannheim.de/tesseract/

    安装过程中一直点下一步,建议取消语言包选项,后面手动下载

  2. 配置环境变量【可选】

    • 在 Path 追加【C:\Program Files\Tesseract-OCR】,方便任意处调用 tesseract 命令
    • 新建 TESSDATA_PREFIX,内容为【C:\Program Files\Tesseract-OCR】,用于加载语言包
      • Tips: 此处不建议使用环境变量,建议将语言包放在项目的 resources 资源文件夹下,便于移植
  3. 检验安装

    cmd 窗口输入 tesseract -v,能输出版本信息即安装成功

  4. 语言包下载地址

    中文 https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata/-/raw/master/chi_sim.traineddata
    英文 https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata/-/raw/master/eng.traineddata
    数字 https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata/-/raw/master/enm.traineddata

3.2.2 mac

笔者电脑为 mba2020 m1

  1. 安装软件主体

    brew install tesseract
    
  2. 安装语言包【可选】

    建议单独下载语言包,并放在项目的 resources 资源文件夹下

    brew install tesseract-langs
    
    
  3. 检验安装

    tesseract -v
    
  4. 卸载(如果你需要)

    # 从第三方仓库获取模块
    brew tap beeftornado/rmtree
    # 删除 tesseract 及其所有依赖
    brew rmtree tesseract
    # 清理不需要的版本极其安装包缓存
    brew cleanup
    
  5. 处理异常

    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract':
    dlopen(libtesseract.dylib, 9): image not found
    dlopen(libtesseract.dylib, 9): image not found
    dlopen(/Users/linjingcheng/Library/Frameworks/tesseract.framework/tesseract, 9): image not found
    dlopen(/Library/Frameworks/tesseract.framework/tesseract, 9): image not found
    dlopen(/System/Library/Frameworks/tesseract.framework/tesseract, 9): image not found
    Native library (darwin-x86-64/libtesseract.dylib) not found in resource path
    

    参考 https://stackoverflow.com/questions/21394537/tess4j-unsatisfied-link-error-on-mac-os-x

    简单来说就是在 mac 下 tess4j 这个包少了 darwin-x86-64/libtesseract.dylib(tess4j 4.5.5 之前是 darwin/libtesseract.dylib),需要自己手动添加进去,或者按照 3.3 的方式进行操作

3.3 搭建部署环境

案例:在windows上项目是可以正常运行的,部署到Linux上后,运行报异常,异常内容为:Unable to load library ‘tesseract’: Native library (linux-x86-64/libtesseract)
报错原因就是项目无法加载库资源文件 libtesseract(在linux上是.so文件,windows是.dll文件)

  1. 安装编译环境:gcc gcc-c++ make

    yum install gcc gcc-c++ make
    
  2. 通过yum安装 autoconf automake libtool 和 libjpeg-devel libpng-devel libtiff-devel zlib-devel 等 7 个工具

    yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel
    
  3. 安装依赖的Leptonica库(建议使用 su root 切换到root用户下安装,避免编译过程中的权限不足问题)

    wget http://www.leptonica.org/source/leptonica-1.81.1.tar.gz
    tar -xzvf leptonica-1.81.1.tar.gz
    cd leptonica-1.81.1/
    ./configure
    # tips: 需要几分钟,请耐心等待
    make && make install
    
  4. 安装Tesseract-OCR(建议使用 su root 切换到root用户下安装,避免编译过程中的权限不足问题)

    wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/4.1.1.tar.gz
    tar -xzvf tesseract-4.1.1.tar.gz
    cd tesseract-4.1.0/
    ./autogen.sh
    # 此步可能会报错,可以看第五步
    ./configure
    make && make install
    sudo ldconfig
    
  5. 解决【configure: error: Leptonica 1.74 or higher is required. Try to install libleptonica-dev package.】问题

    # 加入环境变量
    vim /etc/profile
    export LD_LIBRARY_PATH=$LD_LIBRARY_PAYT:/usr/local/lib
    export LIBLEPT_HEADERSDIR=/usr/local/include
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    
    # 刷新配置
    source /etc/profile
    
    # 重新安装
    ./autogen.sh
    ./configure
    # tips: 需要十分钟左右,请耐心等待
    make && make install
    sudo ldconfig
    
  6. 复制 tess4j 要的 linux 依赖库链接【重要】

    cp /usr/local/lib/*.so.* /usr/lib64/
    
  7. 下载语言包(预训练文件):中文、英文、数字【可选】

    cd /usr/local/share/tessdata
    # 原站点未加速,几乎不能下载
    # wget https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata
    # wget https://github.com/tesseract-ocr/tessdata/blob/master/eng.traineddata
    # wget https://github.com/tesseract-ocr/tessdata/blob/master/enm.traineddata
    wget https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata/-/raw/master/chi_sim.traineddata
    wget https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata/-/raw/master/eng.traineddata
    wget https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata/-/raw/master/enm.traineddata
    
  8. 防止找不到语言包【可选】

    # 加入环境变量
    echo "export TESSDATA_PREFIX=/usr/local/share/tessdata" >> /etc/profile
    
    # 刷新配置
    source /etc/profile
    
  9. 安装完成测试

    # 查看版本
    tesseract -v
    # 执行命令识别图片中的文字并保存进本地的文本中
    tesseract hello.png reuslt -l chi_sim
    

4. 参考资料

  • 示例项目 https://download.csdn.net/download/coder1994/21698394
  • Linux系统安装及部署tess4j项目(CentOS 7为例) https://blog.csdn.net/weixin_51754359/article/details/109452233
  • Tesseract 文档地址 https://github.com/tesseract-ocr/tessdoc
  • tess4j 官网 http://tess4j.sourceforge.net/

你可能感兴趣的:(图像处理,java,tesseract,tess4j)