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. getview不执行

    <FrameLayout android:layout_width="match_parent" android:layout_height="match_pare ...

  2. 简述cookie

    1.Cookie的概述 * Cookie是客户端的技术(默认把Cookie保存在每个用户的浏览器上) * 程序把每个用户的数据以cookie的形式写给用户各自的浏览器 * 当用户使用浏览器再去访问服务 ...

  3. git常用命令 (阿里云code)

    命令行指令 Git 全局设置 git config --global user.name "马会东" git config --global user.email "ma ...

  4. [经验交流] docker in docker 的变通实现方法

    最近在做CI持续集成环境的容器化,其中一个工作是:在容器中构建容器镜像. 对于这个需求,网上有一些 Docker in Docker 的方法,具体需要修改宿主机的配置.这种方式在单机环境下.对安全要求 ...

  5. CSS3常用30种选择器总结

    CSS3常用30种选择器总结 HTML5/CSS3时尚的圆盘时钟动画 带当前日期 www.html5tricks.com/demo/html5-css3-clock-with-date/index.h ...

  6. Android学习笔记(十三)

    Android中的广播机制 Android提供了一套完整的API,允许应用程序自由地发送和接受广播. 发送广播的方法借助于Intent,接受广播的方法需要广播接收器(BroadcastsReceive ...

  7. 添加Web引用

  8. UILable

    //UILable的大小自适应实例 UILabel *myLable = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];//设定位置与大小 [m ...

  9. 尚学堂Spring视频教程(四):使用Annotation

    之前我们的bean都配置在XML里,并且通过bean的property标签来指定依赖关系,如果项目很大,那岂不是要配置很多这样的property标签?Spring提供了注解的方式来解决这个问题 @Au ...

  10. IRC常用命令

    From: http://www.blogjava.net/ivanwan/archive/2006/02/17/31296.html IRC命令可以实现一些特殊的功能.目前,亿言堂支持14条IRC命 ...