由于网上Tesseract编译教程要么基于CPP(Tesseract5.0不再使用cppan作为包依赖管理器)或VCPKG、SW,比如使用VCPKG进行编译生成dll,不方便项目管理,因为生成的dll命名无法控制,可能和原项目内的dll有冲突等问题,所以这里讲的是基于CMake方式进行编译生成相关dll,虽然此方法编译dll繁琐点,但生成的dll命名可控,方便和项目中以有的进行集成开发
前提条件
- 安装CMake工具并添加到环境变量。
- 安装VS2019开发环境
- 下载tesseract5.3.2,地址:https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.2.zip
- leptonica1.83.1,地址:https://github.com/DanBloomberg/leptonica/archive/refs/tags/1.83.1.zip
- libjpeg-turbo-2.1.5.1,地址:https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.5.1.zip
- nasm-2.16.01,地址:https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-2.16.01-win64.zip
- libtiff-4.5.0,地址:http://download.osgeo.org/libtiff/tiff-4.5.0.zip
编译步骤
因tesseract依赖leptonica,而leptonica读取图片又依赖libtiff、libjpeg-turbo,所以编译步骤为:libtiff-4.5.0->libjpeg-turbo-2.1.5.1->leptonica1.83.1->tesseract5.3.2,补充:libjpeg-turbo还依赖nasm,如vs编译期间提示CMake Permission denied错误提示,请关闭杀毒软件再试
编译LibTIFF
解压下载的tiff-4.5.0.zip到路径D:/tiff/tiff-4.5.0,在tiff-4.5.0文件夹新建“build”文件夹,使用CMake建构libtiff,如下图
这里不做libtiff详细编译过程,但有点注意如需要支持jpeg压缩读取,需配置如图红框所示,当前 版本libjpeg9e,libjpeg编译debug版本请看我另外文章:libjpeg不能在vs-debug模式下运行处理办法_iandjavax的博客-CSDN博客
配置nasm到系统环境中
解压下载的nasm-2.16.01-win64.zip到路径D:\software\nasm-2.16.01,将环境配置到系统环境中,如下图
编译libjpeg-turbo
解压下载的libjpeg-turbo-2.1.5.1.zip到路径D:/libjpeg-turbo-2.1.5.1,在libjpeg-turbo-2.1.5.1文件夹新建“build”文件夹,使用CMake建构libjpeg-turbo,如下图
上面目录配置完成后,点击Configre,此时跳出编译环境选择对话框,这里选择的是VS2019(x64),点击Finish
选择完毕编译工具之后,自动加载libjpeg-turbo
CMAKE_INSTALL_PREFIX 表示VS编译生成的库存放目录。其它项根据需求勾选。此时背景是红色,再次点击Configure背景变成白色,接着点击Generate,生成完后找到build生成目录下的libjpeg-turbo.sln,双击打开即可
首先右击选中INSTALL选择“生成”,运行完之后会在libjpeg-turbo-2.1.5.1-res文件夹生成bin、include、lib、share文件夹(Debug和Release分别运行,不同模式下生成的四个文件夹拷贝其它地方,用于区分Debug和Release,如libjpeg-turbo-2.1.5.1-debug、libjpeg-turbo-2.1.5.1-release),其中lib、include文件夹内文件后续编译leptonica用到
如要对生成的jpeg62.lib和jpeg62.dll自定义名称,右击jpeg项目选择属性,分别对debug、release目标文件名进行命名,这里命名为libjpeg62和libjpeg62d,后续编译leptonica用到,如下图
lib文件名还需在链接器-高级-导入库进行更改
编译leptonica
解压下载的leptonica-1.83.1.zip到路径D:\leptonica-1.83.1,在leptonica-1.83.1文件夹新建“build”文件夹,使用CMake建构leptonica,如下图
上面目录配置完成后,点击Configre,此时跳出编译环境选择对话框,这里选择的是VS2019(x64),点击Finish之后提示:Could NOT find SW (missing: SW_EXECUTABLE),这个不用管,因为这里不用SW方式
选择完毕编译工具之后,自动加载leptonica
CMAKE_INSTALL_PREFIX 表示VS编译生成的库存放目录。这里针对JPEG和TIFF格式支持配置以及SW_BUILD、LIBWEBP_SUPPORT、OPENJPEG_SUPPORT勾选取掉,其它项根据需求勾选。此时背景是红色,再次点击Configure背景变成白色,接着点击Generate,生成完后找到build生成目录下的leptonica.sln,双击打开即可
JPEG和TIFF项分别填好include、debug、release路径
SW_BUILD勾选取掉
LIBWEBP_SUPPORT、OPENJPEG_SUPPORT勾选取掉
默认生成静态模式,还需进行配置生成动态模式,即dll和lib,右击leptonica项目点击“属性”,操作如下图
配置类型改为:动态库(.dll)
高级属性-目标文件扩展名改为:.dll
C/C++-预处理器-预处理下定义-添加:LIBLEPT_EXPORTS
由于CMake并没有带入libtiff450d.lib和libjpeg62d.lib文件路径,还需手动配置,如下图
链接器-输入-附加依赖项-分别添加:libtiff450d.lib和libjpeg62d.lib文件路径
右击"解决方案"点击“属性”,选择release,配置勾选INSTALL,点击确认,再右击“解决方案”选择"重新生成解决方案",运行完之后会在leptonica-res文件夹生成include、lib文件夹(Debug和Release分别运行,不同模式下生成的二个文件夹拷贝其它地方,用于区分Debug和Release,如leptonica-res-debug、leptonica-res-release),其中lib、include文件夹内文件后续编译tesseract用到,生成如下图所示
编译tesseract
解压下载的tesseract-5.3.2.zip到路径D:\tesseract5.3.2,在tesseract5.3.2文件夹新建“build”文件夹,使用CMake建构leptonica,如下图
上面目录配置完成后,点击Configre,此时跳出编译环境选择对话框,这里选择的是VS2019(x64),点击Finish之后提示:Could NOT find SW (missing: SW_EXECUTABLE),这个不用管,因为这里不用SW方式,将SW项SW_BUILD勾选取掉以及BUILD项BUILD_TRAINING_TOOLS勾选取掉,再次点击Configre
配置Leptonica_DIR路径
此路径为上面编译leptonica生成
配置CMAKE_INSTALL_PREFIX路径,表示VS编译生成的库存放目录
路径可自定义其它路径
再次点击Configre,会提示leptonica*.dll未找到可忽略。点击Generate,生成完后找到build生成目录下的tesseract.sln,双击打开即可
由于项目调用Tesseract接口需要引入.h头文件,首先右击“INSTALL”选择“生成”,会在D:/tesseract5.3.2/tesseract5.3.2-res路径下生成include文件夹,如下图
默认生成静态模式,还需进行配置生成动态模式,即dll和lib,右击libtesseract项目点击“属性”,操作如下图
配置类型改为:动态库(.dll)
高级属性-目标文件扩展名改为:.dll
C/C++-预处理器-预处理下定义-添加:TESS_EXPORTS
由于CMake并没有带入leptonica-1.83.1d.lib文件路径,还需手动配置,如下图
链接器-输入-附加依赖项-添加:leptonica-1.83.1d.lib文件路径
右击libtesseract项目点击“生成”,生成tesseract53d.lib和tesseract53d.dll,如下图生成结果,Release同上操作
调用tesseract
使用VS2019新建"空项目",项目名可随意填,这里填:Test,在项目路径下创建:lib、include、dll文件夹并将h文件以及dll、lib文件夹复制相应位置,如下图
debug和release模式dll复制到此文件夹内
leptonica和tesseract头文件复制到此文件内
debug和release模式lib复制到此文件夹内
为了使项目能够引用到头文件、dll、lib还需相关配置,右击项目选择“属性”,配置如下图
VC++目录-外部包含目录,填写include路径
VC++目录-库目录,填写lib路径
链接器-输入-附加依赖项,填写: tesseract53d.lib、leptonica-1.83.1d.lib
调用示例
#include "tesseract\baseapi.h"
#include "leptonica\allheaders.h"
#include <iostream>
int main(int argc, char* argv[])
{
tesseract::TessBaseAPI ocr;
int ret = ocr.Init("D:\\traineddata", "chi_sim");
Pix* image = pixRead("D:\\W020160119379681444676-sub.jpg");
ocr.SetImage(image);
char* outText = ocr.GetUTF8Text();
std::cout << outText;
pixDestroy(&image);
delete[] outText;
ocr.End();
}