【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)

        最近在给之前Qt医疗管理系统项目添加一个文字识别功能,但是在其中遇到非常多坑,花费了我比较多的时间(查阅了很多文章),这篇文章主要用来整理这些坑(非常详细)。

Qt版本:Qt5.13
VS版本:VS2017
编译器(构建套件):Desktop Qt 5.13.0 MSVC2017 64bit
以上环境都必须保持一致,否则可能会出现意想不到的错误。

Tesseract库下载

        我这里选择比较简单的获取库的方法,就是下载已经通过源码编译好的库,当然也可以在GitHub上找到Tesseract的开源项目下载源码自己编译。为什么不选择后者呢?容易出错!如果你是刚接触的小白,本人强烈推荐前者;如果你是大佬,那当我没说哈哈哈~

在这里插入图片描述
        这个库我已经放到主页的资源下,需要的自取。下载之后解压缩看到以下3个文件夹就说明下载成功。

在这里插入图片描述

Qt版本选择

        这里我Qt的版本选择的是Qt5.13,大家尽量保持一样,避免出现不必要的错误。
在这里插入图片描述
        这是之前在官网下载的,但是最近去看好像没有这个版本可以下载了,如果在官网中没有找到这个版本可以通过下面微信名片添加我,找我发安装包。

安装步骤

(1)打开安装包,点击Next。
在这里插入图片描述
(2)登录自己的Qt账号,Next。(没有Qt账号的话注册一个即可)
在这里插入图片描述
(3)这里最好修改路径,放到D盘,毕竟Qt还是比较大的。然后Next。
在这里插入图片描述
(4)勾选以下选项,Next。
在这里插入图片描述
在这里插入图片描述
(5)Next后开始安装。
在这里插入图片描述

VS2017安装

        实测VS2019和VS2022都运行不起来,只有VS2017,大家尽量选择VS2017安装,保持版本一致。最近在VS官网上好像也没有看到VS2017的安装包,有需要的可以到我的主页下的资源中选择下载。
在这里插入图片描述
(1)点击打开社区版的安装包。
在这里插入图片描述
在这里插入图片描述
(2)按照下面操作进行勾选。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)这里最好修改路径到D盘,毕竟VS也是比较大的。
在这里插入图片描述
        至此,Tesseract、Qt以及VS2017都已经准备好了。

MSVC调试器安装

在这里插入图片描述
        虽然我们在安装Qt的时候,有选择MSVC版本,但是这里只会显示MinGW(也就是windows模拟器版本),这时候我们就需要安装一个MSVC调试器。
在这里插入图片描述
        可以在我的主页资源中找到这个工具下载。
(1)解压后点击安装包,这里路径可以修改成D盘,Next。
在这里插入图片描述
(2)选择No,Next。
在这里插入图片描述
(3)只需要勾选这个,Install。
在这里插入图片描述

构建套件的导入

(1)安装完之后,打开Qt就可以发现MSVC版本的编译器就会自动加载进去。
在这里插入图片描述
在这里插入图片描述
(2)此时只需要在构建套件中按照红色框中的选,Apply,OK即可。
在这里插入图片描述
        这样,就成功地将各种环境配置好了。

文字识别功能的检测

(1)新建一个工程,在.pro文件中添加这四个语句,+=后的路径是刚才下载Tesseract库存放的路径,按照我写的这个定位即可。
在这里插入图片描述

INCLUDEPATH += D:\QtProject\tesseracte_lib\tesseract_x64-windows\include\tesseract
LIBS+= D:\QtProject\tesseracte_lib\tesseract_x64-windows\lib\tesseract41.lib

INCLUDEPATH += D:\QtProject\tesseracte_lib\leptonica_x64-windows\include\leptonica
LIBS+= D:\QtProject\tesseracte_lib\leptonica_x64-windows\lib\leptonica-1.78.0.lib

(2)导入头文件(最重要的是最下面的两个<tesseract/baseapi.h> <tesseract/strngs.h>)。使用刚才下载的路径导入即可。

#include <QDebug>
#include <QFileDialog>
#include <QTextCodec>
#include <iostream>
#include <memory>

#include <allheaders.h>
#include <D:/QtProject/tesseracte_lib/tesseract_x64-windows/include/tesseract/baseapi.h>      // tesseract提供的关于C++的接口
#include <D:/QtProject/tesseracte_lib/tesseract_x64-windows/include/tesseract/strngs.h>

(3)代码编写。简单实现一下文字识别功能,看看效果。

    // Basic example
      char *outText;

      tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
      // Initialize tesseract-ocr with English, without specifying tessdata path
      if (api->Init("D:/QtProject/tesseracte_lib/tessdata", "chi_sim"))
      {
          fprintf(stderr, "Could not initialize tesseract.\n");
          exit(1);
      }

      QString filename = QFileDialog::getOpenFileName(nullptr, tr("文件上传"), "", "");
      QTextCodec *code = QTextCodec::codecForName("GB2312");
      std::string str = code->fromUnicode(filename).data();

//      std::string str = path.toStdString();
      const char* ch = str.c_str();

      // Open input image with leptonica library
      Pix *image = pixRead(ch); //absolute path of file
      api->SetImage(image);

      // Get OCR result
      outText = api->GetUTF8Text();

      ui->textEdit->setText(outText);

      // Destroy used object and release memory
      api->End();
      delete [] outText;
      pixDestroy(&image);

(4)要记得将图一路径下的全部文件复制到可执行程序.exe(图二)的同级目录下。
在这里插入图片描述
在这里插入图片描述

(5)运行。需要注意:这里必须使用release来运行。
在这里插入图片描述
在这里插入图片描述
        这里看到,识别的效果还是挺好的!
        按照这套流程安装操作下来(版本一致),很大概率都是没问题的(测试了几台机子了),如果还出现问题的话,可以私信或者在下方名片添加我讨论,也可以在评论区交流讨论。