做一个字符检测比对的小项目,需要借助Tesseract的OCR进行开发。
详见另一篇:https://blog.csdn.net/weixin_46293955/article/details/105961344
待更新…
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文件夹中。
语言包下载链接: 待更新
放置一张图片至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
如果需要提高识别率,需要自己训练字符库。
需要配置JAVA开发环境,过程略。
训练方法: 待更新…
若要在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 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下载链接: 官网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按钮,即完成。
建构完成,如下图:
官网下载链接:https://github.com/tesseract-ocr/tesseract/releases
tesseract release v4.1.1下载链接: 待更新…
操作同tesseract v5.0.0、 CMake使用cmake v3.17.3
查阅资料发现,在VS2019中使用tesseract需要Leptonica的支持,leptonica是一个开源的面向教学的软件,通常被用来作为图像处理和图像分析的一个底层库支持。
leptonica官网下载地址:http://www.leptonica.org/download.html
解压到路径D:\temp\leptonica
在temp文件夹中新建leptonicanew文件夹,使用CMake建构leptonica,如下:
同样2次点击Configure按钮,直到没有报错。并更改INSTALL_PREFIX路径。
依次点击Configure按钮、Generate按钮,完成建构。
文件路径:D:\temp\leptonicanew\leptonica.sln
更改配置属性:
选择release,配置中,勾选INSTALL
在release模式下生成解决方案。
生成成功
文件在此路径D:\leptonica
下载链接:待更新…
重新编译,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,生成工程文件。
需要使用管理员身份打开,具体参考:https://blog.csdn.net/lien0906/article/details/47300881
由于踩了坑,多次无法编译成功,换了Visual Studio 2017尝试,后换回Visual Studio 2019编译成功,步骤同如下尝试。
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编译。