做一个作用涉及的计算机视觉,并且要求只能用C++或者MATLAB实现。考虑到至少C++还用过一段时间,OpenCV也接触过。于是准备使用C++实现。在寻找样例代码的过程中,发现网上的代码最适合新手的还是各类官方tutorial以及一些比较良心的入门书籍的代码。
参考代码来自《OpenCV 实例精解(OpenCV By Example)》的第11章,使用Tesseract识别文本。
但是在代码成功运行之前,笔者在解决这个问题的时候遇到不少因为知识不够的坑,现在做一个记录,以便后面的同学能够少走一些弯路。
目录
一、安装依赖
二、编译Tsseract
三、编译OpenCV+OpenCV_contrib
四、代码测试
一、安装依赖
1.VS2017
2.cmake(我用的是写本文时的最新版,3.12.4)
3.cppan(本时期GitHub上最新release版本)
4.Tesseract 3.05.01
5.OpenCV 3.4.2
6.OpenCV_contrib 3.4.2
确保1、2、3安装完成,
以及4、5、6源码下载完成后,再开展后续操作。
二、编译Tesseract
1.创建文件夹
在编译Tesseract之前,为方便后续快速找到编译好的文件,先创建一个名为Tesseract的文件夹(如下图,有一个tesseract-5的目录,尝试了不止5次)。
名为Tesseract的目录下方再创建三个小文件夹,分别为build(编译后输出的工程文件),install(工程文件生成的安装文件),sources(tesseract源代码)。
也就是说,tesseract里面存放的是由 tesseract-3.05.01.zip 解压出来的文件。
2.使用cppan下载依赖包
此时之前下载的cppan就派上用场了。打开cmd,进入sources文件,键入cppan,cppan会自动读取sources下方的cppan.yml,按照文件里面的规定下载依赖包。如果下载成功,进入下一步。
如果下载不成功,或者是后面怎么编译也不对,想重新来过,最好先将cppan的类似于缓存的东西删掉重新下载。我电脑上的位置在C盘的users下面,.cppan 文件就是了。C:\Users\Administrator\.cppan
3.使用 cmake-gui 对 Tesseract 进行编译
打开cmake-gui,进行路径配置
(1) where is the source code:D:/tesseract-5/soruces
(2) where to build the binaries:D:/tesseract-5/build
(3) 点击configure,弹出对话框设置生成器,选择 Visual Studio 15 2017 Win64,点击Finish,这时cmake开始在build目录下生成一些配置文件。
(4) 第一次配置完成后,cmake界面中间会出现一片红色的Name 以及 value,搜索 CAMKE_INSTALL_PREFIX ,将其设置成自己想要的安装路径,比如 D:/tesseract-5/install
(5) 再次点击configure,然后点击generate,此时build文件下就生成了名为tesseract.sln的VS工程文件。
下图为一个概览,因为我已经装好了,所以编译还是按照上面的步骤来。
4.用VS编译生成debug和release库
(1) 打开build下的tesseract.sln文件(点击cmake-gui中的Open Project也可)
(2) 编译生成debug版本库:选择vs菜单“”生成“”下方的debug模式,找到CMakeTargets下的ALL_BUILD,右键->生成解决方案.
在这里可能会遇到一些错误,而且错误主要集中在cppan-d-b-d。
在网上查了一下,这个错误的主要原因是
其实都是文件编码问题。下载得到的文件编码为UTF-8(不带签名),而Visual Studio (中文版)默认保存的文本文件是GB2312编码,对于UTF-8编码的某些字符,在中文版VS下就容易因解码错误导致乱码造成编译错误。
解决方法: 只需要双击对应的错误,跳转到对应的文件,然后点击左上角菜单 “文件选项" 下的"高级保存选项",将unicode(utf-8带签名),改成GB2312。保存后再“生成"即可。
还有一个错误是
锁定到错误发生位置,将其用下面的代码替换即可。
static const STRING kCharsToEx[] = { "'", "`", "\"", "\\", ",", ".","<", ">", "<<", ">>", "" };
(3) 生成安装文件:找到CMakeTargets下的INSTALL,右键,仅限于项目-》仅生成INSTALL。然后在D:/tesseract-5/install下就可以看到所需要的头文件和可执行文件等。
(4) release版本同上,只需要在编译时选择release即可。
此时tesseract就算是编译完成了。可以看到install文件夹下面的文件夹
5.测试环境
将sources里面的tessdata拷贝进D:/tesseract-5/install/bin文件夹下,并且设置好环境变量。
设置系统变量,变量名为 TESSDATA_PREFIX,变量值为tessdata文件夹的上层文件夹目录,这里的目录就是D:/tesseract-5/install/bin。
测试
打开cmd,进入D:/tesseract-5/install/bin,输入tessract eurotext.tif euro.txt
若文件夹下方生成了euro.txt文件,说明编译以及后续操作成功。
这是继续将D:/tesseract-5/install/bin也加入到环境变量PATH,方便后面跑程序。
三、编译OpenCV+OpenCV_contrib
1.编译OpenCV,设置好路径,点击configure
2.搜索OPENCV_EXTRA_MODULES_PATH,并设置其路径,指向opencv_contrib文件夹下的modules文件夹。再次点击configure。
3.2中configure结束之后,搜索tessract以及lept,设置其对应的包含目录和库路径。
Tesseract_LIBRARY: D:/tesseract-5/install/lib/tesseract305d.lib
Tesseract_INCLUDE_DIR: D:/tesseract-5/install/include
Lept_LIBRARY: D:/tesseract-5/install/lib/pvt.cppan.demo.danbloomberg.leptonica-1.74.4.lib
配置好后点击configure,再点击generate,再点击OpenCV project。(最好能fq,因为保不齐有些包获取不到)
4.打开opencv.sln之后,对整个解决方案进行生成, 再对INSTALL右键,仅限于项目-》仅生成INSTALL、自此OpenCV的编译结束。
5.环境配置,最后不要忘了把OpenCV的动态链接库目录加入到环境变量中。
E:\opencv3.4.2\opencv\newbuild-6\install\x64\vc15\bin加入PATH。
四、代码测试
使用的是《OpenCV 实例精解(OpenCV By Example)》的第11章的示例代码。可登录www.hzbook.com,下载该书代码。
在运行项目之前需要先配置项目属性。可以在菜单栏的项目的下拉栏中的属性进行配置(只对该项目有效),也可以在右边栏的属性管理器中进行配置,对后面所有的项目都有效。
1.如图进行包含目录和库目录的配置。
2.对附加依赖项进行配置。如果没有在用cmake-gui编译OpenCV时,勾选BUILD_opencv_world选项,则会生成一大堆lib文件。
为了方便配置附加依赖项,可以进行如下操作。
cmd进入E:\opencv3.4.2\opencv\newbuild-6\install\x64\vc15\lib,键入dir / b *d.lib > libs.txt
即可在该文件夹下生成一个txt文件,里面所有以 “ d.lib ”结尾的文件的全称。
最终结果是
特别鸣谢:
https://blog.csdn.net/xiaoluzjg/article/details/73472428
https://www.cnblogs.com/hupeng1234/p/8545371.html
https://blog.csdn.net/xiaoluzjg/article/details/74459291
https://blog.csdn.net/naidoudou/article/details/70225849