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的更多相关文章

  1. 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 ...

  2. 应用OpenCV进行OCR字符识别

    opencv自带一个字符识别的例子,它的重点不是OCR字符识别,而主要是演示机器学习的应用.它应用的是UCI提供的字符数据(特征数据). DAMILES在网上发布了一个应用OpenCV进行OCR的例子 ...

  3. Python:ModuleNotFoundError: No module named 'windows'

    pymouse安装后,又出现了ModuleNotFoundError: No module named 'windows'的错误 解决: 下载安装pyhook:http://www.lfd.uci.e ...

  4. OpenCV学习(1)-安装(Windows)

    下载安装 在这里下载.我下载了2.4.9的Windows版本.双击安装即可. 配置环境变量 配置环境变量的目的是为了让系统找到OpenCV的动态链接库.因此需要把动态链接库添加到系统环境变量PATH中 ...

  5. python导入opencv解决no module named cv2问题

    最近ubuntu用的比较多,在写神经网络代码时也会经常接触到python,但是python的环境配置确实是个头疼的问题. 尤其是接触到opencv时,需要导入opencv的库文件,网上也有很多方法,本 ...

  6. [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 ...

  7. 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 ...

  8. 自定义内建模块 - Python Build Your Own Built-In Module

    在 python 中, 用户可以通过 py 文件创建自定义的 module, 也可以通过 C 创建 dll, 扩展 python module. 当用户在一个正在编辑的模块 module 中, 引入( ...

  9. <学习opencv>跨平台和本机windows

    /*=========================================================================*/ // 跨平台和本机Windows /*=== ...

随机推荐

  1. 在Mac上使用vim的几个命令

    Mac上面编辑文件的命令总是记不住,留一个参考!!! 如果是vim,则:Esc 退出编辑模式,输入以下命令: :wq  保存后退出vi,若为 :wq! 则为强制储存后退出(常用) :w    保存但不 ...

  2. .NET操作Xml类

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.I ...

  3. 搭建sonar,推动代码质量管理

    最近比较关注devops相关的文章,尝试搭建sonarqube服务,进行代码质量的分析和管理,先记录下本地环境的搭建和分析过程. 一.sonarqube服务搭建 官网地址:http://www.son ...

  4. Windows下: RubyMine + Ruby On Rails + mysql 搭建开发环境

    最近在接手一个手机项目.在搭建环境的过程中,遇到了一些问题,在下文中已做记录,并奉上个人的解决方案. 开发环境 win2003 ;  JetBrains RubyMine6.3.3 1.  下载最新版 ...

  5. office project 激活

    office project 2010激活方式: 图上中,箭头位置,可能没激活,需要软件激活 ( mini-KMS Activator(Office2010激活工具) V1.2 绿色版 ) 激活方式如 ...

  6. ASP.NET管道

    以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载).IIS 6引入了应用程序池的概念,一个工作进程对应着一个应用程 ...

  7. JavaScript的学习3

    一.数组 1.定义数组格式:var 变量名 = [数组元素1,数组元素2] 2.遍历数组元素: 格式: var arr = []; for(var i=0;i<数组长度;i++){ arr[i] ...

  8. 修改目的端trail文件的最大大小--转载

    本文为原创,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/38346435 修改目的端trail文件的最大大小. 本文产生的背景: 在 ...

  9. [翻译练习]密码学1小时入门 (Everything you need to know about cryptography in 1 hour)

    原文:http://www.daemonology.net/papers/crypto1hr.pdf   [密码学简介]   很多人都误用了密码学   一般可归为三类: 1. 愚蠢 比如Google ...

  10. mac-文本编辑器

    windows时代最喜欢的文本编辑器一直是ultraedit,但到了mac下,破解的ultraedit退出时会异常,于是琢磨着换编辑器,最终选择了sublime text2,百度下载,不注册也可以用. ...