Tesseract + opencv 3.0 + windows,文本模块体积小,链接错误

Posted

技术标签:

【中文标题】Tesseract + opencv 3.0 + windows,文本模块体积小,链接错误【英文标题】:Tesseract + opencv 3.0 + windows, text module small size, linking errors 【发布时间】:2015-08-16 18:22:48 【问题描述】:

我两天前在 answers.opencv.org 上发布了这篇文章,现在我也在这里发布。 http://answers.opencv.org/question/68634/text-contrib-module-and-tesseract/

大家下午好。首先,对不起我的英语呵呵。 我一直在尝试构建 opencv contrib 模块“文本”,但是我 还没有成功。注意:像 xfeatures2d 这样的其他模块从来没有 给我一个问题。

我的平台是 windows 7 x64,我使用 VS2013 作为编译器,我已经 跟着这个 教程(http://vorba.ch/2014/tesseract-3.03-vs2013.html) 为了 将 Tesseract 3.04 构建为 LIB,但在编译成功后,我 想用cmake生成vproj,问题是 以下:

在 CMake GUI 中,之前选择了 opencv 源,EXTRAS 目录等,我没有得到'Tesseract'组下的变量 正确地(包括和库)。我知道,因为当我点击 配置,日志显示“Tesseract:否”。

我检查了 FindTesseract cmake 脚本,我认为它 不工作....

拜托,任何人都可以给我一些关于发生了什么的线索吗?如何 我可以构建 opencv 文本模块来使用 Tesseract 函数吗?

我还尝试编译文本模块,将链接路径添加到 Tesseract 但是当我想在我的程序中使用时,我得到关于未定义的链接错误 符号...

这种情况困扰了我好几天。在那里 有人在windows下使用文本模块吗?


没有人可以帮助我吗?我已经取得了一些进展,现在 cmake GUI,我说 Tesseract:是的。问题是我没有找到链接 leptonica 库的条目,它不在同一个 Tesseract 组中,而是在“未分组条目”中。

好的,现在问题仍然存在,由 cmake 创建的 VS 解决方案没有正确构建文本模块,因为我可以看到 Lept lib 大约为 9Mb,TesseractLib 为 128Mb(在 /MT 和调试中),但是 opencv_text300d.lib只有12Mb。出了点问题……

我不确定我必须使用哪个 tesseract 版本。我用两种组合训练: liblept168-static-mtdll-debug.lib + libtesseract302-static-debug.lib 和 liblept171-static-mtdll-debug.lib + libtesseract304-static-debug.lib

当然,当我将文本模块链接到我的程序时,它会给我带来链接错误。


链接错误如下所示:opencv_text300d.lib(ocr_tesseract.obj) : error LNK2019: unresolved external symbol "public: bool __cdecl tesseract::PageIterator::BoundingBox(enum tesseract::PageIteratorLevel,int *,int *,int *,int *)const " (?........................


...
#include "opencv2/text.hpp"
...
string output;
cv::Mat aux;
Ptr<OCRTesseract> ocr = OCRTesseract::create();
ocr->run(aux, output);
...

显然,我已经为我的项目设置了额外的包含目录、链接器额外的库目录以及向文本模块输入额外的依赖项。

真的,非常感谢你。

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题。我想出的解决方案是在文本模块中编辑 CMakeLists.txt 文件。

替换

if($Tesseract_FOUND)
include_directories($Tesseract_INCLUDE_DIR)
endif()

add_definitions( -DWINDOWS)
add_definitions( -DNOMINMAX)
SET(Tesseract_DIR "C:\\tesseract-build\\tesseract-ocr")
SET(Lept_DIR "C:\\tesseract-build\\lib")
include_directories(
        $Tesseract_DIR/api
        $Tesseract_DIR/ccutil/
        $Tesseract_DIR/ccstruct/
        $Tesseract_DIR/ccmain/
    )
link_directories( $Tesseract_DIR/vs2013/bin/Win32/DLL_Release/
                  $Lept_DIR/
                  $Lept_DIR/Win32/
                )   

当你运行 Cmake 时,Tesseract 仍然是 no 并且 Tessaract/Lept 库应该是空的。

【讨论】:

非常感谢!有道理! 在使用tesseract生成opencv文本模块之前,我不明白文件中所做的更改,包括leptonica库?我有类似的问题,但使用 cmake 从源代码生成的 tesseract 3.05 和 opencv3.2。

以上是关于Tesseract + opencv 3.0 + windows,文本模块体积小,链接错误的主要内容,如果未能解决你的问题,请参考以下文章

C# - 如何使用 Tesseract 3.0 Wrapper 获取每个字符的边界框?

使用Tesseract和OpenCV构建自动收据扫描仪

进行 OCR 之前的预处理(tesseract、OpenCV)

在 Android 上使用 OpenCV 提高 Tesseract 性能

在进行字符识别之前使用 OpenCV 进行图像预处理(tesseract)

使用Python,OpenCV进行Tesseract-OCR绑定及识别