Tesseract 基于CMake的编译及使用

12 篇文章 3 订阅

环境:

编译器:VS2017

平台工具集:Visual Studio 2015 (v140)

CMake3.29.0

安装CMake:Windows下CMake安装教程_window 安装cmake-CSDN博客

参考链接:

windows编译和使用tesseract(C++ api)

vs2019+tesseract5.3.2+leptonica1.83.1基于CMake源码编译攻略

tesseract ocr5.3.3源码编译(基于cmake)_tesseract cmake-CSDN博客

C++ zlib库 源码编译及使用(VS2019)-CSDN博客

win10编译libpng_win10 libpng 使用-CSDN博客

CMake+VS2015下编译libpng,及使用小例

编译顺序

我自己的 CMAKE 编译顺序:

1、tiff-4.0.9,地址:http://download.osgeo.org/libtiff/tiff-4.0.9.zip

     libtiff-4.5.0,地址:http://download.osgeo.org/libtiff/tiff-4.5.0.zip(最终用的)

2、nasm-2.16.01
地址:https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-2.16.01-win64.zip

3、libjpeg-turbo-2.1.5.1,地址:https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.5.1.zip

4、zlib-1.3.1,地址(官网下载源码):zlib Home Site

5、lpng1643,即 libpng16,地址LIBPNG: PNG reference library - Browse Files at SourceForge.net

6、leptonica-1.83.1,地址:https://github.com/DanBloomberg/leptonica/archive/refs/tags/1.83.1.zip

7、tesseract-5.3.4

---- over


tesseract 依赖于 leptonica ;

leptonica 依赖于 tiff,libjpeg,zlib,libpng 。

所以需注意编译的顺序。

tiff:tiff.h,tiff.dll,tiff.lib

libjpeg-turbo

问题及解决方案 

cmake成功后,用vs编译时可能会碰到的问题及解决方案:

VS2015/2017 C++ 报错解决方案 笔记_vs2015 c++17-CSDN博客

VS2015/2017 C++ 报错解决方案 笔记 ===》8、9、11、13。

C/C+±预处理器-预处理下定义-添加:LIBLEPT_EXPORTS

CMake编译报错:  Invalid character escape '\T'. Call Stack (most recent call first)

解决方案:将填入的路径里的“\”全部改成“/”就好。

cmake编译库

编译 libpng

编译 leptonica

cmake配置,勾选Grouped和Advanced,会显示png和tiff等图片库的设置入口,要先将tiff的目录配置进去,使得支持tiff格式

只需添加TIFF_开头的三个就好,“TIFF”无需添加,添加完三个头cmake会自行给你分类。(如下)

CMAKE_INSTALL_PREFIX 表示VS编译生成的库存放目录。

CMAKE_INSTALL_PREFIX 表示VS编译生成的库存放目录。

点击Configure,此时会报错找不到SW,取消勾选SW_BUILD

编译 leptonica的时候:这里添加tiff的构建二进制文件时的路径,即在cmake tiff时的build_x64路径,如“E:\Tesseract-ORC\tiff-4.5.0\build_x64”。若这里无法修改的话,可以另外添加tiff_DIR,然后添加路径。否则后面编译tesseract时会显示leptonica构建时没有tiff的支持。

若添加成功了,则后面在cmake tesseract 时,就会有以下提示:

Found leptonica version: 1.83.1
Leptonica was build with TIFF support.

vs生成dll库文件

默认生成静态模式,还需进行配置生成动态模式

标此项视情况而定,可以不设。

 ​​​​​​

cmake编译tesseract

填入的路径为:包含 Leptonica 的CMake配置文件的目录。

cmake编译过程中一直显示缺少dll,则直接将.dll复制到cmake安装文件夹的bin文件夹里即可

C/C+±预处理器-预处理下定义-添加:TESS_EXPORTS

总结:

前几个基础依赖库都已全部顺利编译,但在用vs编译Tesseract工程代码时,出现142个全是C开头的报错。如下所示:

 网上找寻解决方案无果,故仍未能解决。

语言包下载

语言包下载地址

英文 https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata
简中 https://github.com/tesseract-ocr/tessdata/raw/master/chi_sim.traineddata 
繁中 https://github.com/tesseract-ocr/tessdata/raw/master/chi_tra.traineddata

python版本安装及调用教程

【逐步实操】Tesseract OCR 最新版本安装教程(Windows)+ 图片PDF转WORD实操_tesseract ocr安装教程-CSDN博客

Tesseract OCR V5.0安装教程(Windows) - 简书 (jianshu.com)

使用库

参考链接:

windows编译和使用tesseract(C++ api)

C++ 调用 Tesseract_tesseract-ocr c++-CSDN博客

	if (1) {
		tesseract::TessBaseAPI ocr;
		// Open input image with leptonica library
		Pix* pixImage = pixRead("F:\\cxl_demo\\vsDemo\\img\\字符识别\\1721803339026.png");//read testpic
		//Pix* pixImage = cvtMat2Pix(imgOriginal);
		if (debug) cout << imgOriginal.size() << endl;
		ocr.SetImage(pixImage);


		const char* lang = "eng";//加载 eng.traineddata
		//const char* lang = "chi_sim";
		//cv::waitKey();
		//ocr.Init(NULL, lang, tesseract::OEM_LSTM_ONLY);		// 初始化
		ocr.SetPageSegMode(tesseract::PSM_AUTO);			// 设置识别模式
		//ocr.SetImage(imgOriginal.data, imgOriginal.cols, imgOriginal.rows, 1, imgOriginal.cols);

		// Get OCR result
		char* outText = ocr.GetUTF8Text();
		//std::cout << outText << endl;
		printf("OCR output:\n%s", outText);


		// Destroy used object and release memory
		ocr.End();
		delete[] outText;
		pixDestroy(&pixImage);
	}

cvtMat与Pix互转

参考链接:OpenCV Mat与Leptonica Pix之间的转换-腾讯云开发者社区-腾讯云 (tencent.com)

cvtMat转Pix

Pix* cvtMat2Pix(cv::Mat imgOriginal);
Pix * ImageProcessingTest::cvtMat2Pix(cv::Mat imgOriginal)
{
	cv::Mat imgGray;
	if (imgOriginal.type() != CV_8UC1)
		cv::cvtColor(imgOriginal, imgGray, cv::COLOR_BGR2GRAY);
	else imgOriginal.copyTo(imgGray);

	int cols = imgGray.cols;
	int rows = imgGray.rows;

	PIX *pixS = pixCreate(cols, rows, 8);

	for (int i = 0; i < rows; i++)
		for (int j = 0; j < cols; j++)
			pixSetPixel(pixS, j, i, (l_uint32)imgGray.at<uchar>(i, j));
	return pixS;
}
        Pix* pixImage = cvtMat2Pix(imgOriginal);
		if (debug) cout << imgOriginal.size() << endl;
		ocr.SetImage(pixImage);

Pix转cvtMat

cv::Mat Pix2cvtMat(Pix *pix);
cv::Mat ImageProcessingTest::Pix2cvtMat(Pix * pix)
{
    int width = pixGetWidth(pix);
    int height = pixGetHeight(pix);
    int depth = pixGetDepth(pix);

    cv::Mat mat(cv::Size(width, height), depth == 1 ? CV_8UC1 : CV_8UC3);

    for (uint32_t y = 0; y < height; ++y) {
        for (uint32_t x = 0; x < width; ++x) {
            if (depth == 1) {
                l_uint32 val;
                pixGetPixel(pix, x, y, &val);
                mat.at<uchar>(cv::Point(x, y)) = static_cast<uchar>(255 * val);
            } else {
                l_int32 r, g, b;
                pixGetRGBPixel(pix, x, y, &r, &g, &b);

                cv::Vec3b color(b, g, r);
                mat.at<cv::Vec3b>(cv::Point(x, y)) = color;
            }
        }
    }
    return mat;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值