Opencv4图像分割和识别第四课(实战3)基于vs2017+tesseract4.0识别字符

前言

如何使用tesseract开源库进行字符识别是实战3的重点和难点。 要在自己的开发环境中使用合适的tesseract包,必须先下载源代码来根据自己的开发平台进行编译,这不是件容易的事情,坑蛮多啊! 不过课程里面会对此进行详细讲解。

本文(也是实战3的课后作业)讲述如何在visual studio2017+win10环境中配置tesseract库,并使用其基本APIs来进行测试图片中字符识别。

配置

tesseract源代码在visual studio2017+x64环境 编译并install好后,就可以在C:\Program Files\下找到目录:tesseract,其内容如下所示:

Opencv4图像分割和识别第四课(实战3)基于vs2017+tesseract4.0识别字符_第1张图片

1)首先 include目录下面 目前可能只有tesseract子目录,我们需要手动创建一个子目录:leptonica,然后把C:\Users\xxx\.cppan\storage\src\8f\a3\90d7\src下面得内容全部拷贝到leptonica目录下面,部分文件示意如下:

Opencv4图像分割和识别第四课(实战3)基于vs2017+tesseract4.0识别字符_第2张图片

 2)其次,使用visual studio2017创建或打开一个新工程,并将tesseract头文件和库包含进来,如下所示。

Opencv4图像分割和识别第四课(实战3)基于vs2017+tesseract4.0识别字符_第3张图片

Opencv4图像分割和识别第四课(实战3)基于vs2017+tesseract4.0识别字符_第4张图片

 最后将tesseract/bin目录加入到环境变量,如下所示。

示例代码

本课作业就是读取一张图片test_code.jpg,然后使用tesseract apis来识别出里面的字符。

#include 
#include 

tesseract::TessBaseAPI tess;

if (tess.Init("D:/tesseract-4.0.0/tessdata", "eng"))
{
	std::cout << "OCRTesseract: Could not initialize tesseract." << std::endl;
	return 1;
}

// setup
tess.SetPageSegMode(tesseract::PageSegMode::PSM_AUTO);
tess.SetVariable("save_best_choices", "T");

// read image
auto pixs = pixRead("xxx/test_code.jpg");
if (!pixs)
{
    std::cout << "Cannot open input file: " << "chars_detection.png" << std::endl;
    return 1;
}

// recognize
tess.SetImage(pixs);
tess.Recognize(0);

// get result and delete[] returned char* string
std::cout << std::unique_ptr(tess.GetUTF8Text()).get() << std::endl;

// cleanup
tess.Clear();
pixDestroy(&pixs);

 代码里面有几个注意点如下:

1)项目头文件目录配置为xxx/tesseract/include, 所以代码里面需要把其子目录tesseract以及leptonica在include头文件是也需要加上,如下红体字所示:

 #include

2)tess.init(xxx)需要指定tessdata语言数据包,否则该语句执行会失败。这些语言数据包需要单独从github上下载,可以针对自己需要的字体的语言来下载相应的包。比如说英语字体的识别,就要下载 如下图红框所示的文件。

Opencv4图像分割和识别第四课(实战3)基于vs2017+tesseract4.0识别字符_第5张图片

3)项目编译时会遇到一个error:  alltypes.h里面找不到endianness.h。解决办法很简单,就是把这句include语句注释掉。

//#include "endianness.h"

结果演示

test_code.jpg如下图所示:

调用上面代码得到的识别结果打印如下:

识别结果和原文内容完全一致。 

 

 

你可能感兴趣的:(计算机视觉网络课程)