Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

TesseractOCR + OpenCV环境搭建

Vcpkg包管理工具

想使用TesseractOCR + OpenCV当然可以下载源代码自己编译,但这样对于小白来说会遇到许多问题,尤其是库的依赖需要自己补全。踩了许多坑,后来了解到可以使用包管理工具进行环境搭建。
Vcpkg是可用于Windows,linux和MacOS上跨平台的开源 C/C++ 库管理工具。

Vcpkg安装

Vcpkg的使用需要Git环境。
Vcpkg可以通过Vcpkg官网下载安装包进行安装。
也可以通过git指令git clone https://github.com/Microsoft/vcpkg 来下载到当前目录,再使用.\bootstrap-vcpkg.bat 安装。
安装完成后记得配置下系统环境变量。

使用Vcpkg安装C++库

想要使用Vcpkg安装C++库需要在终端切到安装目录使用.\vcpkg install 库名来安装对应的库。
比如使用以下命令来安装OpenCV与TesseractOCR

1
2
3
.\vcpkg install opencv:x64-windows

.\vcpkg install tesseract

安装需要时间,耐心等待。
安装完成后Vcpkg目录下的packages文件夹存放着对应的库与依赖的文件。可以将其添加进入环境变量中。
tesseract还需要下载训练好的语言包放入.vcpkg\packages\tesseract_x64-windows\share的tessdata文件夹下,
并添加系统变量TESSDATA_PREFIX为tessdata的路径才可以正常使用。

使用

nuget配置文件

使用vcpkg integrate project指令集成到工程,会提醒你在那生成了nuget配置文件
图片
比如我的在C:\Users\20190\vcpkg
在vs中设置nuget配置文件
alt text
然后右击项目名选择->管理 NuGet 程序包
安装对应的包,这样就可以将下载的第三方库集成到指定的工程里。

Cmake配置文件

或使用vcpkg integrate install指令集成到全局
图片
在项目的Cmake配置文件中添加

1
2
// 修改为你自己的路径
set(CMAKE_TOOLCHAIN_FILE "C:/Users/HYW/vcpkg/scripts/buildsystems/vcpkg.cmake")

就可以在项目中#include对应库来使用

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
ui.setupUi(this);
// 初始化Tesseract API
tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();
// 设置Tesseract使用中文语言包
if (api->Init(NULL, "chi_sim"))
{
QMessageBox mesg;
mesg.warning(this, "错误", "Could not initialize tesseract.");
return;
}
// 使用OpenCV读取图像
cv::Mat image = cv::imread(utf8Bytes.toStdString(), 1);
namedWindow("Display window", cv::WINDOW_AUTOSIZE);
imshow("Display window", image);
// 将OpenCV的Mat图像转换为Leptonica的Pix格式
// 先转换为灰度图
cv::Mat grayImage;
cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);
// 创建一个与灰度图尺寸相同的Pix对象,像素深度为8
Pix* pixImage = pixCreate(grayImage.cols, grayImage.rows, 8);
for (int y = 0; y < grayImage.rows; ++y)
{
for (int x = 0; x < grayImage.cols; ++x)
{
// 获取cv::Mat中当前像素的值
uchar pixelValue = grayImage.at<uchar>(y, x);

// 将像素值赋给Pix对象对应的像素
pixSetPixel(pixImage, x, y, (l_uint32)pixelValue);
}
}
// 设置Tesseract的图像
api->SetImage(pixImage);
// 进行文字识别
char* outText = api->GetUTF8Text();
ui.groupBox->setTitle("识别结果:");
ui.textEdit->setText(outText);
// 输出识别结果
qDebug() << "识别结果: " << outText;
// 清理资源
api->End();
delete[] outText;
pixDestroy(&pixImage);

效果
alt text

Vcpkg其他指令

1
2
3
4
5
6
7
8
9
10
11
12
集成到全局:vcpkg integrate install
移除全局:vcpkg integrate remove
集成到工程:vcpkg integrate project(在“\scripts\buildsystems”目录下,生成nuget配置文件)
查看库目录:vcpkg search
查看支持的架构:vcpkg help triplet
指定编译某种架构的程序库:vcpkg install xxxx:x64-windows(x86-windows)
卸载已安装库:vcpkg remove xxxx
指定卸载平台:vcpkg remove xxxx:x64-windows
移除所有旧版本库:vcpkg remove --outdated
查看已经安装的库:vcpkg list
更新已经安装的库:vcpkg update xxx
导出已经安装的库:vcpkg export xxxx --7zip(–7zip –raw –nuget –ifw –zip)

参考资料

个人博客
Vcpkg C/C++库管理工具安装和使用教程
win10 使用vcpkg 安装 opencv 教程
一键部署Tesseract-OCR环境C++版本(Windows)
Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

评论