基于vs2008编译Tesseract 3.02.02

来源:互联网 发布:阿里云的好处 编辑:程序博客网 时间:2024/06/16 12:32

Tesseract有发布版也有代码版,对于真正想学习里面算法的同学,仅仅有发布版是不够用的,将代码跑通是必要的一步。而github上下载的tesseract是无法直接运行的,会出现一定的问题。而网上所谓的一些能跑通的工程下载后也不一定可以运行,查阅了很多很多资料,试了很多次错才将程序跑通,下面总结一下我遇到的一些问题,给出解决方案,供大家参考。

背景

由于项目需求,我需要在vs2008上运行Tesseract,所以我选择了Tesseract3.02.02版本。这个版本Tesseract源码中还是有相应工程的。但是这个工程缺少依赖会报错。
(这个过程中我也曾试过直接从网上找能运行好的工程,但是并没有找到能够直接运行的程序,至少是针对我的需求。也曾下过很多版本的程序,茫然无措,甚至想过放弃在vs2008上运行,但是所幸坚持下来就会有好的结果啦,所以也想跟大家说句鸡汤,坚持就是胜利。)

实操

  1. 下载tesseract版本是个选择,我比较建议去github上tesseract官方链接下载相应tesseract版本,我选择了3.02.02的zip下载包。
  2. 解压后选择vs2008的工程打开,运行报错。
  3. 报错情况一开始是缺少allheaders.h文件,查阅网上相关资料,这是由于tesseract缺少leptonica依赖产生的问题。需要下载leptonica。这里给出下载链接leptonica官网,里面有leptonica的各版本源码等,这里经过我试错得知,我们下载leptonica-1.68-win32-lib-include-dirs.zip 即可,里面就包含了全部tesseract需要的lib和头文件等。(网上一些资料说tesseract3.02.02版本的需要下载leptonica1.70以上版本的可以忽略,并没有关系)下载后解压,将相应的include和lib放入tesseract工程中,接下来进行最为繁琐的一步。
  4. 给工程添加依赖和引用。
    1)报错缺少头文件
    添加头文件目录: 属性–>C/C++–>常规–>附加包含目录,加上头文件存放的目录。
    2)报错缺少lib文件或fatal error LNK1104: 无法打开文件“×××.lib”或者LNK1181无法打开输入文件“×××.lib”或者error LNK2019: 无法解析的外部符号,原因都是编译器找不到lib文件,下面步骤依次做好就应该没有什么问题了
    添加lib文件: 属性–>链接器–>输入–>附加依赖项,加入库名(×××.lib)
    给项目添加库文件路径:属性–>链接器–>常规–>附加目录 ,加上库文件所在的路径。
    直接将lib文件添加库文件到工程中:右键项目–>添加–>现有项目,选择lib文件。
    3)还可能遇到一个问题,warning后紧跟一些错误的,warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。这个问题在于需要解决这个warning,解决后其他问题就没有了。解决方法:
    打开报warning的文件,点击文件–>高级保存选项,改变编码格式。(我这里是将“Unicode”改为了“简体中文(GB2312)- 代码页936”)重新编译后就没有问题了~
  5. 编译通过后,在release模式下,可能出现“无法找到“xxx.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件”的问题。
    其实问题在于,项目不生成调试文件pdb,所以无法调试。需要更改:
    属性–>链接器–>调试–>生成调试信息,改为是
    属性–>c/c++–>常规–>调试信息格式,改为用于“编辑并继续”的程序数据库(/ZI)
    属性–>C/C++ –>优化–>优化,改为禁用(/Od)
    因为为了生成这个文件,需要设定debug信息的格式并关掉O2,还要更改linker生成调试信息的开关。
    网上还有说Debug模式,运行时完全正常,调试就出现对话框,显示出错信息:“无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件。” 的问题,解决方法是一样的,这里不再赘述。

至此,程序就可以正常运行啦~成功!撒花~~
后面还会再对tesseract的原理进行深入学习,会再进行记录哒~~

原创粉丝点击