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)引入微软OCRicon-default.png?t=M85Bhttps://skydance.blog.csdn.net/article/details/127121788

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/127105004
今日推荐