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

这篇具有很好参考价值的文章主要介绍了【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

Tesseract库下载

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

【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
        这个库我已经放到主页的资源下,需要的自取。下载之后解压缩看到以下3个文件夹就说明下载成功。

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

Qt版本选择

        这里我Qt的版本选择的是Qt5.13,大家尽量保持一样,避免出现不必要的错误。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
        这是之前在官网下载的,但是最近去看好像没有这个版本可以下载了,如果在官网中没有找到这个版本可以通过下面微信名片添加我,找我发安装包。

安装步骤

(1)打开安装包,点击Next。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(2)登录自己的Qt账号,Next。(没有Qt账号的话注册一个即可)
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(3)这里最好修改路径,放到D盘,毕竟Qt还是比较大的。然后Next。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(4)勾选以下选项,Next。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(5)Next后开始安装。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)

VS2017安装

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

MSVC调试器安装

【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
        虽然我们在安装Qt的时候,有选择MSVC版本,但是这里只会显示MinGW(也就是windows模拟器版本),这时候我们就需要安装一个MSVC调试器。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
        可以在我的主页资源中找到这个工具下载。
(1)解压后点击安装包,这里路径可以修改成D盘,Next。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(2)选择No,Next。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(3)只需要勾选这个,Install。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)

构建套件的导入

(1)安装完之后,打开Qt就可以发现MSVC版本的编译器就会自动加载进去。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
(2)此时只需要在构建套件中按照红色框中的选,Apply,OK即可。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
        这样,就成功地将各种环境配置好了。

文字识别功能的检测

(1)新建一个工程,在.pro文件中添加这四个语句,+=后的路径是刚才下载Tesseract库存放的路径,按照我写的这个定位即可。
【C++开发】Qt+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(图二)的同级目录下。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)

(5)运行。需要注意:这里必须使用release来运行。
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)
        这里看到,识别的效果还是挺好的!
        按照这套流程安装操作下来(版本一致),很大概率都是没问题的(测试了几台机子了),如果还出现问题的话,可以私信或者在下方名片添加我讨论,也可以在评论区交流讨论。文章来源地址https://www.toymoban.com/news/detail-475940.html

到了这里,关于【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java使用tesseract-ocr进行文字识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 公司使用AI进行OCR文字识别效果不好,并且提供的服务不稳定,本次查找到使用java也能连接的OCR开源项目进行识别的学习 tesseract-ocr是一个开源的OCR文字识别项目,目前版本已经更新到5.X.X了,并且提供

    2024年02月04日
    浏览(40)
  • Android开发:通过Tesseract第三方库实现OCR

    一、引言         什么是 OCR ?OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。简单地说,OCR是一种技术,该项技术采用光学的

    2024年02月16日
    浏览(62)
  • Android离线文字识别-tesseract4android调用

    Android在线文字识别可以调阿里云的接口Android文字识别-阿里云OCR调用__花花的博客-CSDN博客 需要离线文字识别的话,可以调tesseract4android。个人测试效果不是特别理想,但是速度真的很快,VIVO S10后摄照片,80ms内识别完成。现有的蛮多资料都写的是调用tess-two,但是这个库,已

    2024年02月03日
    浏览(57)
  • c++ Qt框架中的各种集合详解

    QList 是一个动态数组,类似于C++标准库的std::vector。它可以存储各种类型的元素,并提供了插入、删除和访问元素的方法。 添加和插入元素 访问元素 修改元素 删除元素 查找元素 遍历元素 获取列表信息 排序 复制和合并 QVector 类似于 QList ,但适用于需要高效连续内存存储的

    2024年02月11日
    浏览(39)
  • C++ Qt开发:TabWidget实现多窗体功能

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 TabWidget 标签组件的常用方法及灵活运用。 QTabWidget 是Qt中用于实现标签页(t

    2024年02月04日
    浏览(47)
  • C++ Qt开发:QUdpSocket实现组播通信

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用 QUdpSocket 组件实现基于UDP的组播通信。 组播是一种一对多的通信方式

    2024年03月20日
    浏览(33)
  • 实现div元素和文字水平及垂直居中的方法(超简单,适应各种场合)

    实现实现div元素和文字水平及垂直居中的方法如下: div元素水平居中: style=\\\"margin:0 auto\\\" div元素垂直居中: style=\\\"padding: (外层div的高-内层div的高)/2; background-clip:content-box; \\\" div文字水平居中: 外层div中style=\\\"text-align: center; \\\" div文字垂直居中: 内层div中style=\\\"line-height: 外层div的高

    2024年02月13日
    浏览(42)
  • 基于Qt5的图像交互控件开发(C++实现)

    博主近期看到海康VM、halcon以及visionpro视觉软件都包含一个图像智能交互控件,然后近期根据其中的技术原理,也基于Qt5仿照开发了一个类似的功能,包含矩形、旋转矩形、任意多边形、圆、圆环、扇环,直线卡尺以及圆卡尺等常用控件,图像智能交互是在计算机视觉领域中

    2024年02月05日
    浏览(57)
  • 百度OCR通用文字识别的使用

    目录 1、 首先进入百度AI开放平台,注册百度智能云账号,进入控制台并创建应用 1.1、 登录百度AI开放平台 1.2、 进入控制台-文字识别 1.3、 创建应用 1.4、 查看帮助文档 2、python下载baidu-aip库 3、两种方式调用api发送请求,获取文字识别结果 3.1、 通过AipOcr交互 3.1.1、 新建A

    2024年02月07日
    浏览(43)
  • C++ Qt开发:Tab与Tree组件实现分页菜单

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 tabWidget 选择夹组件与 TreeWidget 树形选择组件,的常用方法及灵活运用。 QTabW

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包