官方介绍文档,
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)
- Download the latest SW (Software Network
https://software-network.org/
) client fromhttps://software-network.org/client/
. - Run
sw setup
(may require administrator access) - Run
sw build org.sw.demo.google.tesseract.tesseract-master
.
For visual studio project using tesseract
- Setup Vcpkg the Visual C++ Package Manager.
- 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-bitvcpkg 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:
- Download the latest SW (Software Network
https://software-network.org/client/
) client fromhttps://software-network.org/client/
. - Checkout tesseract sources
git clone https://github.com/tesseract-ocr/tesseract tesseract && cd tesseract
. - Run
sw build
. - Binaries will be available under .sw\out\some hash dir...
Develop Tesseract
For development purposes of Tesseract itself do the next steps:
- Download and install Git, CMake and put them in PATH.
- Download the latest SW (Software Network
https://software-network.org/
) client fromhttps://software-network.org/client/
. SW is a source package distribution system. - Add SW client to PATH.
- Run
sw setup
(may require administrator access) - 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
-
Run
cd tesseract mkdir build && cd build cmake ..
-
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 sourcetesseract-3.01-win_vs.zip
- Visual studio (2008 & 2010) solution with necessary librariestesseract-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).