使用Tesseract进行图片文字识别
Tesseract介绍
Tesseract 是一个开源的光学字符识别(OCR)引擎,最初由 HP 在 1985 年至 1995 年间开发,后来被 Google 收购并开源。Tesseract 支持多种语言的文本识别,能够识别图片中的文字,并将其转换为可编辑和可搜索的数据格式。它适用于多种应用场景,包括文档扫描、图像处理、数字存档等。
Tesseract 的最新版本显著提高了识别准确率,支持的文件格式包括 TIFF、JPEG、PNG 等常见图片格式。此外,Tesseract 还提供了一个命令行工具,允许用户通过简单的命令行输入来执行 OCR 任务。对于开发者而言,Tesseract 提供了多种编程语言的 API 接口,如 C++、Python、Java 等,使得集成 OCR 功能到各种应用程序中变得更为容易。
除了基本的 OCR 功能外,Tesseract 还支持语言模型和训练工具,允许用户根据特定需求训练自定义模型,以提高某些特定类型或格式文本的识别准确率。这些特性使得 Tesseract 成为了一个强大而灵活的 OCR 工具,广泛应用于个人和企业的文本数字化处理中。
GitHub地址:https://github.com/tesseract-ocr/tesseract
官方文档地址:https://tesseract-ocr.github.io

下载安装Tesseract
下载Tesseract
Home · UB-Mannheim/tesseract Wiki

安装的时候,记得选上中文语言包:

输入
tesseract -v
查看Tesseract是否安装成功

设置环境变量:



输入Tesseract的安装地址:

注意安装路径最好不要包含中文,由于C盘空间还比较充足,我就装在默认位置了。
再次验证安装是否完成:
tesseract -v

安装成功完成。
Tesseract的基本命令行使用
基本文本识别
最简单的命令是将图片中的文本识别并输出到标准输出(屏幕):
tesseract D:\test2.png stdout
默认识别的是英文的,先拿一个英文的图片试试:

图片文字识别的效果

效果还是很ok的。
再试试一个中文的图片:


默认是无法识别中文的,这时候需要指定语言才行。
指定一种语言识别
如果图片中的文字不是英文,你需要指定相应的语言。Tesseract 支持多种语言,可以通过以下命令查看支持的语言:
tesseract --list-langs

会出现你已经下载了语言包的语言。
指定语言的命令如下(例如,识别中文):
tesseract D:\test.png stdout -l chi_sim
这里的 -l chi_sim 表示使用简体中文语言模型。

效果也很不错。
指定多种语言识别
有时候我们需要同时识别多种语言,以下面这张图片为例:

在命令行中添加-l LANG[+LANG]可以使用多种语言进行识别:
tesseract D:\test3.png stdout -l eng+chi_sim

效果也还行。但是会发现识别的中文很多地方都有空格。
将中文改为主要识别语言:
tesseract D:\test3.png stdout -l chi_sim+eng

可以发现识别的空格少了很多。
保存识别文本到文件
也可以把识别的内容保存在一个txt文件中,命令如下所示:
tesseract D:\test2.png D:\output.txt

使用quiet模式抑制消息
不使用quiet模式与使用quiet模式的对比:

少了表示 Tesseract 正在尝试估算输入图像的分辨率的信息Estimating resolution as 182。
可搜索的pdf输出
这将创建一个包含图像和单独可搜索文本层的PDF,其中包含识别出的文本:
tesseract D:\test2.png D:\output -l eng pdf
实现效果:

HOCR输出
在命令末尾添加hocr以使用‘hocr’配置文件,获取HOCR输出:
tesseract D:\test2.png - -l eng hocr
识别效果:

这样不够直观,保存在一个html文件中,然后再打开看看:
tesseract D:\test2.png D:\test2.html -l eng hocr
把生成的文件后缀改为.html,用浏览器打开,效果如下所示:

TSV输出
在命令末尾添加“tsv”配置文件以获取TSV输出:
tesseract D:\test5.jpg - -l chi_sim tsv
以这张图片为例:

实现效果如下所示:

使用不同的页面分割模式
-psm 3 - 全自动页面分割,但无方向和脚本检测。(默认)
以这张图片为例:

tesseract D:\test4.png - --psm 3
实现的效果:

-psm 6 - 假定文本为一个整体均匀的块。
以这张图片为例:

tesseract D:\test5.png - --psm 6
实现效果如下所示:

使用 -c preserve_interword_spaces=1 来保留空格
tesseract D:\test5.png - --psm 6 -c preserve_interword_spaces=1
实现效果如下所示:

使用pdftotext保持文本输出的布局
tesseract D:\test5.png D:\test5 -l eng –psm 11 pdf
实现的效果:

总结
现在图片文字识别已经有多种方式可以实现,也可以通过云服务商的文字识别服务,缺点就是需要网络,数量多了需要收费,优点就是识别准确率比较高。使用Tesseract与PaddleOCR这种方式的好处就是离线可用,速度也挺快的。还有一种目前还没试过的方式,就是使用多模态的大语言模型,缺点可能就是如果使用大模型服务提供商会比较耗费token,自己本地用ollama又比较吃配置相对于Tesseract与PaddleOCR而言,还有就是多模态大语言模型可能自己会出现一些别的内容。
之前写过几篇关于PaddleOCR的文章,感兴趣也可以阅读:
使用Tesseract进行图片文字识别的更多相关文章
- 基于Tesseract实现图片文字识别
一.简介 Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[l ...
- Python识别验证码,基于Tesseract实现图片文字识别
一.简介 Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[li ...
- 【图片识别】java 图片文字识别 ocr (转)
http://www.cnblogs.com/inkflower/p/6642264.html 最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为 ...
- java 图片文字识别 ocr
最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为java使用的demo 在此之前,使用这个工具需要在本地安装OCR工具: 下面一个是一定要安装的 ...
- JAVA的图片文字识别技术
从2013年的记录看,JAVA中图片文字识别技术大部分采用ORC的tesseract的软件功能,后来渐渐开放了java-api调用接口. 图片文字识别技术,还是采用训练的方法.并未从根本上解决图片与文 ...
- 小试Office OneNote 2010的图片文字识别功能(OCR)
原文:小试Office OneNote 2010的图片文字识别功能(OCR) 自Office 2003以来,OneNote就成为了我电脑中必不可少的软件,它集各种创新功能于一身,可方便的记录下各种类型 ...
- 一篇文章搞定百度OCR图片文字识别API
一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104
- python3 图片文字识别
最近用到了图片文字识别这个功能,从网上搜查了一下,决定利用百度的文字识别接口.通过测试发现文字识别率还可以.下面就测试过程简要说明一下 1.注册用户 链接:https://login.bce.baid ...
- 刚破了潘金莲的身份信息(图片文字识别),win7、win10实测可用(免费下载)
刚破了潘金莲的身份信息(图片文字识别),win7.win10实测可用 效果如下: 证照,车牌.身份证.名片.营业执照 等图片文字均可识别 电脑版 本人出品 大小1.3MB 下载地址:https://p ...
- Python人工智能之图片识别,Python3一行代码实现图片文字识别
1.Python人工智能之图片识别,Python3一行代码实现图片文字识别 2.tesseract-ocr安装包和中文语言包 注意:
随机推荐
- BFS 马的遍历————洛谷p1443
马的遍历 题目描述 有一个 \(n \times m\) 的棋盘,在某个点 \((x, y)\) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步. 输入格式 输入只有一行四个整数,分别为 ...
- 安卓Android虚拟机分享及使用
不知道大家伙在安装安卓虚拟机时被各式各样的问题折磨过没,我在安装安卓虚拟机时,遇到的问题简直就像长江之水源源不断,就算是最后安装好了也会因为各式各样的原因无法进入启动桌面. 当我发现这个可以直接导入到 ...
- `std::packaged_task`、`std::thread` 和 `std::async` 的区别与联系
std::packaged_task.std::thread 和 std::async 的区别与联系 std::packaged_task.std::thread 和 std::async 都是 C+ ...
- 对于ChannelNet的一点理解
主要是为了个人理解,做个笔记 1.Pytorch代码 2.论文出处 3.详细介绍 这篇论文在2018年发出来,而ShuffleNet是从2017年由旷视发出来.起初了解shufflenet的提出,主要 ...
- js的作用域有哪些 and 他们的特点
全局作用域:是所有代码的执行环境,比如script标签里所有的代码 或 独立的js 文件: 局部作用域:是函数内部代码的执行环境: 块级作用域:是 {} 内的代码执行环境:
- 导入员工 excel 批量上传
1. 安装 包 npm i xlsx yarn add xlsx 2. 封装一个上传的组件 src/components/UploadExcel/index.vue code : <te ...
- rancher发布nacos server docker 失败
使用rancher发布nacos server 时报错 进入镜像查看日志发现报错No DataSource set 检查了好几遍环境变量已经全都配了,最后发现在nohup.out文件中指出没有找到na ...
- C++ 字面值常量的类型
在C++中,字面常量(literal constant)即无需定义可以直接写出来的量.字面常量的值一望便知,但是他的数据类型往往不能被准确分辨(尤其是使用auto时). 我们直接写出来的有确定值的量就 ...
- ESP8266 + mg90s(舵机)
ESP8266+mg90s(舵机) 准备阶段 ESP8266(nodeMcu) MG90S(舵机) 面包板 线3 连线 ESP8266 MG90S(舵机) GND 棕色 VCC 红色 模拟引脚 橙色 ...
- .Net Core NPOI 导出多级表头
想要导出这样的表格 数据准备格式 附上源码 1 using NPOI.HSSF.UserModel; 2 using NPOI.SS.UserModel; 3 using NPOI.SS.Util ...