在这里插入图片描述

作为一个优秀的文字识别(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个步骤:

  1. 安装MSYS2
  2. 安装mingw-64工具链以及各种依赖
  3. 用cmake编译安装Tesseract
  4. 编译测试程序以验证安装

一、安装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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐