0. 下载准备
sw下载地址:https://software-network.org/client/
opencv下载地址:https://opencv.org/releases/
opencv_contrib下载地址:https://github.com/opencv/opencv_contrib/releases
Tesseract下载地址:https://github.com/tesseract-ocr/tesseract
若要使用putText在图片中添加中文汉字,则还需要编译freetype和harfbuzz,参考我上一篇文章: 《windows下编译OpenCV带opencv_contrib和freetype》
1. 配置SW(software-network)
1.1 下载windows版本客户端
https://software-network.org/client/
1.2 配置sw
下载的zip文件解压到任意目录,把sw.exe所在的目录设置环境变量
例如我解压到D:\DevTools\sw-master-windows-client目录,则把这个目录设置到环境变量Path中。
打开cmd终端,或者powershell,执行 sw setup 命令
这一步很重要,不执行这个命令,会在下面Tesseract Cmake时报SW_DIR未找到等错误
2. 编译Tesseract
2.1 配置CMake
下载Tesseract,并解压到任意目录,并在Tesseract目录下新建一个build目录,打开CMake-Gui
如上图那样一二三步选择,点击Configure按钮,选择自己要编译的VS版本(我自己要编译VS2017 32位的Tesseract)
上图这里等待有可能出现下载依赖库失败,可以反复多次点击Configure,直到不报错。若依然下载失败,可以尝试科学上网(fan qiang)
(1)Configure完成后,更改一些CMAKE_INSTALL_PREFIX目录, 如果用默认的C盘的目录,在后面编译INSTALL的时候会报错,要使用管理员权限编译, 我建议直接在这里改到其他目录比较好,也便于管理文件。
(2)修改完后,再次点击Configure按钮,等待Configuring done, 如果不爆红,则点击Generate按钮, 等待Generating done。
(3)完成后,点击Open Project按钮,这里会自动打开VS。
(4)在VS中选择ALL_BUILD,右键build,进行编译,如下图:
2.2 处理编译中出现的报错问题
2.2.1 new line contant、 syntax error ‘)’ 等错误
这类错误,要把gconvert.c等文件的编码格式改为 UTF-8 Bom 格式 (URF-8 with signature)。
2.2.1.1 VS中添加修改文件格式的命令
按照上图这些步骤,添加 Advanced Save Options(高级保存选项),到VS工具栏的File项中。
2.2.1.2 更改文件编码格式
(1)双击VS中错误列表Error List中的错误,可以打开报错的文件,然后在VS工具栏中选择File -> Advanced Save Options, 如下图:
(2)修改文件格式为URF-8 with signature, 如下图:
这样的报错会有大概20个文件左右,一般每次编译只会出现一个,所以要更改完一个文件的格式后,再次编译,再出现报错时,再按照上面的步骤一二,来更改文件格式, 直到编译成功。
2.2.2 LNK2026 module unsafe for SAFESEH image
编译的时候报 module unsafe for SAFESEH image 的错,找到text2iamge工程,右键属性 -> Linker -> Advanced -> Image Has Safe Exception Handlers 更改为No(/SAFESEH:NO), 然后重新ALL_BUILD编译。 (我编译VS2019 64位版本时未出现这个报错,不知道是32位版本的问题,还是VS2017与VS2019的差别)
2.3 获取Tesseract编译后的果实
在Debug模式下,编译ALL_BUILD、INSTALL之后, 再在Release模式下,编译ALL_BUILD、INSTALL。完成Tesseract的编译。 在install目录下会有bin、include、lib文件目录
右键Tesseract工程属性,进入 Linker -> Input -> Additional Dependencies,记录一下下图这两个库的路径(Debug和Release都要)
我记录下的Debug模式下的是:
C:\Users\hm\.sw\storage\pkg\75\6a\600e\obj\bld\470139\lib\org.sw.demo.danbloomberg.leptonica-1.80.0.lib
C:\Users\hm\.sw\storage\pkg\89\dc\64e7\obj\bld\470139\lib\org.sw.demo.gif-5.2.1.lib
Release模式下的是:
C:\Users\hm\.sw\storage\pkg\75\6a\600e\obj\bld\626420\lib\org.sw.demo.danbloomberg.leptonica-1.80.0.lib
C:\Users\hm\.sw\storage\pkg\89\dc\64e7\obj\bld\626420\lib\org.sw.demo.gif-5.2.1.lib
3. 编译OpenCV
3.1 配置CMake
下载解压opencv、opencv_contrib(opencv_contrib的版本和opencv的版本要保持一致),如下图:
(1)打开CMake,如下图选择目录,点击Configure,选择VS版本,并选择32位或者64位
以上,Configure done后,如果有很多爆红的地方,可以参考文章《opencv_contrib安装笔记》
(2)爆红解决后,配置config:
- 勾选 OPENCV_EXTRA_NONFREE 项,否则在运行SIFT、SURF等函数时会报错
- 勾选 BUILD_opencv_world 项,如果需要把生成的opencv的lib和dll包含在一个文件opencv_world.lib和opencv_world.dll内则需要勾选,否则不用勾选
- 设置 OPENCV_EXTRA_MODULES_PATH 项,填入opencv-contrib的目录下的modules目录
(3)再次点击“Configure”按钮,然后会出现Tesseract的配置项,填入上一节中编译Tesseract出的结果,如下图
(4)Lept_LIBRARY中填入上一节2.3中保存下来的Debug模式下的 C:\Users\hm\.sw\storage\pkg\75\6a\600e\obj\bld\470139\lib\org.sw.demo.danbloomberg.leptonica-1.80.0.lib
(5)再次点击“Configure”按钮,会出现一个Leptonica_DIR的爆红,可以不用管
(6)再次点击“Configure”按钮,Leptonica_DIR的爆红消失,Configure done
(7)查看Configure日志,发现有这样一句话: Can’t use Tesseract (details: https://github.com/opencv/opencv_contrib/pull/2220)
需要添加一个 ENABLE_CXX11=ON,如下图
(8)再次点击“Configure”按钮,Configure done, Configure日志出现 Tesseract: YES, 表示Tesseract配置成功了,如下图:
(9)点击“Generate”按钮, Generate done
(10)点击“Open Project”按钮,自动启动VS,打开了OpenCV工程
3.2 编译OpenCV
VS打开OpenCV工程后,在 ALL_BUILD右键,Build, 编译时会报这样的错误,如下图:
是因为要在OpenCV属性里面添加Gif的lib,2.3节中已经保存过的,
Debug模式下的是:
C:\Users\hm\.sw\storage\pkg\89\dc\64e7\obj\bld\470139\lib\org.sw.demo.gif-5.2.1.lib
Release模式下的是:
C:\Users\hm\.sw\storage\pkg\89\dc\64e7\obj\bld\626420\lib\org.sw.demo.gif-5.2.1.lib
填入下图的位置,注意以你编译Tesseract后生产的gif的lib路径为准
因为之前在OpenCV的CMake中配置的Leptonica为Debug版本的lib, 这里顺便把Release模式下的配置改为Release版本的Leptonica的lib: C:\Users\hm\.sw\storage\pkg\75\6a\600e\obj\bld\626420\lib\org.sw.demo.danbloomberg.leptonica-1.80.0.lib
在Debug模式下,编译ALL_BUILD、INSTALL之后, 再在Release模式下,编译ALL_BUILD、INSTALL。完成OpenCV的编译。 在build\install目录下会有bin、include、lib等文件目录
4. 测试Tesseract集成到OpenCV是否成功
使用OpenCV自带的end_to_end_recognition.cpp这个文件中的代码测试
5. 参考资料
[1] https://tesseract-ocr.github.io/tessdoc/Compiling.html#windows
[2] https://my.oschina.net/lsfx/blog/4996692