Tesseract5.0.0+OpenCV3+VS2019安装、字符识别学习

2023-10-26

背景

做一个字符检测比对的小项目,需要借助Tesseract的OCR进行开发。

Visual Studio 2019安装

详见另一篇:https://blog.csdn.net/weixin_46293955/article/details/105961344

OpenCV3安装、配置

待更新…

Tesseract v5.0.0安装

tesseract v5.0.0 64位安装包下载链接: https://download.csdn.net/download/weixin_46293955/12531753

双击安装程序
点击Next
在这里插入图片描述
点击I Agree
在这里插入图片描述
选择电脑用户,点击Next
在这里插入图片描述
勾选组件
在这里插入图片描述
选择语言包:符号、数字、简体中文、简体中文(复杂)、繁体中文、繁体中文(复杂)、英文(复杂)。
未选择的情况下自带英文、数字、符号。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自定义安装路径,这里安装到D盘Tesseract-OCR文件夹中
在这里插入图片描述
点击Install按钮安装
在这里插入图片描述
报错是由于语言包无法下载,点击确定跳过
在这里插入图片描述
等待安装完成
在这里插入图片描述
点击Finish安装完成
在这里插入图片描述
加入系统环境变量Path
在这里插入图片描述
新建环境变量TESSDATA_PREFIX,路径指向tessdata文件夹
在这里插入图片描述
安装完后文件如下图:
在这里插入图片描述
查看是否安装成功,在Windows PowerShell中下指令tesseract,出现如下回传,则表示安装成功。
在这里插入图片描述
查看支持的语言,在Windows PowerShell中下指令tesseract --list-langs,此处语言放在tessdata文件夹中。
在这里插入图片描述
语言包下载链接: 待更新

在Windows PowerShell中下指令识别字符

放置一张图片至D盘,命名为ROI.jpg(图片为在百度随机截取,侵删)
在这里插入图片描述
在Windows PowerShell中下指令tesseract D:\ROI.jpg D:\1
回传如下,可以看到识别为空。原因是文字太小或者太模糊(图截得很小)
在这里插入图片描述
使用画图工具放大后,回传如下
在这里插入图片描述
依然很模糊,不过可以识别,在D盘下会生成一个1.txt文件,打开后可以看到,已识别到文字。
在这里插入图片描述
指定识别类型,在Windows PowerShell中下指令tesseract D:\ROI.jpg D:\1 -1eng
指定输出文件类型,如pdf格式,在Windows PowerShell中下指令tesseract D:\ROI.jpg D:\1 -1eng pdf

训练字符库

如果需要提高识别率,需要自己训练字符库。

使用 jTessBoxEditor训练

需要配置JAVA开发环境,过程略。

训练方法: 待更新…

安装tesseract-master

若要在Visual Studio 2019下使用,则需要用CMake建构,用到Tesseract的tesseract-master版。
Tesseract v5.0.0 tesseract-master官网下载链接:https://github.com/tesseract-ocr/tesseract/
Tesseract v5.0.0 tesseract-master版下载: https://download.csdn.net/download/weixin_46293955/12533636
解压后文件如下图:
在这里插入图片描述

运行cppan.exe

cppan.exe for Windows下载链接: https://download.csdn.net/download/weixin_46293955/12522811
cppan.exe for Windows官网下载链接:https://cppan.org/client/

将cppan.exe放入tesseract安装的根目录中。

将cppan.exe所在的路径添加到系统变量中。

在Windows PowerShell下执行:.\cppan.exe命令,出现No spec file found报错,如下图。
在这里插入图片描述
原因:最新的tesseract5.0.0没有cppan.yml文件
在这里插入图片描述
解决方法:下载安装低版本的tesseract4.1,将其中的cppan.yml文件拷贝出来。再次运行,成功安装,如下图。过程中可能因为网络问题报错,多试几次(需要一定的时间,请耐心等待)
在这里插入图片描述
低版本的cppan.yml单独下载链接: https://download.csdn.net/download/weixin_46293955/12532402
安装路径为C盘–用户–用户名–.cppan文件夹–storage文件夹,如果用户名中含有空格,则无法执行成功,需要更改用户名,或者在其它路径新建storage文件夹,并编辑修改.cppan文件夹中cppan.yml文件中的指向路径。

使用CMake编译Tesseract

CMake下载链接: 官网https://cmake.org/download/
CMake3.18 64位for Windows安装版&免安装版下载链接: https://download.csdn.net/download/weixin_46293955/12533155
CMake3.13 64位for Windows安装版下载链接: https://download.csdn.net/download/weixin_46293955/12532529

步骤待更新…
为cmake设置环境变量,解压后目录下的bin目录地址加至系统环境变量PATH中,与cppan设置环境变量的方法一致。

使用高版本cmake构建可能会报错,使用低版本cmake的没有VS2019。

在Tesseract目录下新建build文件夹,将来源路径及建构路径填入,如下图:
在这里插入图片描述
点击Tool–Configure,进行Configure
在这里插入图片描述
选择合适版本的CMake,选择IDE。
在这里插入图片描述
点击Finish,若报错Error in configuration process,project files may be invlid,如下,原因是缺少CMakeLists.txt文件。
在这里插入图片描述

解决方法:1.将.cppan文件夹中的内容copy出来至Tesseract目录下。
2.使用tesseract-master,里面有CMakeLists.txt文件,重新建构即可。
3.更换低版本release,tesseract release v4.1.1
在这里插入图片描述
手动修改CMakeLists.txt文件,过程待更新…

建构需要较长时间,请耐心等待。

在D盘下新建install文件夹,更改路径。
在这里插入图片描述
完成后再次点击Configure,然后点击Generate按钮,即完成。
在这里插入图片描述
建构完成,如下图:
在这里插入图片描述

建构完成,文件有缺失,无法运行。

更换次新的release v4.1.1。

官网下载链接:https://github.com/tesseract-ocr/tesseract/releases
tesseract release v4.1.1下载链接: 待更新…
在这里插入图片描述
操作同tesseract v5.0.0CMake使用cmake v3.17.3

使用Visual Studio 2019打开Tesseract工程文件

编译过程略,无法编译成功。
在这里插入图片描述

编译Leptonica

查阅资料发现,在VS2019中使用tesseract需要Leptonica的支持,leptonica是一个开源的面向教学的软件,通常被用来作为图像处理和图像分析的一个底层库支持。

leptonica官网下载地址:http://www.leptonica.org/download.html

解压到路径D:\temp\leptonica
在temp文件夹中新建leptonicanew文件夹,使用CMake建构leptonica,如下:
在这里插入图片描述
同样2次点击Configure按钮,直到没有报错。并更改INSTALL_PREFIX路径。
在这里插入图片描述
依次点击Configure按钮、Generate按钮,完成建构。
在这里插入图片描述

使用Visual Studio 2019打开Leptonica工程文件

文件路径:D:\temp\leptonicanew\leptonica.sln
更改配置属性:
在这里插入图片描述
选择release,配置中,勾选INSTALL
在这里插入图片描述
release模式下生成解决方案。
在这里插入图片描述
生成成功
在这里插入图片描述
文件在此路径D:\leptonica
在这里插入图片描述

加入第三方图像库

下载链接:待更新…

编译tesseract v4.1.1

重新编译,tesseract v4.1.1解压路径D:\temp\Tesseract。
在temp文件夹下新建Tesseractnew文件夹。
使用CMake建构。
报错如下:
在这里插入图片描述
原因是找不到leptonica路径。
更改路径至之前编译好的cmake路径:在这里插入图片描述
若反复报错,可取消训练工具此勾再尝试。
在这里插入图片描述
使用CMake3.17多次Configure依然报错找不到LeptonicaConfig.cmake文件,实际文件夹中有:
在这里插入图片描述

更换CMake3.16.8,依然编译不通过,排除CMake版本问题。
删除C盘-用户下的.cppan文件夹,重新执行cppan.exe,完成如下(方法同上):
在这里插入图片描述

再次使用CMake建构,报错消失。
多次Configure直至红色报错消失,会提示:CPPAN过旧,请考虑切换到软件构建。不用理会。
在这里插入图片描述
点击Generate,生成工程文件。
在这里插入图片描述

使用Visual Studio 2019打开Tesseract工程文件

需要使用管理员身份打开,具体参考:https://blog.csdn.net/lien0906/article/details/47300881

由于踩了坑,多次无法编译成功,换了Visual Studio 2017尝试,后换回Visual Studio 2019编译成功,步骤同如下尝试。

在Visual Studio 2017中的尝试

cppan.exe需要重新安装、需要用CMake重新建构。
建构时注意选择32/64位:
在这里插入图片描述
使用管理员打开工程文件
在这里插入图片描述同样进行如下设置:

release模式下,生成解决方案
在这里插入图片描述
可以看到有大量报错,大多都是cppan-d-b-d 字符编码乱码导致,单独编译cppan-d-b-d :
在这里插入图片描述
双击错误,打开文件,点击左上角菜单 “文件选项" 下的"高级保存选项", 选择“GB2312”.保存后再“生成"即可。
在这里插入图片描述

如果找不到“高级保存选项”,点击工具–自定义,添加命令。
在这里插入图片描述
选择命令–文件–添加命令
在这里插入图片描述
选择文件–高级保存选项,然后点击确定,即可添加成功。
在这里插入图片描述
改成UTF-8 有签名。
在这里插入图片描述
重新生成,可解决字符乱码错误。

若出现如下endianness.h头文件报错找不到:
在这里插入图片描述
找到该目录下,可以看到endianness.h被编译成endianness.h.in
在这里插入图片描述
解决方法一:把endianness.h.in的.in去掉,成为一个.h文件,打开:

#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN)
# if @APPLE_UNIVERSAL_BUILD@
#  ifdef __BIG_ENDIAN__
#   define L_BIG_ENDIAN
#  else
#   define L_LITTLE_ENDIAN
#  endif
# else
#  define @ENDIANNESS@
# endif
#endif

要将上述代码改成:

#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN)
# if defined (__APPLE_CC__)//@APPLE_UNIVERSAL_BUILD@
#  ifdef __BIG_ENDIAN__
#   define L_BIG_ENDIAN
#  else
#   define L_LITTLE_ENDIAN
#  endif
# else
#  define L_LITTLE_ENDIAN//@ENDIANNESS@
# endif
#endif

保存后,重新编译即可。
解决方法二:从建构好的leptonicanew文件夹中找到该头文件,copy至所需目录下即可:
在这里插入图片描述
报错找不到allheaders.h头文件
在这里插入图片描述
allheaders.h是leptonica的头文件,路径如下:
在这里插入图片描述
解决方法:分别右击libtesseract和tesseract,VC++目录——包含目录,添加D:\leptonica\include\leptonica

其它情况

如果遇到其它情况,可以尝试用vcpkg编译。

在Visual Studio 2019中配置Tesseract

待更新…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tesseract5.0.0+OpenCV3+VS2019安装、字符识别学习 的相关文章

  • C++串口问题

    我在 Visual Studio 上使用 C 连接到任何串行端口 想要与 Arduino 交换 时遇到问题 我正在使用串行类 http www arduino cc playground Interfacing CPPWindows在 Ar
  • 在 Windows 11 上无需管理员权限即可运行 Visual Studio 2022

    我在 Windows 11 上安装了 Visual Studio 2022 当我启动它时 它始终以管理员权限运行 我想在没有管理员权限的情况下运行它 我的 Windows 只有一个帐户 该帐户具有管理员权限 x 我做了什么 确认VS2022
  • 在 Jenkins 中执行批处理文件

    我有一个简单的批处理文件 我想要从 Jenkins 调用 运行 执行该文件 Jenkins 中有同样的插件吗 如何从 Jenkins 执行批处理文件 如果有相同的教程或文档 无需为此添加新插件 在Jenkins 选择您的工作名称并转到配置部
  • 在 Android SDK 中设置 JAVA_HOME

    我和对方有一些冲突JAVA HOME配置 当我使用以下代码时 System out println System getenv JAVA HOME I get C jdk1 6 0 23这是正确的地方 但是 当我在 Android buil
  • 在 Windows 2008 上将 myprogram.exe 作为服务运行时出现问题

    MyProgram exe 是用来侦听来自管道的请求并使用命令提示符使其工作完美 但我尝试使用 Windows 服务来工作但没有成功我在 Windows Server 2008 Enterprise 上尝试了以下步骤 gt sc creat
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • 使用 IDLE 编辑的 .py 文件消失了

    我曾经有过Edit with IDLE当我右键单击时的选项 py文件 但我多次卸载 重新安装以使某些东西正常工作 但现在它消失了 我检查了注册表HKEY CLASSES ROOT and HKEY LOCAL MACHINE对于价值低于Py
  • CMake GUI:指定 Windows 的库路径

    我正在编译一个基于 CMake 的项目 具体来说是 SOCI 它依赖于 SQLite 这是Windows 没有可供项目研究的标准路径 因此它找不到SQLite 我在配置时得到这个 SQLite3 not found some librari
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • Windows Workflow Foundation 4 (WF4) 延迟

    我正在与 Visual Studio 2010 的候选版本一起使用 Wf4 编写一个用于批准资源请求的新工作流程 在我的工作流程中 如果请求未获得批准 我希望请求在几天后过期 我们在 WF 3 5 Visual Studio 2008 中通
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

    我正在尝试使用 openssl 将 cer 证书转换为 p12 证书 这是我正在使用的命令 C OpenSSL Win32 bin gt openssl x509 inform der in developer identity cer o
  • 以编程方式从 java 代码中查找 java.exe 的绝对路径

    如果我有一个由用户启动的 java jar 或类文件 假设在环境变量中设置了 java 路径 那么我如何从代码中找出 java exe javaw exe 的绝对路径文件正在启动 就像在 ubuntu 上一样 我们可以运行 which ja
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • 为什么我只能用管理员权限才能导入Python中的某些模块?

    我正在努力解决 Python 2 7 中的一些奇怪问题 我写了一个很长的工具 在其中导入不同的模块 我必须首先使用它安装pip 该工具将在公司内部共享 不同的用户在其特定机器上拥有不同的权限 当另一个用户登录我的计算机 我在那里拥有管理员权
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的

随机推荐

  • SpringBoot使用Redisson做延迟队列案列(超详细)

    背景 有些场景下 需要延迟触发一些任务 比如 延迟几秒钟发送短信或者邮件 某些业务系统回调 需要延时几秒钟后回调 当然 实现延时触发的方式有很多 我这里采用 redisson 的 RDelayedQueue 一是因为接入简单 二是没有分布式
  • post使用form-data和x-www-form-urlencoded的本质区别

    一是数据包格式的区别 二是数据包中非ANSCII字符怎么编码 是百分号转码发送还是直接发送 一 application x www form urlencoded 1 它是post的默认格式 使用js中URLencode转码方法 包括将na
  • 修改onnx模型输出示例

    前言 如图是netron github链接 软件中打开的onnx模型 可以看到右边模型的最终输出结果是分类值predict 0而非概率值 那么如何获取中间过程的概率值 或者说怎么把右边的图砍掉一截变成左边的图呢 代码 读入模型 import
  • keras_cv进行数据增强

    使用keras cv来做分类数据增强 以下直接上流程 具体的原理和代码上github查看源码及配合tensorflow官网及keras官网来做处理 当前 2022 10 8 这些文档还不是很全 import os import numpy
  • Shell 运行shell脚本的多种方法

    详情地址 运行shell脚本的多种方法 小步教程 Shell 运行shell脚本的多种方法 运行shell脚本文件可通过两类方法 方法1 bash执行 语法 sh 文件 文件可使用相对路径或绝对路径 示例 sh 01hello sh 等价写
  • 游戏出现GetThreadContext failed报错 Unity开发

    解决方案 1 检查是否有360 有的情况 1 简单方案 卸载360 2 专业方案 将游戏exe添加到360信任名单中 解释 360会将一些模拟按键视为木马 然后游戏运行一般直接闪退 2 检查防火墙 专业方案 将游戏exe加入防火墙允许应用的
  • 多端技术栈uniapp开发优势是什么?适合哪种类型产品开发?

    uniapp是一种基于Vue js的跨平台开发框架 它可以支持以单一代码库编写多个平台的应用程序 包括iOS Android Web等 以下是uniapp开发的优势和适用类型的介绍 1 跨平台开发 相比于传统的原生开发 uniapp可以基于
  • tar 打包、压缩和备份

    如何理解 首先讲两个概念 打包 将一大堆文件或目录变成一个总的文件 压缩 将一个大的文件通过压缩算法变成一个小文件 这两种场景一定要区分开 网络上有的技术文章 将tar命令解释为压缩命令 是不完全正确的 关于此点 本文不再拓展 感兴趣的可以
  • 黄页是什么意思

    黄页 起源于北美洲 1880年世界上第一本黄页电话号簿在美国问世 至今已有100多年的历史 黄页是国际通用按企业性质和产品类别编排的工商电话号码薄 相当于一个城市或地区的工商企业的户口本 国际惯例用黄色纸张印制 故称黄页 目前我们常说的黄页
  • Python 类型提示和静态类型检查

    介绍 在本文中 将了解 Python 类型检查 Type Checking 在本教程中 将了解以下内容 类型注释和类型提示 将静态类型添加到代码中 包括你的代码和其他人的代码 运行静态类型检查器 在运行时强制类型 视频介绍如下 Python
  • 树莓派软键盘乱码

    树莓派软键盘乱码的快速处理 matchbox keyboard的显示 处理办法 matchbox keyboard的显示 正常的Matchbox keyboard安装完成后应该出现如下的界面 但是 在初次安装时 发现部分用户的界面出现乱码情
  • react,useEffect一直重复执行

    import useState useEffect from react useEffect callback arr useEffect接受两个参数 callback 回调函数 第一次会默认执行一次 内部可以return一个回调函数 当卸
  • 客户端和服务端端口的建立与连接

    socket 建立通信的端口 并返回引用该端口的文件描述符 man sockst https man7 org linux man pages man2 socket 2 html 头文件 include
  • nacos服务中断导致项目无法连接,就算nacos服务恢复也不会自动注册,springboot要如何配置nacos自动重连?...

    您可以在配置文件中 例如 application properties 或 application yml 中添加如下配置来启用 Nacos 自动重连 spring cloud nacos discovery retry enabled t
  • [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)

    这是作者网络安全自学教程系列 主要是关于安全工具和实践操作的在线笔记 特分享出来与博友们学习 希望您喜欢 一起进步 这篇文章主要介绍5月9日参加津门杯CTF题目知识 包括power cut hate php Go0SS HploadHub和
  • 一步一步写算法(之单向链表)

    声明 版权所有 欢迎转载 请勿用于商业用途 联系信箱 feixiaoxing 163 com 有的时候 处于内存中的数据并不是连续的 那么这时候 我们就需要在数据结构中添加一个属性 这个属性会记录下面一个数据的地址 有了这个地址之后 所有的
  • 四种方法让你的Boost电路更安全

    开关电源最常见的三种结构布局是降压 buck 升压 boost 和降压 升压 buck boost 这三种布局都不是相互隔离的 今天介绍的主角是boost升压电路 the boost converter 或者叫step up convert
  • 宜搭低代码开发师(高级)创建待办列表应用 流程截图及实例代码(避坑专用)

    目录 目标 操作步骤 一 主要涉及的接口 二 代码及说明步骤 目标 试题截图及步骤代码说明 很快完成考试
  • 蓝桥杯常用知识点

    datetime 库 import datetime 设置时间 start datetime date 1901 1 1 不算这一天 是从1900 12 31开始的 end datetime date 2001 1 1 到2000 12 3
  • Tesseract5.0.0+OpenCV3+VS2019安装、字符识别学习

    Tesseract5 0 0 OpenCV3 VS2019安装 字符识别学习 背景 Visual Studio 2019安装 OpenCV3安装 配置 Tesseract v5 0 0安装 在Windows PowerShell中下指令识别