官方介绍文档,
Compilation guide for various platforms | tessdoc
因为是windows平台,因此可以通过vcpkg管理你的开发包,也可以通过sw来管理。如何使用vcpkg请参考这里。
我这里使用vcpkg来管理我的开发包。
vcpkg install tesseract:x64-windows
或者,
vcpkg install tesseract:x64-windows-static
该指令会直接编译生成你所需要的文件。我这里一气呵成,没有报任何错误。
程序过程接下来我们测试一下如何使用tesseract开发一个文字识别程序,
(1)首先,创建一个空的项目,名称为tesseract-test;
(2)添加OpenCV依赖项
属性--配置--C/C++--添加附加包含目录,输入下面的目录,
D:\OpenCV455\dev;D:\OpenCV455\opencv-4.5.5\include;D:\OpenCV455\opencv-4.5.5\modules\features2d\include;D:\OpenCV455\opencv-4.5.5\modules\core\include;D:\OpenCV455\opencv-4.5.5\modules\flann\include;D:\OpenCV455\opencv-4.5.5\modules\imgproc\include;D:\OpenCV455\opencv-4.5.5\modules\highgui\include;D:\OpenCV455\opencv-4.5.5\modules\photo\include;D:\OpenCV455\opencv-4.5.5\modules\video\include;D:\OpenCV455\opencv-4.5.5\modules\videoio\include;D:\OpenCV455\opencv-4.5.5\modules\objdetect\include;D:\OpenCV455\opencv-4.5.5\modules\python\include;D:\OpenCV455\opencv-4.5.5\modules\shape\include;D:\OpenCV455\opencv-4.5.5\modules\calib3d\include;D:\OpenCV455\opencv-4.5.5\modules\imgcodecs\include;D:\OpenCV455\opencv-4.5.5\modules\ml\include;D:\OpenCV455\opencv-4.5.5\modules\dnn\include;D:\OpenCV455\opencv-4.5.5\modules\stitching\include;D:\OpenCV455\opencv-4.5.5\modules\superres\include;D:\OpenCV455\opencv-4.5.5\modules\videostab\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\xfeatures2d\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\ximgproc\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\videostab\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\superres\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\shape\include
当然,取决于你的系统,如果你下载的是OpenCV的VS2019二进制包,路径会有所不同。填写上自己实际可能用到的地址就好,如图,
(3)添加tesseract依赖
前面我们已经安装好了tesseract,这里我们把他整合到项目中来。
通过菜单:工具-->Nuget包管理器-->程序包管理器控制台,
输入指令:vcpkg integrate project, 我们发现他弹出了一行字,
Install-Package vcpkg.D.vs3D.vcpkg -Source "D:\vs3D\vcpkg\scripts\buildsystems"
我们只要拷贝这行字到同一个控制台窗口,回车后, vcpkg管理的项目就添加到程序中去了,整个过程如下图所示,
当然你也可以通过项目属性--管理nuget程序包的方式来添加,原理都一样,更具体的可以参考这里,
Tools_vcpkg包管理工具在VS2019项目开发中的使用_高精度计算机视觉的博客-CSDN博客
同样这里要特别提醒,需要注意且容易忽视的一点是,如果你的vcpkg安装的是x64-windows,项目一定要选x64。因为很多项目创建时默认是x86的,所以你总是发现那些已经安装的头文件总是提示找不到路径。
注意(3a):打开powershell时,如果弹出下面的错误,
无法加载文件 C:\Users\Administrator\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
就可以选通过下面的办解决,
win10找到VS2017下面的Developer Powershell后以管理员身份打开,输入:
get-ExecutionPolicy # 查看系统执行策略状态 set-ExecutionPolicy remotesigned # 修改执行策略状态
然后直接选“A"(代表All)如果下面红红的一片,说明有可能没成功。那就再输入
Set-ExecutionPolicy unrestricted
通常能设置成功的话,下面不会有任何输出。直接关闭Windows Powershell,再重启VS2019,然后再通过工具栏打开powershell,此时一切应该恢复正常。
注意(3b):通过Ctrl+Alt+A打开一个的是普通终端命令窗口(或通过菜单:视图--其他窗口--命令窗口打开),这个不是我们所需要的powershell命令窗口。
注意(3c):通过工具--命令行--开发者Power Shell打开的命令窗口是普通的powershell窗口。
(4)报错
随便找了一个eng.traindata试了一下,报错,
Error: Tesseract (legacy) engine requested, but components are not present in D:/open/tesseract510/test/testdata/eng/eng.traineddata!! Failed loading language 'eng' Tesseract couldn't load any languages!
用git-bash看了一下,
$ ./tesseract -v tesseract 4.1.1 leptonica-1.81.1 (Mar 19 2022, 17:41:20) [MSC v.1929 LIB Release x64] libgif 5.2.1 : libjpeg 6b (libjpeg-turbo 2.1.2) : libpng 1.6.37 : libtiff 4.3.0 : zlib 1.2.11 : libwebp 1.2.1
原因,tesseract版本是4.1.1,配套的traineddata文件某些语言版本不支持老版本的引擎,
于是下载这个版本的eng.traindata,
https://github.com/tesseract-ocr/tessdata
tessdata/eng.traineddata at main · tesseract-ocr/tessdata · GitHub
然后再试,问题解决。
程序源码测试用的程序源码如下,很简单,
#include "tesseract-test.h"
#include
#include
#include
#include
#include
#include
#include
int main()
{
std::string image_name = "D:/open/testimg/eurotext.png";
cv::Mat imageMat;
imageMat = cv::imread(image_name);
if (imageMat.data == nullptr)
{
printf("No image data \n");
return -1;
}
//cv::Mat blurMat;
//cv::medianBlur(imageMat, blurMat, 5); // 图像模糊
cv::Mat z1, g_grayImage;
cv::cvtColor(imageMat, z1, cv::COLOR_BGR2GRAY); // 灰度图
// cv::threshold(z1, z2, 214, 255, cv::THRESH_BINARY); // 阈值
cv::adaptiveThreshold(z1, g_grayImage, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 7, 25); // 自动降噪
namedWindow("Image1", cv::WINDOW_AUTOSIZE);
cv::imshow("Image1", g_grayImage);
cv::waitKey(0);
std::system("chcp 65001");
char* outText;
tesseract::TessBaseAPI api;
//if (api.Init(NULL, "chi_sim")) // for chinese
if(api.Init("D:/open/tessdata", "eng", tesseract::OEM_DEFAULT))
{
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?