最新Tesseract(5.4) 的 Windows DLL编译

最近自己的小项目需要识别image中的数字,查阅了很多文章, tesseract 比较合适。 主要原因:1. 全部开源,有什么问题可以看代码解决;2. 很多人在使用,倍受欢迎;3. 跨平台,在Linux和Windows都可以使用。

然而很快发现:

  1. 我的电脑比较老windows10+ VS2015, 升级VS2015电脑空间不够,也没有VS2019或VS2011的安装软件。
  2. github上tesseract的Windows 版本的下载后, 只有tesseract编译后生成的很多可执行exe文件,没有我需要lib、dll和include文件。
  3. github上有一个windows 版源码repo, 但tesseract版本太老(3.5.x),其中包含了我需要的lib、dll和头文件。但很多数字识别成英文字母(如:9识别为g), 也不能设置纯数字。
  4. github 上的源码编译脚本是用cmake写的, 默认生成的是静态库。静态库又不能在vs2015 project 中直接使用,因为lib中找不到调用接口, 研究了半天是gcc生成的lib 不能被VS2015直接引用。  

基于上面种种原因,和多日的琢磨探索。还是决定用最新的Tesseract-5.4.1的缺省编译脚本cmake编译出windows下需要的 lib、dll和include文件。各种失败的探索就不在此阐述, 直接陈述可行方案和具体不走。

  1. 现在GUN Windows 编译环境 MINGW64.  MINGW64的下载安装网上有很多文章在此略过。
  2. 在MINGW64环境下,即home目录下(/home/mark/)下载libleptonica-1.78.0(最新版)。下载后路径 /home/mark/leptonica/
  3. 创建/home/mark/leptonica/vs2015, 并在此目录下运行:
    #cmake .. -G"MinGW Makefiles" -DSW_BUILD=0 -DCMAKE_GNUtoMS=ON -DCMAKE_INSTALL_PREFIX=/usr/local
    #cmake --build . --config Release --target install
  4. 这样生成的头文件在 /usr/local/include/leptonica, lib是 /usr/local/lib/libleptonica-1.78.0.lib, dll是 /usr/local/bin/libleptonica-1.78.0.dll。 这些文件在VS2015中需要用到。

下面是下载并编译tessact. 

  1. 下载最新的tesseract. https://github.com/tesseract-ocr/tesseract, 目前Release的最新版是5.4.1
  2. 下载完路径/home/mark/tesseract
  3. 创建/home/mark/tessract/vs2015 
  4. 在/home/mark/tesseract/CMakeList.txt 头上添加下面的代码(和命令行优点冗余,没有关系,想精简可以逐条删除试试):
    --- a/CMakeLists.txt
    +++ b/CMakeLists.txt
    @@ -22,6 +22,14 @@ if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
           "\n cd build"
           "\n cmake ..")
     endif()
    +set(CMAKE_GNUtoMS ON)
    +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
    +set(CMAKE_BUILD_TYPE "Release")
    +set(BUILD_SHARED_LIBS ON)
    +set(LIBRARY_TYPE SHARED)
    +if (STATIC)
    +    set(LIBRARY_TYPE)
    +endif()
  5. 在vs2015目录下运行下面两条命令:
    #cmake .. -G"MinGW Makefiles" -DSW_BUILD=0 -DCMAKE_GNUtoMS=ON -DCMAKE_INSTALL_PREFIX=/usr/local 
    #cmake --build . --config Release --target install
  6. 编译后生成的lib: /usr/local/lib/libtesseract54.lib, dll: /usr/local/bin/libtesseract54.dll, 头文件在/usr/local/include/tesseract

这样Windows VS2015需要的两个库的头文件、lib、dll就全生成了。把这些copy到vs2015 project 中的相应目录就可以测试了。 注意测试代码用官方给的测试代码不能工作, 官方代码:

    char *outText;
    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
    // Initialize tesseract-ocr with English, without specifying tessdata path
    if (api->Init("./tessdata", "eng")) {
        fprintf(stderr, "Could not initialize tesseract.\n");
        exit(1);
    }
    // Open input image with leptonica library
    Pix *image = pixRead("test.png");
    api->SetImage(image);
    // Get OCR result
    outText = api->GetUTF8Text();
    printf("OCR output:\n%s", outText);

所有的这些API 又封装了一层, 然后通过DLL暴露出来,如下的代码是可以跑通的。
 

  sApi = TessBaseAPICreate();
 
  // Initialize tesseract-ocr with English, without specifying tessdata path
  if (TessBaseAPIInit2(sApi, NULL, "eng", tesseract::OEM_DEFAULT)){
    ::MessageBox(NULL, TEXT("初始化tess失败"), TEXT("data 没找到"), MB_OK);
    return;
  }
  if (!TessBaseAPISetVariable(sApi, "tessedit_char_whitelist", "0123456789")) {
    ::MessageBox(NULL, TEXT("初始化设置识别数字失败"), TEXT("识别数字设置失败"), MB_OK);
    return;
  }

  char *text = NULL;
  TessBaseAPISetImage2(sApi, pixRead("test.png"));
  text = TessBaseAPIGetUTF8Text(sApi);

这样在VS2015的环境下就可以使用最新的tesseract.

最后把编译后的最新的tesseract的头文件、lib和dll 也attach上。 以便直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值