系列文章目录
1.tesseract ocr5.3.3源码编译方法一(基于cmake)
2.tesseract ocr5.3.3源码编译方法二(基于cmake+sw)
3.tesseract ocr5.3.3自定义训练
文章目录
前言
用过halcon ocr和深度学习图像分类之后,其实我是不太想用tesseract ocr的,可能是以前用过的老版本效果不好,但是没办法,有些设备用不了深度学习、halcon,只能结合opencv和tesseract来使用了。
在GitHub上tessdoc文档中https://tesseractocr.github.io/tessdoc/Compiling.html,里面介绍了windows下编译tesseract的方法,最简单的方法是用CMAKE+SW来快速安装使用
由于公司网络问题,下载不了SW,又加上之前使用的梯子用不了了,所以没用该方法。(后续能下载在用这方法)
备注SW下载网址:https://software-network.org/client/
另外关于使用CMAKE+SW安装方法可以参考https://blog.youkuaiyun.com/zhangcao132/article/details/139524508
本文使用的是用CMAKE编译,CMake build with VS2019 without using Software Network client
https://github.com/DanBloomberg/leptonica/wiki,从leptonica/wiki上可以看到,这种方法需要先编译leptonica,在此基础上进行编译tesseract,而编译leptonica读取图片又依赖tiff、jpeg-turbo、png(可选)等,当然wiki上可以看到Without other external libraries Leptonica only supports the following image formats: bmp, pnm, spix,不安装tiff、jpeg也行,只支持bmp, pnm, spix格式
本文方法在公司的两台机台上都安装成功了
一台是笔记本:win7 x64 ,先用Cmake编译,用vs2019生成dll和lib
一台是台式机:win10 x64,先用Cmake编译,用vs2022生成dll和lib
一、准备工作
1.安装CMake工具并添加到环境变量
cmake下载地址:https://cmake.org/download/
2.安装VS2019社区版
https://tesseract-ocr.github.io/tessdoc/Compiling.html
从tesseract网站给的建议使用vs2019或者vs2022
3.下载tesseract5.3.3
地址:https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.3.zip
4.leptonica1.83.1
地址:https://github.com/DanBloomberg/leptonica/archive/refs/tags/1.83.1.zip
5libjpeg-turbo-2.1.5.1
地址:https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.5.1.zip
6.nasm-2.16.01
地址:https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-2.16.01-win64.zip
7.libtiff-4.5.0
地址:http://download.osgeo.org/libtiff/tiff-4.5.0.zip
在安装目录下,新建tesseract533SourceBuild(版本源码编译,名字可按自己习惯来),将下载好的文件解压到该目录下,如下图所示:
二、编译步骤
因tesseract依赖leptonica,而leptonica读取图片又依赖libtiff、libjpeg-turbo等库文件, 安装libjpeg-turbo需要用到nasm,所以编译步骤为:libtiff-4.5.0->设置nasm环境变量->libjpeg-turbo-2.1.5.1->leptonica1.83.1->tesseract5.3.3
1.编译libtiff
1.1 cmake编译tiff
在D:\Program Files\tesseract533SourceBuild\tiff-4.5.0,文件夹下新建“build” “buildRes”文件夹,打开cmake.gui,选择tiff-4.5.0和build路径,如下图所示:勾选Grouped和Advanceed
点击配置Configure,选择Visual studio 16 2019,X64
报错,提示No CMAKE_C_COMPILER could be found.,Selecting Windows SDK version 8.1 to target Windows 6.1.7601.
在build路径下CMakeFiles文件夹里面打开cmakeerror.log,里面有这样的错误提示:
LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”,出现这个错误的原因是我的电脑是win7系统,(我另一台win10是正常的)版本是Windows6.1.7601.,cmake-gui默认按照开发机器的版本去找对应的window kit sdk。
所以在后续编译过程中,都需要设置系统版本在进行编译
在tiff-4.5.0文件中,找到并打开CMakeLists.txt,添加版本
set(CMAKE_SYSTEM_VERSION 10.0.19041.0)
备注:
版本号查看方法:在所有程序中找到visual studio installer打开,点击修改,可以看到安装vs2019安装的sdk,可以看到为Windows 10 SDK(10.0.19041.0)
添加好CMakeLists.txt后,在CMake-gui操作界面File下点击Delete Cache之后在此点击Configure,可以看到已经链接到对应编译器了The C compiler identification is MSVC 19.29.30038.1
The CXX compiler identification is MSVC 19.29.30038.1
点击Configure,等Configuring done完之后,点开cmake,找到CMAKE_INSTALL_PREFIX, CMAKE_INSTALL_PREFIX 表示待会使用VS编译生成的库存放目录,这边在tiff-4.5.0下新建buildRes用于存放
再次点击Configure,Configuring done之后点击Generate生成。
备注:
如果报错了,提示找不到openGL等,如
fatal error C1083: 无法打开包括文件: “GL/glut.h”
fatal error C1083: 无法打开包括文件: “GLUT/glut.h”
取消jpeg的勾选
如果提示报错找不到CMakeLists.txt
D:/Program Files/tesseract533SourceBuild/tiff-4.5.0/build
does not contain a CMakeLists.txt file.
在build文件夹下新建一个CMakeLists.txt即可。
1.2 vs生成tiff库文件
在build文件夹中,用vs2019打开tiff.sln
右键INSTALL,点击生成,会在刚才设置好的CMAKE_INSTALL_PREFIX目录下生成bin、include、lib、share文件夹
在build下分别新建Debug和Release文件,在vs中选择Debug和Release分别生成,生成的四个文件夹拷贝至对应Debug和Release文件夹中
2.解压nasm并添加至系统环境中
在编译libjpeg-turbo之前,先将nasm添加上到系统环境中,然后重启电脑,如果暂时不想重启,或者不想添加到系统环境中,可以在第三步编译libjpeg-turbo 时Configure报错找不到nasm时,在Cmake-gui中找到CMAKE_ASM_NASM_COMPLER将nasm.exe添加进去详见3
3.编译libjpeg-turbo
3.1 cmake编译libjpeg
打开libjpeg-turbo-2.1.5.1下的CMakeLists.txt设置系统版本
set(CMAKE_SYSTEM_VERSION 10.0.19041.0)
在D:\Program Files\tesseract533SourceBuild\libjpeg-turbo-2.1.5.1文件夹下,新建“build” “buildRes”文件夹,打开cmake.gui,选择libjpeg-turbo-2.1.5.1和build路径。
点击Configure,如果没有将nasm添加到系统环境中,此时会报错找不到nasm,点击CMAKE,找到CMAKE_ASM_NASM_COMPLER将nasm.exe添加进去,顺便添加CMAKE_INSTALL_PREFIX。
再次点击Configure,Configuring done之后,点击Generate生成。
3.2 vs生成libjpeg库文件
在build文件夹中,用vs2019打开libjpeg-turbo.sln,右键INSTALL,点击生成,会在刚才在CMake中CMAKE_INSTALL_PREFIX设置好的目录下buildRes下生成bin、include、lib、share文件夹,分别新建Debug和Release文件,在vs中选择Debug和Release分别生成,将生成的四个文件夹拷贝至对应Debug和Release文件夹中,其中lib、include文件夹内文件后续编译leptonica用到
4.编译leptonica
4.1 cmake编译leptonica
在D:\Program Files\tesseract533SourceBuild\ leptonica-1.83.1,文件夹下新建“build” “buildRes”文件夹,打开cmake.gui,选择leptonica-1.83.1和build路径
打开leptonica-1.83.1下的CMakeLists.txt设置系统版本
set(CMAKE_SYSTEM_VERSION 10.0.19041.0)
打开cmake.gui,选择leptonica-1.83.1和build路径
点击Configure,此时会报错找不到SW,取消勾选SW_BUILD
LIBWEBP_SUPPORT、OPENJPEG_SUPPORT勾选也取消掉
顺便添加CMAKE_INSTALL_PREFIX,用于存放VS编译之后生成的库
顺便添加之前编译的libjpeg和libtiff
再次点击Configure,Configuring done之后,点击Generate生成。
4.2 vs生成leptonica库文件
在build文件夹中,用vs2019打开leptonica.sln,默认生成静态模式,还需进行配置生成动态模式,即dll和lib,右击leptonica项目点击“属性”,操作如下图
配置类型改为:动态库(.dll)
另外这里默认的是dll及lib输出目录是build下面的src,
例如Debug:D:\Program Files\tesseract533SourceBuild\leptonica-1.83.1\build\src\Debug
Release:D:\Program Files\tesseract533SourceBuild\leptonica-1.83.1\build\src\Release
高级属性-目标文件扩展名改为:.dll
点击应用,然后在
C/C+±预处理器-预处理下定义-添加:LIBLEPT_EXPORTS
链接器-输入-附加依赖项-分别添加:tiffd.lib和jpeg.lib文件路径
右击"解决方案"点击“属性”,选择Debug,配置勾选INSTALL,点击确认
再右击“解决方案”选择"重新生成解决方案",Debug和Release分别运行,其中lib、include文件夹内文件后续编译tesseract用到,生成如下图所示
5.编译编译tesseract
5.1 cmake编译tesseract
在D:\Program Files\tesseract533SourceBuild\tesseract-5.3.3,文件夹下新建“build” “buildRes”文件夹,打开cmake.gui,选择tesseract-5.3.3和build路径。
打开tesseract-5.3.3下的CMakeLists.txt设置系统版本
set(CMAKE_SYSTEM_VERSION 10.0.19041.0)
点击Configure,此时会报错找不到SW,取消勾选SW_BUILD
再次点击Configre,此时会出现找不到依赖项leptonica,在Leptonica_DIR对应路径下添加之前编译leptonica-1.83.1的路径,我这里是D:\Program Files\tesseract533SourceBuild\leptonica-1.83.1\buildRes\lib\cmake\leptonica
顺便配置CMAKE_INSTALL_PREFIX路径,用于存放VS编译之后生成的库
再次点击Configure,Configuring done之后,点击Generate生成。
5.2 vs生成tesseract库文件
用vs2019打开build生成目录下的tesseract.sln,
由于项目调用Tesseract接口需要引入.h头文件,首先右击“INSTALL”选择“生成”,
会在D:\Program Files\tesseract533SourceBuild\tesseract-5.3.3\buildRes路径下生成include文件夹,如下图
备注:其实不生成也行,这些文档在D:\Program Files\tesseract533SourceBuild\tesseract-5.3.3\include下也有
Debug默认只生成静态模式,即只生成lib,还需进行配置生成动态模式,即dll和lib,右击leptonica项目点击“属性”,操作如下图,配置类型改为:动态库(.dll),
另外这里默认dll及lib输出目录是build下面的Debug,
例如Debug:D:\Program Files\tesseract533SourceBuild\ tesseract-5.3.3\build\Debug
Release:D:\Program Files\tesseract533SourceBuild\ tesseract-5.3.3\build\Release
配置属性-高级-目标文件扩展名改为:.dll
C/C+±预处理器-预处理下定义-添加:TESS_EXPORTS
链接器-输入-附加依赖项-添加:leptonica-1.83.1d.lib文件路径
D:\Program Files\tesseract533SourceBuild\leptonica-1.83.1\buildRes\lib\leptonica-1.83.1d.lib
右击libtesseract项目点击“生成”,生成tesseract53d.lib和tesseract53d.dll,如下图生成结果,Release同上操作
在这里插入图片描述
备注:如果选择INSTALL在生成时出现很多关于training的错误,可以返回到CMAKE中,把BUILD_TRAINING_TOOLS这个勾选取消掉VS2022+Win10X64正常但我在VS2019+win7 X64上碰到了
三、测试tesseractOCR
打开vs2019,创建一个控制台程序,命名为tesseractOCRTest
创建好后,编译器选择Debug X64点击生成,然后在项目位置F:\A.H_OCR\TesseractOCRTest新建include文件、lib文件夹、tessdata文件夹、testpic文件夹
在新建的include文件下,将之前编译leptonica-1.83.1生成的include文件夹拷贝至此,将之间编译tesseract5.3.3生成的include文件拷贝至此,如下图所示
在新建的lib文件下,分别将leptonica-1.83.1、tesseract5.3.3编译生成的lib文件拷贝至此
在新建的tessdata文件下,将训练好的tessdata文件拷贝至此
在生成的Debug文件下,将jpeg62.dll、tiffd.dll、leptonica-1.83.1d.dll以及tesseract53d.dll拷贝至此
点击工程tesseractOCRTest属性,添加外部包含目录,将include目录添加进去
添加库目录,将lib目录添加进去
在链接器-输入-附加依赖项中加入tesseract53d.lib、leptonica-1.83.1d.lib
在TesseractOCRTest.cpp中,添加如下代码
#include "tesseract\baseapi.h"
//pix read
#include "leptonica\allheaders.h"
//可用opencv读取图像
//#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
tesseract::TessBaseAPI ocr;
int ret = ocr.Init("tessdata", "ahTest");//add tessdata
ocr.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);//set psm
Pix* image = pixRead("testPic\\3.bmp");//read testpic
ocr.SetImage(image);
//or
//cv::Mat imgT = cv::imread("testPic\\3.bmp", IMREAD_GRAYSCALE);
//ocr.SetImage(imgT.data, imgT.cols, imgT.rows, 1, imgT.cols);
char* outText = ocr.GetUTF8Text();
std::cout << outText;
pixDestroy(&image);
delete[] outText;
ocr.End();
}
参考网址
vs2019+tesseract5.3.2+leptonica1.83.1基于CMake源码编译攻略
https://blog.youkuaiyun.com/kangjiabei/article/details/132292145
tesseract在win10下的源码编译攻略(不需要sw以及cppn版)
https://blog.youkuaiyun.com/m0_37591278/article/details/139323114