
作为一个优秀的文字识别(OCR)库,Tesseract最早并非开源软件,它是HP实验室在1985-1994年开发的专属软件,直到2005年,HP及内华达大学拉斯维加斯分校以开源的形式发布,然后由Google从2006年开始赞助Tesseract的开发作业。 Tesseract第4版增加了以LTSM为基础的OCR引擎及许多模型,使其支持达116种语言、37种文字(Script)。历经2年多的开发测试后,Tesseract第5版于2021年发布。
Tesseract分为两种发行,一种是已经编译好之后发行的程序,可以通过Tesseract installer for Windows直接下载安装, 下载地址:
 https://github.com/UB-Mannheim/tesseract/wiki
 另一个分支是为开发者准备的开源库,通过它可以将Tesseract嵌入到自己的程序中去,本文讲的主要是后者。
安装过程主要分为4个步骤:
- 安装MSYS2
 - 安装mingw-64工具链以及各种依赖
 - 用cmake编译安装Tesseract
 - 编译测试程序以验证安装
 
一、安装MSYS2
下载地址:
 https://www.msys2.org/
 (下载完毕后无脑下一步即可,注意在安装到50%的时候会卡顿很成一段时间,耐心等待不要中断它)
 安装完毕后,默认在 c:\msys64 里,打开这个目录,会发现很多启动文件,我们选:mingw64.exe 进入环境。
 进入MSYS2之后第一件事情就是更新它的 pacman 包管理器,输入:
 $ pacman -Syu
 (期间可能会要求重启Shell,被中断之后别忘了进来还得输入一次 pacman -Syu )
二、完善工具链
更新完毕后,开始安装编译环境(主要是Mingw C++工具链):
 $ pacman -S base-devel msys2-devel mingw-w64-x86_64-toolchain git
 然后开始安装各种 Tesseract 所需要的依赖:
 $ pacman -S mingw-w64-x86_64-asciidoc mingw-w64-x86_64-cairo mingw-w64-x86_64-curl mingw-w64-x86_64-icu mingw-w64-x86_64-leptonica mingw-w64-x86_64-libarchive mingw-w64-x86_64-pango mingw-w64-x86_64-zlib mingw-w64-x86_64-autotools mingw-w64-x86_64-cmake
三、编译安装Tesseract
$ cd ~ (回到家目录)
 $ git clone https://github.com/tesseract-ocr/tesseract tesseract
 (将源代码从github下克隆到本地)
 $ cd tesseract
 $ mkdir build && cd build
 $ cmake .. -G"MinGW Makefiles" -DSW_BUILD=0 -DCMAKE_INSTALL_PREFIX=/usr/local
 (-DSW_BUILD=0 表示不用sw构建程序,Sw即Software Network也是一个开源安装器,我试了在国内不好使, -DCMAKE_INSTALL_PREFIX=/usr/local 表示将程序安装到/usr/local)
因为提前安装了所需的所有依赖,因此整个编译过程非常平和,不会跳出Error甚至也没有Warning,如果你卡在这一步,请仔细检查上面的依赖安装项是否安装成功?
编译完成后,用以下命令进行安装:
 $ cmake --build . --config Release --target install
 安装好之后,文件保存在:
 头文件:
 /usr/local/include/tesseract
 [物理路径:C:\msys64\usr\local\include\tesseract]
 库文件:
 /usr/local/lib 
 [物理路径:C:\msys64\usr\local\lib]
 另外,Tesseract还用到了另一个开源库叫做Leptonica,这个库是我们之前用 pacman 安装的,默认保存在:
 头:C:\msys64\mingw64\include\leptonica
 库:C:\msys64\mingw64\lib\libleptonica.a
 (因为其他的非C++语言引用 Tesseract 的时候有可能会需要这两个路径,因此我一并告知。)
最后,我们还需要为 Tesseract 准备训练数据,“eng(英文)” 的下载地址是:
https://github.com/tesseract-ocr/tessdata/blob/main/eng.traineddata
文件有22MB大,下载后拷贝到 /usr/local/share/tessdata
 (即 C:\msys64\usr\local\share\tessdata )
完成之后,设置训练数据路径环境变量:
$ export TESSDATA_PREFIX=/usr/local/share/tessdata
(注意这个环境变量重启后会失效,可以把它放进 .bashrc 里以永久生效)
 这些工作都做完了之后,就可以进入下一步“测试”阶段了。
四、测试
$ cd ~ (回到家目录)
 $ mkdir test && cd test
 $ nano test.cpp (创建测试程序,内容如下)
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
int main()
{
    char *outText;
    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
    // Initialize tesseract-ocr with English, without specifying tessdata path
    if (api->Init(NULL, "eng")) {
        fprintf(stderr, "Could not initialize tesseract.\n");
        exit(1);
    }
    // Open input image with leptonica library
    Pix *image = pixRead("test.tif");
    api->SetImage(image);
    // Get OCR result
    outText = api->GetUTF8Text();
    printf("OCR output:\n%s", outText);
    // Destroy used object and release memory
    api->End();
    delete api;
    delete [] outText;
    pixDestroy(&image);
    return 0;
}
 
这是 Tesseract 官方文档的标准测试程序,在编译之前,我们还得准备一张图,
 打开画板,选择文字工具,随便输入点文字(注意得是英文),比如:Hello World! 存盘,注意要保存为 .tif 格式。把这个文件( 以 test.tif 为例 )拷贝到家目录的/test子目录下。
用下面这个命令进行编译:
g++ test.cpp `pkg-config --libs lept tesseract` -o test
 
(这一步最容易显示一堆 undefined reference to XXX,仔细检查前述所有过程,如果严格按照教程一步一步走的话是不应该出现这个提示的)
 如果一切正常,输入:
 $ test.exe 
 程序显示:
OCR output:
Hello World!
恭喜成功!
五、后记
Tesseract项目地址:
 https://github.com/tesseract-ocr/tesseract
参考资料:
 https://tesseract-ocr.github.io/tessdoc/Compiling.html#windows
 https://tesseract-ocr.github.io/tessdoc/Examples_C++.html
 https://medium.com/building-a-simple-text-correction-tool/basic-ocr-with-tesseract-and-opencv-34fae6ab3400
 https://packages.msys2.org
![[SpringBoot 分布式调度elasticjob 整合 ]](https://img-blog.csdnimg.cn/14e427049b574c098b97d878911393d8.png)
















