Build OpenCV text(OCR) module on windows
Background.
AOI software needs to use the OCR feature to recognize the texts on the chips. Because our vision software is based on OpenCV, so the first choice is text module in opencv_contrib.
Procedures.
1. OCR module is not in standard OpenCV package. It is in text module of OpenCV_Contrib. It can be downloaded from opencv_contrib.
2. The core of OCR is using Tesseract, and Tesseract depends on Leptonica, so need to build Leptonica and Tesseract first.
3. Get the Leptonica from https://github.com/charlesw/tesseract-vs2012. This solution can directly build. The output is liblept171d.dll and liblept171d.lib.
4. Get the Tesseract from https://github.com/tesseract-ocr/tesseract. Create the .\include\leptonica folder, copy all the header file from .\tesseract-vs2012\liblept\include (The root folder is in step 3) to it. Create the .\lib folder, copy all the step 3 build generated files(The .dll and .lib) in .\tesseract-vs2012\build\lib to it. Set the project property of tesseract, change the include folder path "..\..\..\include" and "..\..\..\include\leptonica" to "..\..\include" and "..\..\include\leptonica". Then can build the Tessrect project, the output is libtesseract304d.dll and libtesseract304d.lib.
The AddIdTohOCR has compile error, change the content as below can solve the problem.
static void AddIdTohOCR(STRING* hocr_str, const std::string base, int num1, int num2) {
unsigned long bufsize = base.length() + * kMaxIntSize;
char *id_buffer = new char[bufsize];
if (num2 >= ) {
snprintf(id_buffer, bufsize - , "%s_%d_%d", base.c_str(), num1, num2);
}
else {
snprintf(id_buffer, bufsize - , "%s_%d", base.c_str(), num1);
}
id_buffer[bufsize - ] = '\0';
*hocr_str += " id='";
*hocr_str += id_buffer;
*hocr_str += "'";
delete[]id_buffer;
}
5. Use CMake to config the OpenCV solution. Copy the text module from opencv_contrib to .\OpenCV\sources\modules. Run Cmake_Gui, there are 3 options need to set. Lept_library, Tesseract_Include_Dir, Tesseract_Library. Tesseract_Include_Dir set to ../.../tesseract/API. After set, can run CMake to config and generate the solution.
6. Open the OpenCV solution. Open the .\modules\text\src\precomp.hpp file, change the include path to as below.
#ifdef HAVE_TESSERACT
//#include <tesseract/baseapi.h>
//#include <tesseract/resultiterator.h>
#include "baseapi.h"
#include "resultiterator.h"
#endif
If there are header files can not find errors, find and copy them from tesseract to the tesseract/API folder. As i test, below files need to be copied.
#include ""resultiterator.h""
#include "platform.h"
#include "apitypes.h"
#include "thresholder.h"
#include "unichar.h"
#include "tesscallback.h"
#include "publictypes.h"
#include "pageiterator.h"
#include "resultiterator.h"
#include "host.h"
#include "ltrresultiterator.h"
There may be a compile error in function static double NFA(int n, int k, double p, double logNT) with std::numeric_limits<double>::min(); Add below code before the function to fix it.
#undef max
#undef min
7. Download the language test data from https://github.com/tesseract-ocr/tessdata. What i use is the eng.traineddata. Put it to .\tesseract\tessdata.
8. After build OpenCV successfully, then you can create the TestOpenCV project with the below function, before running it, need to copy the liblept171d.dll and libtesseract304d.dll to the output folder(where the exe file is put).
using OCRTesseract = cv::text::OCRTesseract;
void TestOCR()
{
cv::Mat mat = cv::imread(".\\data\\OCRTest.png");
if ( mat.empty() )
return; std::string output_text;
char *dataPath = "C:/tesseract-build/tesseract/tessdata";
cv::Ptr<OCRTesseract> ptrOcr = OCRTesseract::create(dataPath);
ptrOcr->run(mat, output_text );
cout << output_text << endl;
}
9. The Tesseract is sensitive to the text orientation. So need to make the text face up to be better recognized.
Build OpenCV text(OCR) module on windows的更多相关文章
- windows 10 上源码编译OpenCV并支持CUDA | compile opencv with CUDA support on windows 10
本文首发于个人博客https://kezunlin.me/post/6580691f/,欢迎阅读! compile opencv with CUDA support on windows 10 Ser ...
- 应用OpenCV进行OCR字符识别
opencv自带一个字符识别的例子,它的重点不是OCR字符识别,而主要是演示机器学习的应用.它应用的是UCI提供的字符数据(特征数据). DAMILES在网上发布了一个应用OpenCV进行OCR的例子 ...
- Python:ModuleNotFoundError: No module named 'windows'
pymouse安装后,又出现了ModuleNotFoundError: No module named 'windows'的错误 解决: 下载安装pyhook:http://www.lfd.uci.e ...
- OpenCV学习(1)-安装(Windows)
下载安装 在这里下载.我下载了2.4.9的Windows版本.双击安装即可. 配置环境变量 配置环境变量的目的是为了让系统找到OpenCV的动态链接库.因此需要把动态链接库添加到系统环境变量PATH中 ...
- python导入opencv解决no module named cv2问题
最近ubuntu用的比较多,在写神经网络代码时也会经常接触到python,但是python的环境配置确实是个头疼的问题. 尤其是接触到opencv时,需要导入opencv的库文件,网上也有很多方法,本 ...
- [Javascript] Add a browser build to an npm module
In this lesson, we're going to use webpack to create a UMD (Universal Module Definition) build of ou ...
- How to Build MySQL from Source Code on Windows & compile MySQL on win7+vs2010
Not counting obtaining the source code, and once you have the prerequisites satisfied, [Windows] use ...
- 自定义内建模块 - Python Build Your Own Built-In Module
在 python 中, 用户可以通过 py 文件创建自定义的 module, 也可以通过 C 创建 dll, 扩展 python module. 当用户在一个正在编辑的模块 module 中, 引入( ...
- <学习opencv>跨平台和本机windows
/*=========================================================================*/ // 跨平台和本机Windows /*=== ...
随机推荐
- LeetCode---Binary Search
475. Heaters 思路:每趟循环查找离房子最近的热水器,计算距离,最后取最大距离 public int findRadius(int[] houses, int[] heaters) { Ar ...
- 性能测试知多少---系统架构分析 转自https://yq.aliyun.com/articles/35147?spm=5176.100239.blogcont24251.8.lS96At
摘要: 有些事儿一旦放一放就难再拾起来,突然发现<性能测试知多少>这个系列两月没更新,关键时我都不知道啥时候放下的,总容易被各种技术所吸引走,如饥似渴的想学更多的东西,这几天一直有朋友问我 ...
- [转]面向过程的分析(POA),和面向对象的分析(OOA)
欢迎转载本文,转载地址: http://www.juliantec.info/articles/basic-concept/poa-and-ooa.html 软件开发方法论概述 在60年代的软件开发行 ...
- MySQL绿色版的安装(mysql-5.6.22-win32.zip)
1.数据库下载 Mysql官方网站:http://www.mysql.com/,数据库下载地址:http://www.mysql.com/downloads/.从官方网站可以找到两种文件包,一种是ex ...
- C# 会可能需要的扩展
1. List 转成DataSet /// <summary> /// 集合数据转成 DataSet /// </summary> /// <typepara ...
- eclipse插件
#eclipse market http://www.eclipse.org/mpc/archive.php http://download.eclipse.org/mpc/mars/ #文件路径 p ...
- EJB初识(通熟易懂)
转载自http://blog.csdn.net/jojo52013145/article/details/5783677,讲的很透彻,佩服,膜拜学习 1. 我们不禁要问,什么是"服务集群&q ...
- The project: project which is referenced by the classpath, does not exist.
有个java工程运行时报The project: project which is referenced by the classpath, does not exist.错误 上网查解决方案,说是将 ...
- kubuntu+roundcube搭建邮件服务器(包含LAMP)
好久之前写的了,偶然翻到然后拿出来看看,里面文字图片都没改,有错误请见谅 步骤: 一.关于ubuntu的安装二.ubuntu配置LAMP(Linux+Apache+Mysql+Perl/PHP/Pyt ...
- linux命令-cp/scp {拷贝}
一 命令解释 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 命令参数: -a 尽可能 ...