tesseract 怎么调用vs2013 调用堆栈

VS2013 Update5 + Tesseract 3.04 API 编译 配置 - Suninsky的专栏 - CSDN博客
VS2013 Update5 + Tesseract 3.04 API 编译 配置
在C盘创建一个文件夹叫tesseract-build
切换到该文件夹下,输入下面命令
git clone https:
打开 VS 2013 Developer Command Prompt (VS2013 开发人员命令提示)切换到C:\tesseract-build\tesseract-vs2012
执行下面命令 msbuild build.proj
结束以后显示300多个警告,0个错误,代表这一步成功了。
把 C:\tesseract-build\tesseract-vs2012\release 下的include lib 复制到C:\tesseract-build下。
把 C:\tesseract-build\tesseract-vs2012
里的 vs2013+64bit_support.patch 复制到C:\tesseract-build下。
git clone https:
切换到tesseract文件夹,右键运行git bash
git checkout -b 3.04-vs2013 3.04.00
git am --signoff & ../vs2013+64bit_support.patch
打开C:\tesseract-build\tesseract\vs2013\tesseract.sln ,按F7生成解决方案。Release和Debug都生成一下。
把C:\tesseract-build\lib\Win32里的liblept开头的文件复制到C:\tesseract-build\lib。
新建工程,在项目属性页的包含目录中添加:
C:\tesseract-build\include
C:\tesseract-build\include\leptonica
在库目录中添加:
C:\tesseract-build\lib
附加依赖项中添加:
liblept171.lib
libtesseract304.lib
将libtesseract304.dll、libtesseract304d.lib、liblept171.dll、liblept171d.dll拷贝到C:\Windows\System32和C:\Windows\System目录下。
#define _CRT_SECURE_NO_WARNINGS
#include &stdio.h&
#include &opencv2\opencv.hpp&
#include &tesseract\baseapi.h&
#include &iostream&
#include &stdlib.h&
tesseract::TessBaseAPI
char* identifyText(cv::Mat input, char* language = "eng")
ocr.Init(NULL, language, tesseract::OEM_TESSERACT_ONLY);
ocr.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
ocr.SetImage(input.data, input.cols, input.rows, 1, input.step);
char* text = ocr.GetUTF8Text();
std::cout && "Text:" && std::
std::cout && text && std::
std::cout && "Confidence:" && ocr.MeanTextConf() && std::
int main(int argc, char* argv[])
cv::Mat image = cv::imread("D:/2.jpg", 0);
if (image.empty())
return -1;
cv::threshold(image, binary, 100, 255, CV_THRESH_BINARY);
identifyText(binary);
system("pause");
我的热门文章
即使是一小步也想与你分享1337人阅读
文字、字符识别(2)
我的tesseract安装路径为D:\Tesseract-OCR,如果你的安装路径和我不一样,将这份文档里所有的D:\Tesseract-OCR改为你的安装路径即可。
<span style="font-size:18 color:#.&下载lib和dll(所有需要下载的东西在附件里下载)
?&首先安装tesseract-ocr-setup-3.02.02.exe文件,我的安装路径为D:\Tesseract-OCR;
?&安装完成后解压tesseract-3.02.02-win32-lib-include-dirs.zip文件,将里面的lib和include文件夹复制到Tesseract-OCR目录下;
?&最后解压缩&&liblept168和VS2010编译出的libtesseract302.rar&&文件,将该压缩文件里的三个dll文件复制到Tesseract-OCR\lib目录下,替换该目录下的文档
(原因:该目录下被替换的文档时在VS2008平台下编译生成的,替换的文档则是VS2010平台下生成的,这个事从网上直接找的)
?&将chi_sim.traineddata.gz解压缩,然后将chi_sim.traineddata复制到D:\Tesseract-OCR\tessdata下,这是已经有的简体中文训练集
<span style="font-size:18 color:#.&检查并修改环境变量
一般情况下环境安装好tesseract后环境变量就自动配置好了,但是为了确保后面不出错,最好还是检查一下,在环境变量Path中增加指向安装目录下lib的路径,比如D:&\Tesseract-OCR\lib&&,以便exe运行时能找到所需要的dll。
?&还有一步特别重要,就是一定要查看环境变量TESSDATA_PREFIX,将其路径改到D:\Tesseract-OCR\下。
<span style="font-size:18 color:#.然后需要添加包含的库和目录,如下:(我新建的工程名为test)
(1)&在工程(不是解决方案)上单击右键,选择属性,依次单击配置属性——C/C&#43;&#43;——常规,在右侧找到附加包含目录,该目录下添加D:&\Tesseract-OCR\include\tesseract;
(2)&配置属性——链接器——常规,找到附加库目录,添加D:&\Tesseract-OCR\lib
&4.新建一个C&#43;&#43;工程,我建的是一个空的win3程序。建好后新建一个CPP文件,添加这几行代码:
#include&stdafx.h&&
#include&&strngs.h&&&
#include&&baseapi.h&
#include&&iostream&
using&namespace&
#pragma&&comment(lib,&&D:\\Tesseract-OCR\\lib\\libtesseract302d.lib
int&main()
char&*&str&=&&D:\\20.jpg&;&&//这是要识别图像的绝对路径
tesseract::TessBaseAPI&&&&&&
api.Init(NULL,&&chi_sim&,&tesseract::OEM_DEFAULT);&
&//初始化,设置语言包,中文简体:chi_英文:eng;也可以自己训练语言包&&
STRING&text_&&&//定义输出的变量&
if&(!api.ProcessPages(str,&NULL,&0,&&text_out))&&&&
return&0;&&&&
cout&&text_out.string();&&//输出到命令行中
然后运行文件,可以发现将识别出的文字显示在了命令行中。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:611949次
积分:6959
积分:6959
排名:第3301名
原创:88篇
转载:324篇
评论:54条
(7)(8)(2)(11)(4)(3)(12)(7)(33)(36)(3)(123)(19)(15)(22)(25)(48)(33)(9)[转]在VS2010下编译和使用tesseract_ocr - Crysaty - 博客园
转载地址:http://blog.csdn.net/zhymax/article/details/8435303
对于自动识别验证码,使用trsseract是个不错的选择,有兴趣的的朋友可以试试。
编译tesseract
官网提供了和工程,但在vs2010下的编译时基本相同的,因此我使用的方法就是把vs2008工程转换为vs2010工程,
同时把编译过程中遇到的问题以及解决方法和大家分享一下,希望对正准备使用trsseract库的朋友有所帮助。
google code一下源代码,并建立build目录。
& tesseract-ocr-3.02.02.tar.gz & tesseract源代码
& tesseract-ocr-3.02-vs2008.zip&vs2008工程文件
& leptonica-1.68-win32-lib-include-dirs.zip & &tesseract依赖的leptonica的lib和dll文件
创建tesseract-build文件夹,把下载的三个文件解压,得到以下目录结构:
tesseract-build├─include & & & & & & &// 保存leptonica-1.68-win32-lib-include-dirs.zip解压后头文件│ &└─leptonica├─lib & &// 保存leptonica-1.68-win32-lib-include-dirs.zip解压后库文件├─tesseract-ocr & &// 保存tesseract源代码以及vs2008工程文件& & &└─vs2008
在tesseract-ocr目录下复制一份vs2008文件夹,改为名vs2010。
打开工程文件vs2010\tesseract.sln,按vs2010的提示自动转换工程。
完成后选择编译配置DLL_Debug,编译。
编译过程会出现以下错误:
1& &equationdetect.cpp1&..\..\ccmain\equationdetect.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失1&..\..\ccmain\equationdetect.cpp(251): error C2146: 语法错误: 缺少“}”(在标识符“銆”的前面)1&..\..\ccmain\equationdetect.cpp(251): error C2146: 语法错误: 缺少“;”(在标识符“銆”的前面)1&..\..\ccmain\equationdetect.cpp(251): error C2065: “銆”: 未声明的标识符1&..\..\ccmain\equationdetect.cpp(251): error C2146: 语法错误: 缺少“;”(在标识符“銆”的前面)1&..\..\ccmain\equationdetect.cpp(251): error C2065: “銆”: 未声明的标识符1&..\..\ccmain\equationdetect.cpp(251): error C2146: 语法错误: 缺少“;”(在标识符“銆”的前面)1&..\..\ccmain\equationdetect.cpp(251): error C2065: “銆”: 未声明的标识符1&..\..\ccmain\equationdetect.cpp(251): error C2143: 语法错误 : 缺少“;”(在“}”的前面)1&..\..\ccmain\equationdetect.cpp(253): error C2065: “kCharsToEx”: 未声明的标识符1&..\..\ccmain\equationdetect.cpp(253): fatal error C1903: 无法从以前的错误中恢复;正在停止编译
这是错误由于文件编码格式引起的。
解决方法:
& 选择vs2010的菜单“文件 -- 高级保存选项”,在窗口中选择“简体中文(gb2312)-代码页936”,保存后重新编译。
编译完成后生成dll文件:vs2010\DLL_Debug\libtesseract302d.dll
测试tesseract
编译tesseract工程,生成DLL_Debug\tesseract.exe。
下载英文,解压到DLL_Debug文件夹。
还需要把tesseract-build\lib\liblept168d.dll复制到DLL_Debug目录。运行tesseract.exe,但系统提示运行失败:原因是我使用的liblept168d.dll是vs2008编译的(leptonica-1.68-win32-lib-include-dirs.zip),系统中没有安装vs2008的运行环境,因此无法启动。
& 1 根据,可以使用liblept168d静态库编译。
& & 选择LIB_Debug编译配置,重新生成以上文件。
& 2 使用vs2010重新编译liblept168d.dll,可以参考。
& & 文中介绍的还是vs2008,但vs2010过程完全一样,具体这里不做说明了,一步一步照做就行。
& & 我这里提供编译好的库,需要的可以。
生成后,使用京东商城的验证码进行:
另存图片为image.jpg &
tesseract.exe image.jpg image
输出image.txt,结果是QYRH
使用tesseract.lib进行二次开发
创建test工程,保存在编译目录下:
tesseract-build└─testtess // 测试工程
& & &└─testtess.sln
复制tesseract头文件
官网提供了一个脚本,可以把开发使用的头文件复制到指定目录下:
python.exe tesshelper.py .. copy ..\..\include
#include&"stdafx.h"&&
#include&"tesseract\baseapi.h"&&
#include&"tesseract\strngs.h"&&
int&_tmain(int&argc,&_TCHAR*&argv[])&&
&&&&const&char&*&image&=&"image.jpg";&&
&&&&tesseract::TessBaseAPI&&&&
&&&&api.Init(NULL,&"eng",&tesseract::OEM_DEFAULT);&&
&&&&api.SetVariable(&"tessedit_char_whitelist",&"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"&);&&
&&&&STRING&text_&&
&&&&if&(!api.ProcessPages(image,&NULL,&0,&&text_out))&&
&&&&&&&&return&0;&&
&&&&printf(text_out.string());&&&
&&&&return&0;&&
编译后用刚才下载的image.jpg文件。
注意运行时需要。
随笔 - 209Tesseract-OCR识别&学习(三、C#&包装C++的dll,并调用&来识别图片)
因为后面主要是用C# winform来写的自定义截图来识别,而Tesseract-ocr主要是C++编译的dll.虽然有相应的C#
dll,但是不知道具体函数怎么声明的。所以我就先用VS2013
VC调用了一次(上篇讲的就是。)发现,有3个函数要使用,而直接引用dll &会报错:
只有发DllImport 相应的dll 里面的函数了。三个函数,而且参数比较多。所以只好自己用C++ 包装了一次,在调用了。
&说的有点啰嗦。哈哈
把上一篇的使用原dll的来识别图片的方法 提出来:
#define _CRT_SECURE_NO_DEPRECATE
//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include "tesseract\baseapi.h"
#include "tesseract\strngs.h"
#include "PackageDll.h"
&comment(lib,"libtesseract302.lib")
#pragma &comment(lib, "liblept168.lib")
extern "C"
_declspec(dllexport)
char* &OCRDiscern(char* imagePath)
//static char * str = imageP
tesseract::TessBaseAPI &
api.Init(NULL, "eng", tesseract::OEM_DEFAULT);
api.SetVariable("tessedit_char_whitelist",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
STRING text_
if (!api.ProcessPages(imagePath, NULL, 0,
&text_out))
//MessageBox(NULL, LPCWSTR(str), LPCWSTR(str), 0);
char * pc = new char[100];
strncpy(pc, text_out.string(),100);
//MessageBox(NULL, LPCWSTR(pc), LPCWSTR(pc), 0);
// text_out.string();
头文件就省略了。注:
&extern "C"
&{&_declspec(dllexport)
& 函数 &} 这个是为了生成dll时,C#
调用时方法名称不被编译成其他的函数名。
&生成的时候还会报各种错误,找不到libtesseract302.lib
&什么的,拷贝到dubug下就好了。
生产好后就,在C#里面引用就是了。
& & [DllImport("packagedll.dll",
CharSet = CharSet.Ansi)]
& & & unsafe
public static extern StringBuilder OCRDiscern(String
imagePath);
然后调用dll里面的方法就是了。
& & StringBuilder results = new
StringBuilder("Hello World!", 25);
& string imagePath = "7.jpg";
& //StringBuilder sbu = new
StringBuilder("7.jpg");
& pictureBox1.Image =
Image.FromFile(imagePath);
& pictureBox1.Refresh();
& & results =
OCRDiscern(imagePath);
& & if (results.ToString() ==
& MessageBox.Show("空字符串");
& //MessageBox.Show(results.ToString());
& MessageBox.Show(results.ToString());
catch(Exception ex)
MessageBox.Show(ex.ToString());
因为C#项目 会使用到C++里面的指针,会报一个不安全的使用
修改项目属性里面的生成,允许不安全代码即可:
还有要注意的是:
1、把你自己封装的dll &拷贝到C# 项目的Debug下;
2、原代码中的dll 也必须拷贝到相应Debug目录下;
3、原代码中的语言包也必须拷贝的Debug下: &
后面就是识别电子设备中的数字了。
买的一个摄像头,带有代码的,几百块,可以截图什么的。然后修改代码,让他,定时截图,这个截图是截的全图,还是手动截取只有数字的部分。然后识别。加油。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 tesseract ocr vs2013 的文章

 

随机推荐