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

本文档详细介绍了如何在Java项目中使用Tesseract OCR进行文字识别,包括选择Tesseract的原因、环境配置(Windows和Mac)、示例代码以及Linux部署时的注意事项。遇到的问题如缺少依赖库在文中也给出了解决方案,适合开发者参考。
摘要由CSDN通过智能技术生成

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.tess4j</groupId>
        <artifactId>tess4j</artifactId>
        <version>4.5.5</version>
    </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/
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Tesseract-OCR是一个开源的OCR识别引擎,可以识别多种语言的文字。在Java使用Tesseract-OCR可以通过以下步骤实现: 1. 安装Tesseract-OCR引擎 可以从Tesseract-OCR官网下载安装包进行安装,也可以通过命令行安装。在Windows系统下,可以通过以下命令安装: ``` choco install tesseract ``` 在Linux系统下,可以通过以下命令安装: ``` apt-get install tesseract-ocr ``` 2. 导入Tesseract-OCRJava API 可以通过在pom.xml文件中添加以下依赖来导入Tesseract-OCRJava API: ``` <dependency> <groupId>com.github.tesseract-ocr</groupId> <artifactId>tess4j</artifactId> <version>4.5.4</version> </dependency> ``` 3. 使用Tesseract-OCR进行文字识别 可以通过以下代码段来实现使用Tesseract-OCR进行文字识别: ``` File imageFile = new File("image.png"); Tesseract tesseract = new Tesseract(); tesseract.setDatapath("/usr/share/tesseract-ocr/tessdata"); String result = tesseract.doOCR(imageFile); System.out.println(result); ``` 其中,第一行代码创建了一个File对象,表示待识别的图像文件。第二行代码创建了一个Tesseract对象,并设置了Tesseract-OCR的数据路径。第三行代码调用doOCR()方法进行文字识别,并将识别结果存储到result字符串中。最后一行代码将识别结果输出到控制台。 需要注意的是,Tesseract-OCR对图像的分辨率、亮度、对比度等要求较高,因此在进行文字识别前,需要对图像进行预处理,以提高识别准确率。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火车站卖橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值