Qt、tesseract、OpenCV 环境配置

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 模式继续坑人。。。。

<think>好的,我现在需要帮助用户解决如何将Tesseract OCR集成到QT应用程序中的问题。首先,我得回想一下自己之前了解过的相关知识。Tesseract是一个开源的OCR引擎,由Google维护,而QT是一个跨平台的C++应用程序开发框架。用户可能想要在QT应用中添加OCR功能,比如识别图像中的文字。 首先,我应该考虑如何将两者结合起来。可能需要通过C++来调用Tesseract的API,因为QT主要是用C++开发的。用户需要安装Tesseract库,并在QT项目中正确配置头文件和库路径。另外,可能还需要处理图像数据的传递,比如将QT中的图像格式转换为Tesseract能够识别的格式,例如使用Leptonica库。 接下来,我需要确保步骤清晰。第一步是安装Tesseract,用户可能需要从官方网站下载或者使用包管理器安装。然后,在QT的.pro文件中添加必要的包含路径和链接库。例如,使用INCLUDEPATH和LIBS指令。同时,要提醒用户注意库的版本和平台兼容性,比如Windows、Linux或macOS下的不同配置方法。 然后,代码示例是关键。用户可能需要一个简单的例子来展示如何在QT中初始化Tesseract,加载图像,进行OCR处理,然后释放资源。这里要注意错误处理,比如检查图像是否成功加载,以及Tesseract API返回的结果是否正确。此外,还要提到如何处理不同的图像格式,可能需要用QT的QImage类来读取图像,然后转换为Tesseract需要的Pix格式。 可能遇到的问题包括链接错误,比如找不到Tesseract的库文件,或者头文件路径不正确。这时候需要检查.pro文件的配置,确保路径正确。另外,字符编码问题也可能出现,特别是处理多语言文本时,需要设置正确的语言包路径和识别语言参数。 用户还可能关心如何提高OCR的准确性,这涉及到图像预处理。比如在将图像传递给Tesseract之前,进行灰度化、二值化、降噪等处理。QT中可以使用QImage进行一些基本的图像处理,或者集成OpenCV来更高效地处理图像,然后将处理后的图像数据传给Tesseract。 另外,需要提到如何获取和处理OCR结果。Tesseract的输出包括文本内容、置信度等信息,用户可能需要将这些结果显示在QT的界面组件中,比如QLabel或QTextEdit。同时,要注意内存管理,确保在不再需要Tesseract实例时正确释放资源,避免内存泄漏。 最后,应该生成相关问题,帮助用户进一步探索。比如如何优化OCR性能,如何处理多语言识别,或者如何结合QT的摄像头模块进行实时OCR。这些问题可以引导用户更深入地集成和使用TesseractQT应用中。</think>### TesseractQT集成方法 #### 1. 环境准备 - 安装Tesseract OCR库: - Windows:从[UB-Mannheim仓库](https://github.com/UB-Mannheim/tesseract/wiki)下载预编译包 - Linux:`sudo apt install tesseract-ocr libtesseract-dev` - macOS:`brew install tesseract` - QT项目配置(在.pro文件中添加): ```qmake INCLUDEPATH += /usr/include/tesseract LIBS += -ltesseract ``` #### 2. 基本集成示例 ```cpp #include <tesseract/baseapi.h> #include <leptonica/allheaders.h> #include <QImage> #include <QDebug> void performOCR(const QString& imagePath) { tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI(); // 初始化语言包(需提前下载) if (api->Init(nullptr, "eng")) { // 英文语言包 qWarning() << "Could not initialize tesseract"; return; } // 加载QT图像并转换格式 QImage qtImage(imagePath); QImage rgbImage = qtImage.convertToFormat(QImage::Format_RGB888); // 设置图像数据 api->SetImage(rgbImage.bits(), rgbImage.width(), rgbImage.height(), 3, // 每个像素的字节数 rgbImage.bytesPerLine()); // 获取OCR结果 char* text = api->GetUTF8Text(); qDebug() << "识别结果:" << text; // 清理资源 api->End(); delete [] text; delete api; } ``` #### 3. 关键注意事项 1. **图像预处理**: - 建议转换为灰度图:`QImage::Format_Grayscale8` - 分辨率建议300dpi以上 - 使用QT的`QImage`进行锐化/降噪处理 2. **多语言支持**: ```cpp // 下载中文数据包后指定路径 api->Init("/path/to/tessdata", "chi_sim+eng"); ``` 3. **性能优化**: - 复用TessBaseAPI实例 - 使用`SetVariable`调整参数: ```cpp api->SetVariable("tessedit_char_whitelist", "0123456789"); // 数字识别 api->SetVariable("user_defined_dpi", "300"); ``` #### 4. 常见问题解决 - **链接错误**:确认.pro文件中库路径正确 - **语言包缺失**:从[tessdata仓库](https://github.com/tesseract-ocr/tessdata)下载所需语言数据 - **图像格式问题**:确保使用`QImage::Format_RGB888`或`Format_Grayscale8`
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值