前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从图像中找到文字 -- 开源 OCR 工具 tesseract 使用简介

从图像中找到文字 -- 开源 OCR 工具 tesseract 使用简介

作者头像
用户3147702
发布2022-06-27 16:58:51
2K0
发布2022-06-27 16:58:51
举报
文章被收录于专栏:小脑斧科技博客

1. OCR

OCR 是 Optical Character Recognition (光学字符识别)的缩写,指的是通过检测图像,从而识别出文字的技术。

经过几十年的发展,如今 OCR 技术已经非常成熟,本文我们就来介绍由惠普公司开源的 OCR 算法组件 tesseract 的安装和使用。

2. tesseract 安装

在各个平台上都有着成熟的包管理机制,利用包管理机制直接安装即可,例如在 mac 上,你需要执行下面两个命令:

brew install tesseract brew install tesseract-lang

第一个命令是安装 tesseract 命令执行所需的组件,第二个命令则是安装 tesseract 所需的语言包。

在 mac 上,也许你需要安装 qt、python3.9 等等基础依赖,只要按提示安装即可。

其他环境,例如 Ubuntu、Debian、CentOS 等系统中,只要执行对应的包管理命令即可。

例如在 Ubuntu 系统下,只需执行:

apt-get install tesseract-ocr-all

3. 命令行使用 tesseract

安装 tesseract 后,通过 tesseract --help 命令可以看到说明。

执行以下命令即可:

tesseract imagename outputbase [options...] [configfile...]

例如:

tesseract ~/Downloads/temp.jpg ~/Downloads/temp -l chi_sim

-l 参数用来指定识别的文本是哪种语言,如果是英语可以传递 -l eng.

识别结果就在第二个参数 ~/Downloads/temp.txt 中记录了识别的结果。

4. java 调用 tesseract

安装上述依赖后,就可以通过代码调用了,最简单的就是通过执行系统命令直接调用 tesseract 命令,这里就不赘述了。

下面我们来看看如何通过 java SDK 调用 tesseract 实现 OCR 识别。

4.1 添加 maven 依赖

代码语言:javascript
复制
 <dependency>
     <groupId>net.java.dev.jna</groupId>
     <artifactId>jna</artifactId>
     <version>4.1.0</version>
 </dependency>
 <dependency>
     <groupId>net.sourceforge.tess4j</groupId>
     <artifactId>tess4j</artifactId>
     <version>2.0.1</version>
     <exclusions>
         <exclusion>
             <groupId>com.sun.jna</groupId>
             <artifactId>jna</artifactId>
          </exclusion>
     </exclusions>
 </dependency>

4.2 下载语言包

在官方文档网站找到需要识别的语言包:

https://tesseract-ocr.github.io/tessdoc/Data-Files

放到某个目录下, 这里我放到 /opt/tesseract 目录下。

4.3 编写代码调用

代码语言:javascript
复制
 public class TessTest {
     public static void main(String[] args) {
         ITesseract instance = new Tesseract();
         File imageFile = new File("/data/images/a.jpg");
         instance.setDatapath("/opt/tesseract");
         instance.setLanguage("chi_sim");
         try {
             long time = System.currentTimeMillis();
             String result = instance.doOCR(imageFile);
             System.out.println(result);
             System.out.println("timeout: " + (System.currentTimeMillis() - time));
         } catch (TesseractException e) {
             System.out.println(e.getMessage());
         }
     }
 }

4.4 遇到的问题

执行上述代码,报错如下:

java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract': Native library (darwin/libtesseract.dylib)

这是因为在 tess4j 的 jar 包中没有包含 darwin/libtesseract.dylib 组件,可以通过升级 jar 包到 5 以上,或是使用其他平台。

解决办法如下:

cd ~/.m2/repository/net/sourceforge/tess4j/tess4j/2.0.1 mkdir darwin jar uf tess4j-2.0.1.jar darwin cp /usr/local/opt/lib/libtesseract.5.dylib darwin/libtesseract.dylib jar uf tess4j-2.0.1.jar darwin/libtesseract.dylib

再次执行即可。

5. 识别效果

附录 -- 参考资料

https://guides.library.illinois.edu/c.php?g=347520&p=4121425

java - Tess4j unsatisfied link error on mac OS X - Stack Overflow

Traineddata Files for Version 4.00 + | tessdoc

python 3.x - How do I install a new language pack for Tesseract on Windows - Stack Overflow

tesseract-lang — Homebrew Formulae

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小脑斧科技博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. OCR
  • 2. tesseract 安装
  • 3. 命令行使用 tesseract
  • 4. java 调用 tesseract
    • 4.1 添加 maven 依赖
      • 4.2 下载语言包
        • 4.3 编写代码调用
          • 4.4 遇到的问题
          • 5. 识别效果
          • 附录 -- 参考资料
          相关产品与服务
          文字识别
          文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档