使用 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的主要内容,如果未能解决你的问题,请参考以下文章
QT 5.8 WebEngine Html 5 视频播放器支持
如何在VS2015中使用PostgreSQL插件静态编译Qt 5.8