Qt、tesseract、OpenCV 环境配置

本文介绍如何在Qt环境中配置Tesseract OCR图文识别库,包括详细的步骤和常见问题解决方法,适用于Qt5.5.1与Visual Studio 2013组合。

by luoshi006
欢迎交流~ 个人 Gitter 交流平台,点击直达: Join the chat at https://gitter.im/luoshi006_communication/Lobby

本文分为两个部分,第一部分为配置过程,第二部分为踩坑记录。。。。

环境配置

PC环境

  • Qt5.5.1_msvc2013

库文件

  • tesseract-3.02.02-win32-lib-include-dirs

  • leptonica-1.68-win32-lib-include-dirs

  • tesseract-ocr-3.02.chi_sim.tar(中文训练数据,可选)

配置

库文件 中的文件解压,得到 includelib文件夹。

在Qt中新建项目,项目类型随意,完成后,打开项目 .pro 文件,添加以下内容:

INCLUDEPATH +=  E:/Tesseract-OCR/ocrlib/include\
                E:/Tesseract-OCR/ocrlib/include/leptonica\
                E:/Tesseract-OCR/ocrlib/include/tesseract

win32:CONFIG(debug, debug | release):{
LIBS +=  -LE:\Tesseract-OCR\ocrlib\lib \
-llibtesseract302d              \
-llibtesseract302-static-debug  \
-llibtiff394-static-mtdll-debug \
-lzlib125-static-mtdll-debug    \
-llibpng143-static-mtdll-debug  \
-lliblept168-static-mtdll-debug \
-llibjpeg8c-static-mtdll-debug  \
-lgiflib416-static-mtdll-debug  \
-lliblept168d                   \

} else : win32:CONFIG(release, debug | release):{
LIBS +=  -LE:\Tesseract-OCR\ocrlib\lib \
-llibtesseract302           \
-llibtesseract302-static    \
-llibtiff394-static-mtdll   \
-lzlib125-static-mtdll      \
-llibpng143-static-mtdll    \
-lliblept168-static-mtdll   \
-llibjpeg8c-static-mtdll    \
-lgiflib416-static-mtdll    \
-lliblept168                \
}

在使用 tesseract 的文件中,包含:

#include "baseapi.h"
#include "allheaders.h"

源程序:

std::cout<<"app start ..."<<std::endl;

tesseract::TessBaseAPI tessapi;
tessapi.Init(NULL,"eng",tesseract::OEM_DEFAULT);

const char * filepath = "e:/nn.jpg";

std::string textouttemp;
STRING textout;
if(!tessapi.ProcessPages(filepath,NULL,0,&textout)){
    std::cout<<"tesseract error!"<<std::endl;
    return -1;
}

textouttemp = textout.string();
std::cout<<textouttemp;//<<std::endl;
std::cout<<textouttemp.c_str();//<<std::endl;

std::cout<<"app done ..."<<std::endl;
return 0;

程序中用到的图片:



release模式,运行结果:

app start ...
Hanif Ali Sohag

Hanif Ali Sohag  //识别后的文字会自动附加一个换行;

app done ...

此处 tesseract 环境已经搭建完成。

OpenCV 的环境配置见上一篇blog:http://blog.youkuaiyun.com/luoshi006/article/details/51829688

调试

debug 模式下编译通过,无法运行

效果:
运行后,在弹出的控制台中,没有任何输出,根据打印信息判断【无法进入main函数】。
应用程序输出显示:

Starting F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\tessocr.exe...
F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\tessocr.exe exited with code -1072365566

原因

上文提到的 tesseract 库文件【 libtesseract302d.dll 】是由vs2008生成的,对应的调试库文件在vs2013中已经木有了。。。
此处感谢各种绿化免安装小软件为我注册的 release 版本 dll 文件,在 release 模式下正常运行。

工具:

  • 应用程序事件日志
  • sxstrace.exe
  • dependency
c:\>SxsTrace Trace -logfile:SxsTrace.etl
已启动跟踪。跟踪将保存到文件 SxsTrace.etl。
按 Enter 停止跟踪...


c:\>SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt
正在分析日志文件 SxsTrace.etl...
分析完毕! 将输出保存到文件 SxsTrace.txt。

输出的报告:

=================
开始生成激活上下文。
输入参数:
    Flags = 0
    ProcessorArchitecture = Wow32
    CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en
    ManifestPath = F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\libtesseract302d.dll
    AssemblyDirectory = F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\
    Application Config File = 
-----------------
信息: 正在解析清单文件 F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\libtesseract302d.dll。
    信息: 指令清单定义标识是 (null)。
    信息: 参考: Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
信息: 正在解析参考 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。
    信息: 正在解析 ProcessorArchitecture WOW64 的参考。
        信息: 正在解析区域性 Neutral 的参考。
            信息: 正在应用绑定策略。
                信息: 未找到发布服务器策略。
                信息: 未找到绑定策略重定向。
            信息: 开始程序集探测。
                信息: 未找到 WinSxS 中的程序集。
                信息: 尝试在 C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
                信息: 未找到区域性 Neutral 的指令清单。
            信息: 结束程序集探测。
    信息: 正在解析 ProcessorArchitecture x86 的参考。
        信息: 正在解析区域性 Neutral 的参考。
            信息: 正在应用绑定策略。
                信息: 未找到发布服务器策略。
                信息: 未找到绑定策略重定向。
            信息: 开始程序集探测。
                信息: 未找到 WinSxS 中的程序集。
                信息: 尝试在 C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
                信息: 尝试在 F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
                信息: 尝试在 F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\Microsoft.VC90.DebugCRT.MANIFEST 上探测指令清单。
                信息: 尝试在 F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL 上探测指令清单。
                信息: 尝试在 F:\[img]\my_works\build-tessocr-Desktop_Qt_5_5_1_MSVC2013_32bit-Debug\debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST 上探测指令清单。
                信息: 未找到区域性 Neutral 的指令清单。
            信息: 结束程序集探测。
    错误: 无法解析参考 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。
错误: 生成激活上下文失败。
结束生成激活上下文。

措施

根据 dependency 下载缺失的 dll文件。
由于依赖库有点多,博主又不想装对应的补丁包,本文偷懒用 release 模式继续坑人。。。。

VS2017、QtOpenCVTesseract 4.1 在计算机视觉和软件开发领域有着广泛的应用,它们可以集成使用以实现复杂的功能。以下是关于它们的集成使用、配置及相关开发信息: ### 集成关联 - **VS2017**:作为一款强大的集成开发环境(IDE),为整个开发过程提供了丰富的工具和功能,支持多种编程语言,可用于创建各种类型的应用程序。 - **Qt**:是一个跨平台的应用程序开发框架,提供了丰富的 GUI 组件和工具,能够方便地创建图形用户界面。与 VS2017 结合使用时,可以在 VS2017 中利用 Qt 的功能开发跨平台的应用。 - **OpenCV**:是一个开源的计算机视觉库,提供了大量的图像处理和计算机视觉算法,可用于图像和视频处理、目标检测、特征提取等任务。在 VS2017 中集成 OpenCV 后,可以利用这些算法开发计算机视觉相关的应用。 - **Tesseract 4.1**:是一个开源的 OCR(光学字符识别)引擎,可用于识别图像中的文字。结合 OpenCV 对图像进行预处理后,再使用 Tesseract 4.1 进行文字识别,可以提高识别的准确性。 ### 配置步骤 #### 安装 VS2017 从微软官方网站下载并安装 VS2017,安装过程中选择适合的工作负载,如“使用 C++ 的桌面开发”。 #### 安装 Qt 1. 下载在线安装包,按照提示进行安装。安装过程中可以选择需要的 Qt 版本和组件。 2. 注册 Qt 账号(如果没有),安装完成后,在 VS2017 中安装 Qt Visual Studio Tools 扩展,以便在 VS2017 中使用 Qt。 #### 安装 OpenCV 1. 从 OpenCV 官方网站下载 OpenCV 4.1 版本的库文件。 2. 解压下载的文件到指定目录,配置系统环境变量,将 OpenCV 的 bin 目录添加到系统的 PATH 变量中。 3. 在 VS2017 中配置 OpenCV 项目属性,包括包含目录、库目录和链接器输入等。 #### 安装 Tesseract 4.1 1. 从 Tesseract 官方网站或 GitHub 下载 Tesseract 4.1 版本的安装包,进行安装。 2. 配置系统环境变量,将 Tesseract 的安装目录添加到系统的 PATH 变量中。 ### 开发示例 以下是一个简单的示例代码,展示了如何在 VS2017 中使用 QtOpenCVTesseract 4.1 进行图像文字识别: ```cpp #include <opencv2/opencv.hpp> #include <tesseract/baseapi.h> #include <QApplication> #include <QLabel> #include <QPixmap> #include <QImage> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 读取图像 cv::Mat image = cv::imread("test_image.jpg"); if (image.empty()) { return -1; } // 使用 OpenCV 进行图像处理(可选) cv::cvtColor(image, image, cv::COLOR_BGR2GRAY); cv::GaussianBlur(image, image, cv::Size(5, 5), 0); cv::threshold(image, image, 0, 255, cv::THRESH_BINARY + cv::THRESH_OTSU); // 使用 Tesseract 进行文字识别 tesseract::TessBaseAPI api; if (api.Init(NULL, "eng")) { return -1; } api.SetImage(image.data, image.cols, image.rows, 1, image.step); char* outText = api.GetUTF8Text(); // 显示识别结果 QLabel label; QImage qImage(image.data, image.cols, image.rows, QImage::Format_Grayscale8); QPixmap pixmap = QPixmap::fromImage(qImage); label.setPixmap(pixmap); label.setWindowTitle(QString::fromUtf8(outText)); label.show(); api.End(); return a.exec(); } ``` ### 注意事项 - 在配置过程中,确保各个库的版本兼容,避免出现兼容性问题。 - 在使用 Tesseract 时,需要下载相应的语言数据文件,并将其放置在正确的目录中。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值