使用 Qt 5.8 构建 Tesseract OCR

Posted

技术标签:

【中文标题】使用 Qt 5.8 构建 Tesseract OCR【英文标题】:Build Tesseract OCR with Qt 5.8 【发布时间】:2017-09-29 22:50:13 【问题描述】:

我有一个基本的空 Qt 5.8 项目,我想集成 Tesseract 库来处理它。我找不到任何完整的分步说明如何做到这一点,所以我希望有人可以分享经验。

我想在我的代码中使用类似的东西:

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>

我知道我需要在 .pro 文件(等 LIBS、HEADERS)中添加一些额外的说明,但我不知道是否有任何正确的方法可以做到这一点。

Qt 5.8

Windows 10

MinGW 32 位

【问题讨论】:

【参考方案1】:

“with Qt”部分是多余的,为了使用通用库,您实际上并不需要“with Qt”做任何事情。

最好使用相同的或至少二进制兼容的编译器来构建库。实际构建说明可以在here找到。

至于 Qt PRO 文件,您可以简单地use the wizard from Creator - 单击左侧栏中的项目名称(项目树)和“添加库”,然后根据您使用的库类型按照向导进行操作。

它将生成以下格式的必要项目定义:

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/release/ -lmylib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/debug/ -lmylib
else:unix: LIBS += -L$$OUT_PWD/../../../projects/mylib/ -lmylib

INCLUDEPATH += $$PWD/../../../projects/mylib
DEPENDPATH += $$PWD/../../../projects/mylib

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/release/mylib.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/debug/mylib.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/libmylib.a 

【讨论】:

【参考方案2】:

Ubuntu 和 MacOS

可以在here 找到一个很好的教程,并在 .pro 中为 Ubuntu 添加这些行:

INCLUDEPATH += /usr/local/include/tesseract
INCLUDEPATH += /usr/local/include/leptonica
LIBS += -ltesseract -llept

Windows

你应该编译 tesseract 项目,完整的分步说明可以找到here

win32:CONFIG(release, debug|release): LIBS += -L'C:/Program Files/tesseract/lib/' -ltesseract50
else:win32:CONFIG(debug, debug|release): LIBS += -L'C:/Program Files/tesseract/lib/' -ltesseract50d
INCLUDEPATH += 'C:/Program Files/tesseract/include'

【讨论】:

【参考方案3】:

在 Tesseract 处于其稳定分支之前,我曾在一个也使用 OpenCV 的项目中这样做过。这让我可以省去所有图像阅读库,因为我会通过 OpenCV 做到这一点。我最终通过 Cygwin 编译了 Tesseract,但这给了我在 MinGW32 项目中使用的二进制兼容库。

我大部分时间都关注http://vorba.ch/2014/tesseract-cygwin.html。我这样配置 Leptonica 1.72:

./configure --without-giflib --without-zlib --without-libpng --without-jpeg --without-libtiff --without-libwebp --without-libopenjpeg

如果你在 cygwin 下编译 leptonica,源路径中不能有任何空格,否则你会得到流浪的 '\' 错误。

要编译 tesseract 本身,你会发现 MinGW 不提供 strtok_r.h。但是,Tesseract 包含一个 strtok_r.cpp 版本,因此最简单的修复方法是编辑 ambigs.cpp 并将 #include "strtok_r.h" 替换为函数签名:

char *strtok_r(char *s, const char * sep, char ** p);

MinGW 在 math.h 中有一个关于 _hypot 函数的错误。将其替换为 hypot(不带下划线)可解决此问题。

这是我当时为自己记录的所有内容。如果您有任何问题,请告诉我,以便我查看是否忘记添加任何内容。

【讨论】:

以上是关于使用 Qt 5.8 构建 Tesseract OCR的主要内容,如果未能解决你的问题,请参考以下文章

VS2015社区版Qt 5.8项目构建失败

QT 5.8 WebEngine Html 5 视频播放器支持

CentOS 7 上的 Qt-5.8

如何在VS2015中使用PostgreSQL插件静态编译Qt 5.8

在 Visual Studio 2017 社区版上编译时出现错误 Qt 5.8

Qt 5.8 QTcpServer 无法监听局域网 ip 地址问题