QT案例实战1 - 从零开始编写一个OCR工具软件 (4)引入tesseract
一、概述
因为要实现OCR功能,自己实现不了,就要用第三方的库,经过筛选之后打算引入两种OCR识别引擎。一种是tesseract、一种是winrt的微软OCR。
引入两种是因为识别效果的问题,因为目的主要是识别一些基础场景,比如pdf、一些简单的图片的文字提取,首先只引入了tesseract,但是某些场景识别效果一般。后来又调研了一下其它的,比如easyocr,效果不错,但是识别慢,还是基于python+pytorch的,不太好办。后来看到win11自带的这个ocr,对于这种基础场景识别效果还不错。
再多说一句,网上有说法是tesseract过时了,感觉有失公允,tesseract官方提供的通用模型可能效果不是很好,但是毕竟提供了对于模型进行微调的方法,非常适合特定场景自定义训练。
下面说一说关于如何引入并进行测试。
二、引入tesseract
1、获得编译的库
既然要引入库那要么就下载源码自己编译,要么就找编译好的。这里懒得编译,所以使用vcpkg直接编译好的来使用,Vcpkg是微软团队在GitHub上的一个开源项目,它提供一系列简单的命令,自动下载源码然后编译成三方库,而且并不依赖于Windows注册表或Visual Studio。
不过vcpkg的网络很慢,如果想自己尝试可以在网上找找教程。
我把下载好的整个package都上传到了网盘,八百多兆。
链接:https://pan.baidu.com/s/1PxKLjj0x6LuBAF-y0Hy7KA
提取码:oktf
下面是部分截图,文件夹很多,因为tesseract还依赖其它的一些包。
2、在项目中引用
在上面的图片中,可以看到这两个文件夹,有static的就是静态的库,另一个是share的库。
我们使用share版本的库,打开tesseract_x64-windows文件夹。
其中include就是我们的包含文件。bin、lib文件夹就是release需要的。debug下面自然就是debug的时候需要的。
3、修改CmakeLists.txt文件
(1)首先再项目文件夹下建立了一个叫lib的文件夹,再其下又建立了一个leptonica文件夹、一个tesseract文件夹。因为tesseract接收的是leptonica格式的图片所以要把leptonica引进来。
(2)leptonica文件夹下建立include和lib文件夹。
(3)tesseract文件夹下建立include、lib、tessdata文件夹。tessdata用于存放官方提供的模型。
(4)把相关对应文件都复制到项目内,lib文件夹下要放release和debug的两个lib。include文件夹下直接copy过来。
处理完上面的文件夹相关工作,然后编辑CmakeLists.txt,首先添加include。
include_directories(${CMAKE_SOURCE_DIR}/lib/leptonica/include)
include_directories(${CMAKE_SOURCE_DIR}/lib/tesseract/include)
然后引入lib,debug和release都引入,方便使用。
target_link_libraries(QtFFmpegApp2 PRIVATE debug ${CMAKE_SOURCE_DIR}/lib/leptonica/lib/leptonica-1.82.0d.lib optimized ${CMAKE_SOURCE_DIR}/lib/leptonica/lib/leptonica-1.82.0.lib)
target_link_libraries(QtFFmpegApp2 PRIVATE debug ${CMAKE_SOURCE_DIR}/lib/tesseract/lib/tesseract52d.lib optimized ${CMAKE_SOURCE_DIR}/lib/tesseract/lib/tesseract52.lib)
4、运行测试
项目运行之后会在同级文件夹下生成诸如下面名字的文件夹。我们需要把需要用到的dll都copy到里面(包括tesseract和leptonica依赖的dll,可以再vcpkg对应的库的tools文件夹下找到),debug对应debug、release对应release。
build-QtFFmpegApp2-Desktop_Qt_6_3_1_MSVC2019_64bit-Release
build-QtFFmpegApp2-Desktop_Qt_6_3_1_MSVC2019_64bit-Debug
然后写一小段代码进行测试。
#include "qdebug.h"
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
// 初始化tesseract,LSTM效果相对较好
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
if (api->Init("lib/tesseract/tessdata/", "chi_sim", tesseract::OcrEngineMode::OEM_LSTM_ONLY)) {
// 使用leptonica库打开图像
Pix *image = pixRead(_newFilepath.c_str());
api->SetImage(image);
// 最简单的api,直接识别并打印
char* outText = api->GetUTF8Text();
qDebug()<<"outText:"<<outText;
// 销毁使用过的对象
api->End();
delete api;
delete[] outText;
pixDestroy(&image);
三、下一篇
QT案例实战1 - 从零开始编写一个OCR工具软件 (5)引入微软OCRhttps://skydance.blog.csdn.net/article/details/127121788
相关文章
- 一文详解共享内存-附带QT共享内存Demo实现
- SM2 (含SM3、SM4)国密算法工具QT版,彻底搞懂sm2算法的使用
- c++使用json_qt读写json文件
- 一、Qt初尝试,做一个QT计算器《QT 入门到实战》
- C/C++ Qt TableWidget 表格组件应用
- Qt实验性项目-Http服务器
- 有小伙伴问:上位机用QT还是winform/wpf好?
- 编程在Linux下学习Qt界面编程(linux下qt界面)
- 使用Qt快速设置Linux时间(qt设置linux时间)
- Linux下 Qt 安装指南(linux下qt的安装)
- Qt 实现 Linux 串口通信编程(qt串口linux)
- Linux下Qt环境下串口编程实践(linuxqt串口编程)
- 在Linux上体验Qt的魅力(linux下运行qt)
- 实现Linux下Qt应用静态编译的方法(linux下qt静态编译)
- 在Linux中安装Qt第三方库的指南(linux安装qt库)
- Linux上静态编译Qt应用实现方案(linux静态编译qt)
- 基于C、Qt和MySQL的应用程序开发(cqtmysql)
- Qt for Linux:下载与安装指南(qt下载linux)
- Linux Qt 国际化:为全球用户提供无缝体验(linuxqt国际化)
- Adept Qt to Access Linux Commands(qt调用linux命令)
- Linux Qt应用程序打包与发布(linuxqt打包发布)
- Linux下的Qt媒体播放器(qtlinux播放器)
- 提高数据处理效率:探究Qt与MySQL数据库的结合应用(qt与mysql数据库)
- QT快速连接MSSQL数据库,轻松搞定!(QT链接mssql)
- MySQL驱动Qt开发:新开发者的进阶指南(mysql驱动 qt)
- Linux下Qt音频播放:轻松享受音乐乐活力(linux下qt音频播放)