您当前的位置: 首页 >  windows
  • 2浏览

    0关注

    483博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Tesseract-OCR在Windows10(VS2019+vcpkg)平台上的编译与使用

高精度计算机视觉 发布时间:2022-03-19 23:02:31 ,浏览量:2

官方介绍文档,

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             
关注
打赏
1661664439
查看更多评论
0.1673s