当前位置: 首页 > news >正文

Tesseract-OCR在Windows10(VS2019+vcpkg)平台上的编译与使用

官方介绍文档,

Compilation guide for various platforms | tessdoc

因为是windows平台,因此可以通过vcpkg管理你的开发包,也可以通过sw来管理。如何使用vcpkg请参考这里。

我这里使用vcpkg来管理我的开发包。

vcpkg install tesseract:x64-windows

或者,

vcpkg install tesseract:x64-windows-static

该指令会直接编译生成你所需要的文件。我这里一气呵成,没有报任何错误。

程序过程

接下来我们测试一下如何使用tesseract开发一个文字识别程序,

(1)首先,创建一个空的项目,名称为tesseract-test;

 (2)添加OpenCV依赖项

属性--配置--C/C++--添加附加包含目录,输入下面的目录,

D:\OpenCV455\dev;D:\OpenCV455\opencv-4.5.5\include;D:\OpenCV455\opencv-4.5.5\modules\features2d\include;D:\OpenCV455\opencv-4.5.5\modules\core\include;D:\OpenCV455\opencv-4.5.5\modules\flann\include;D:\OpenCV455\opencv-4.5.5\modules\imgproc\include;D:\OpenCV455\opencv-4.5.5\modules\highgui\include;D:\OpenCV455\opencv-4.5.5\modules\photo\include;D:\OpenCV455\opencv-4.5.5\modules\video\include;D:\OpenCV455\opencv-4.5.5\modules\videoio\include;D:\OpenCV455\opencv-4.5.5\modules\objdetect\include;D:\OpenCV455\opencv-4.5.5\modules\python\include;D:\OpenCV455\opencv-4.5.5\modules\shape\include;D:\OpenCV455\opencv-4.5.5\modules\calib3d\include;D:\OpenCV455\opencv-4.5.5\modules\imgcodecs\include;D:\OpenCV455\opencv-4.5.5\modules\ml\include;D:\OpenCV455\opencv-4.5.5\modules\dnn\include;D:\OpenCV455\opencv-4.5.5\modules\stitching\include;D:\OpenCV455\opencv-4.5.5\modules\superres\include;D:\OpenCV455\opencv-4.5.5\modules\videostab\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\xfeatures2d\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\ximgproc\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\videostab\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\superres\include;D:\OpenCV455\opencv_contrib-4.5.5\modules\shape\include

当然,取决于你的系统,如果你下载的是OpenCV的VS2019二进制包,路径会有所不同。填写上自己实际可能用到的地址就好,如图,

(3)添加tesseract依赖

前面我们已经安装好了tesseract,这里我们把他整合到项目中来。

通过菜单:工具-->Nuget包管理器-->程序包管理器控制台,

 输入指令:vcpkg integrate project, 我们发现他弹出了一行字,

Install-Package vcpkg.D.vs3D.vcpkg -Source "D:\vs3D\vcpkg\scripts\buildsystems"

我们只要拷贝这行字到同一个控制台窗口,回车后, vcpkg管理的项目就添加到程序中去了,整个过程如下图所示,

当然你也可以通过项目属性--管理nuget程序包的方式来添加,原理都一样,更具体的可以参考这里,

Tools_vcpkg包管理工具在VS2019项目开发中的使用_高精度计算机视觉的博客-CSDN博客

同样这里要特别提醒,需要注意且容易忽视的一点是,如果你的vcpkg安装的是x64-windows,项目一定要选x64。因为很多项目创建时默认是x86的,所以你总是发现那些已经安装的头文件总是提示找不到路径。 

注意(3a):打开powershell时,如果弹出下面的错误,

无法加载文件 C:\Users\Administrator\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本

就可以选通过下面的办解决,

win10找到VS2017下面的Developer Powershell后以管理员身份打开,输入:

get-ExecutionPolicy   # 查看系统执行策略状态 
set-ExecutionPolicy remotesigned # 修改执行策略状态

然后直接选“A"(代表All)如果下面红红的一片,说明有可能没成功。那就再输入

Set-ExecutionPolicy unrestricted

通常能设置成功的话,下面不会有任何输出。直接关闭Windows Powershell,再重启VS2019,然后再通过工具栏打开powershell,此时一切应该恢复正常。

注意(3b):通过Ctrl+Alt+A打开一个的是普通终端命令窗口(或通过菜单:视图--其他窗口--命令窗口打开),这个不是我们所需要的powershell命令窗口。

注意(3c):通过工具--命令行--开发者Power Shell打开的命令窗口是普通的powershell窗口。

 (4)报错

随便找了一个eng.traindata试了一下,报错,

Error: Tesseract (legacy) engine requested, but components are not present in D:/open/tesseract510/test/testdata/eng/eng.traineddata!!
Failed loading language 'eng'
Tesseract couldn't load any languages!

用git-bash看了一下,

$ ./tesseract -v
tesseract 4.1.1
 leptonica-1.81.1 (Mar 19 2022, 17:41:20) [MSC v.1929 LIB Release x64]
  libgif 5.2.1 : libjpeg 6b (libjpeg-turbo 2.1.2) : libpng 1.6.37 : libtiff 4.3.0 : zlib 1.2.11 : libwebp 1.2.1

原因,tesseract版本是4.1.1,配套的traineddata文件某些语言版本不支持老版本的引擎,

于是下载这个版本的eng.traindata,

https://github.com/tesseract-ocr/tessdata

tessdata/eng.traineddata at main · tesseract-ocr/tessdata · GitHub

然后再试,问题解决。

程序源码

测试用的程序源码如下,很简单,

#include "tesseract-test.h"
#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <leptonica/allheaders.h>
#include <tesseract/baseapi.h>
#include <tesseract/publictypes.h>
#include <opencv2/imgproc.hpp>

int main()
{
    std::string image_name = "D:/open/testimg/eurotext.png";
    cv::Mat imageMat;
    imageMat = cv::imread(image_name);
    if (imageMat.data == nullptr)
    {
        printf("No image data \n");
        return -1;
    }
    //cv::Mat blurMat;    
    //cv::medianBlur(imageMat, blurMat, 5); // 图像模糊
    cv::Mat z1, g_grayImage;
    cv::cvtColor(imageMat, z1, cv::COLOR_BGR2GRAY);            // 灰度图
    // cv::threshold(z1, z2, 214, 255, cv::THRESH_BINARY);     // 阈值    
    cv::adaptiveThreshold(z1, g_grayImage, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 7, 25);  // 自动降噪
    

    namedWindow("Image1", cv::WINDOW_AUTOSIZE);
    cv::imshow("Image1", g_grayImage);

    cv::waitKey(0);

    std::system("chcp 65001");
    char* outText;
    tesseract::TessBaseAPI api;
    //if (api.Init(NULL, "chi_sim"))  // for chinese
    if(api.Init("D:/open/tessdata", "eng", tesseract::OEM_DEFAULT))
    {
        std::cout << stderr << std::endl;
        exit(1);
    }
    // Pix *image = pixRead("3.jpg");
    api.SetImage((uchar*)g_grayImage.data, g_grayImage.cols, g_grayImage.rows, 1, g_grayImage.cols);

    outText = api.GetUTF8Text();
    if (outText == nullptr)
    {
        std::cout << "No Data" << std::endl;
    }
    std::cout << outText << std::endl;
    // Destroy used object and release memory
    api.End();           // delete api;
    delete[] outText;    // pixDestroy(&image);

    return 0;
}

也有用leptonica的PIX方法,可以自己去试试,

    tesseract::TessBaseAPI api;
	api.Init("", "eng", tesseract::OEM_DEFAULT);
	api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
	api.SetOutputName("out"); 
 
	char image[256] = "myimage.png";
	PIX   *pixs = pixRead(image);
	STRING text_out;
	api.ProcessPages(image, NULL, 0, &text_out);
	cout << text_out.string();

如果要用cmake的话,CMakeLists.txt大致这个样子的,

# 设置cmake版本
cmake_minimum_required (VERSION 3.8)
set(CMAKE_TOOLCHAIN_FILE "D:/cpp/vcpkg/scripts/buildsystems/vcpkg.cmake")

message(STATUS "cmake root:${CMAKE_CURRENT_SOURCE_DIR}")


#设置编译器版本
set(CMAKE_CXX_STANDARD 17)
# 设置项目名称  cpptest 
# project(cpptest)
# 项目类型cxx c++
project(cpptest CXX)
# 打印当前编译器标志
message("C++ compiler flags: ${CMAKE_CXX_FLAGS}")
# 输出一些信息,调试
message(STATUS "name:${PROJECT_NAME}")

#查找当前目录下的所有源文件,然后将源文件名保存到变量DIR_SRCS里面
aux_source_directory(. DIR_SRCS)

# 设置cmake项目之后的输出路径
# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${opencv_test_SOURCE_DIR}/bin)
# 内存泄露检查
# SET(CMAKE_CXX_FLAGS "-fsanitize=address")

# 引入opencv
find_package(OpenCV CONFIG REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
# 引入Tesseract
find_package(Tesseract CONFIG REQUIRED)
INCLUDE_DIRECTORIES(${Tesseract_INCLUDE_DIRS})
# 引入Leptonica
find_package(Leptonica CONFIG REQUIRED)
INCLUDE_DIRECTORIES(${Leptonica_INCLUDE_DIRS})

# 指定生成目标
# add_executable (${PROJECT_NAME} "main.cpp")
# 将源代码添加到此项目的可执行文件
add_executable(${PROJECT_NAME} ${DIR_SRCS})

# 连接到项目
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(${PROJECT_NAME} libtesseract)
target_link_libraries(${PROJECT_NAME} leptonica)

# target_link_libraries(${PROJECT_NAME} ${Tesseract_LIBS})
# target_link_libraries(${PROJECT_NAME} ${leptonica_LIBS})

#引入第三方文件,可以引入非cmake项目
# message(STATUS ${Tesseract_INCLUDE_DIRS})
# message(STATUS ${Tesseract_LIBS})

程序参考地址,

c++ 调用opencv+tesseract做图片文字识别 - zh7314 - 博客园

附录:官网的介绍说明(windows + visual studio)

Windows

main branch, 3.05 and later

Using Tesseract

!!! IMPORTANT !!! To use Tesseract in your application (to include tess or to link it into your app) see this very simple example.

Build the latest library (using Software Network client)

  1. Download the latest SW (Software Network https://software-network.org/) client from https://software-network.org/client/.
  2. Run sw setup (may require administrator access)
  3. Run sw build org.sw.demo.google.tesseract.tesseract-master.

For visual studio project using tesseract

  1. Setup Vcpkg the Visual C++ Package Manager.
  2. Run vcpkg install tesseract:x64-windows for 64-bit. Use –head for the master branch.

Static linking

To build a self-contained tesseract.exe executable (without any DLLs or runtime dependencies), use Vcpkg as above with the following command:

  • vcpkg install tesseract:x64-windows-static for 64-bit
  • vcpkg install tesseract:x86-windows-static for 32-bit

Use –head for the main branch. It may still require one DLL for the OpenMP runtime, vcomp140.dll (which you can find in the Visual C++ Redistributable 2015).

Build training tools

Today it is possible to build a full set of tess training tools on Windows with Visual Studio. The latest versions (Win10, 2019) are preferable.

To do this:

  1. Download the latest SW (Software Network https://software-network.org/client/) client from https://software-network.org/client/.
  2. Checkout tesseract sources git clone https://github.com/tesseract-ocr/tesseract tesseract && cd tesseract.
  3. Run sw build.
  4. Binaries will be available under .sw\out\some hash dir...

Develop Tesseract

For development purposes of Tesseract itself do the next steps:

  1. Download and install Git, CMake and put them in PATH.
  2. Download the latest SW (Software Network https://software-network.org/) client from https://software-network.org/client/. SW is a source package distribution system.
  3. Add SW client to PATH.
  4. Run sw setup (may require administrator access)
  5. If you have a release archive, unpack it to tesseract dir.

If you’re using main branch run

   git clone https://github.com/tesseract-ocr/tesseract tesseract
  1. Run

     cd tesseract
     mkdir build && cd build
     cmake ..
    
  2. Build a solution (tesseract.sln) in your Visual Studio version. If you want to build and install from command line (e.g. Release build) you can use this command:

    cmake --build . --config Release --target install
    

    If you want to install to other directory that C:\Program Files (you will need admin right for this), you need to specify install path during configuration:

    cmake .. -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX=inst
    

For development purposes of training tools after cloning a repo from previous paragraph, run

sw build

You’ll see a solution link appeared in the root directory of Tesseract.

Building for x64 platform

sw

If you’re building with sw+cmake, run cmake as follows:

mkdir win64 && cd win64
cmake .. -G "Visual Studio 14 2015 Win64"

If you’re building with sw run sw generate, it will create a solution link for you (not yet implemented!).

3.05

If you have Visual Studio 2015, checkout the https://github.com/peirick/VS2015_Tesseract repository for Visual Studio 2015 Projects for Tessearct and dependencies. and click on build_tesseract.bat. After that you still need to download the language packs.

3.03rc-1

Have a look at blog How to build Tesseract 3.03 with Visual Studio 2013.

3.02

For tesseract-ocr 3.02 please follow instruction in Visual Studio 2008 Developer Notes for Tesseract-OCR.

3.01

Download these packages from the Downloads Archive on SourceForge page:

  • tesseract-3.01.tar.gz - Tesseract source
  • tesseract-3.01-win_vs.zip - Visual studio (2008 & 2010) solution with necessary libraries
  • tesseract-ocr-3.01.eng.tar.gz - English language file for Tesseract (or download other language training file)

Unpack them to one directory (e.g. tesseract-3.01). Note that tesseract-ocr-3.01.eng.tar.gz names the root directory 'tesseract-ocr' instead of 'tesseract-3.01'.

Windows relevant files are located in vs2008 directory (e.g. ‘tesseract-3.01\vs2008’). The same build process as usual applies: Open tesseract.sln with VC++Express 2008 and build all (or just Tesseract.) It should compile (in at least release mode) without having to install anything further. The dll dependencies and Leptonica are included. Output will be in tesseract-3.01\vs2008\bin (or tesseract-3.01\vs2008\bin.rd or tesseract-3.01\vs2008\bin.dbg based on configuration build).

相关文章:

  • Tesseract-OCR:在Windows10(VS2019+SW)平台上的编译与使用
  • Tesseract-OCR在Ubuntu20.04平台上使用
  • ROS2 Error: Could not find a package configuration file provided by “turtlebot3_msgs“
  • ROS2 + colcon build 常见的一些报错
  • ROS2进阶:安装与初体验(附choco介绍)
  • ROS2进阶:colcon的初步使用--‘colcon‘ is not recognized
  • ROS2进阶:基本指令与RVIZ2介绍
  • Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
  • ROS2 ERROR: qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in
  • ROS2 Warning: RosPluginProvider._parse_plugin_xml() plugin file rqt_gui_cpp/plugin.xml not found
  • ROS2进阶:turtlesim与rqt
  • TCP/UDP常见的端口号
  • ROS2进阶:基于cmake创建自己的开发包
  • ROS2进阶:如何查找特定的包(package)并列出包中所有节点(node)
  • ROS2进阶:VS2019调试ROS2-examples程序
  • 【刷算法】从上往下打印二叉树
  • Consul Config 使用Git做版本控制的实现
  • CSS3 变换
  • CSS相对定位
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Java编程基础24——递归练习
  • Java新版本的开发已正式进入轨道,版本号18.3
  • jdbc就是这么简单
  • Js基础知识(四) - js运行原理与机制
  • js中的正则表达式入门
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SwizzleMethod 黑魔法
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue.js 移动端适配之 vw 解决方案
  • vue总结
  • 测试如何在敏捷团队中工作?
  • 浮动相关
  • 高程读书笔记 第六章 面向对象程序设计
  • 工程优化暨babel升级小记
  • 将回调地狱按在地上摩擦的Promise
  • 树莓派 - 使用须知
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 译自由幺半群
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)图像的%2线性拉伸
  • (五)关系数据库标准语言SQL
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转) ns2/nam与nam实现相关的文件
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)Linux网络编程入门
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .htaccess配置常用技巧
  • .NET Core跨平台微服务学习资源
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 依赖注入和配置系统