在VS2010下编译和使用tesseract_ocr识别验证码
对于自动识别验证码,使用trsseract是个不错的选择,有兴趣的的朋友可以试试。
编译tesseract
官网提供了vs2008的编译说明和工程,但在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.cpp
1>..\..\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。
下载英文语言库tesseract-ocr-3.02.eng.tar.gz,解压到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脚本,可以把开发使用的头文件复制到指定目录下:
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; api.Init(NULL, "eng", tesseract::OEM_DEFAULT); api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ); STRING text_out; if (!api.ProcessPages(image, NULL, 0, &text_out)) { return 0; } printf(text_out.string()); return 0;}
编译后用刚才下载的image.jpg文件。
注意运行时需要语言库。
在VS2010下编译和使用tesseract_ocr识别验证码的更多相关文章
- VS2010 下编译 cocos2d-x-2.1.4
在VS2010 下编译 cocos2d-x-2.1.4 首先感谢 cocos2d-x 团队为我们做出这么好的跨平台框架,让我们这些码农省了很多时间,事半功倍. 里沃特最近在编译 win32 版本的 ...
- 在vs2010下编译boost
1. 解压缩后,运行bootstrap.bat批处理文件,得到bjam.exe; 2. 在vs2010下编译boost boost最新版本已经支持vs2010,然而直接下载编译会发现一堆bug: 首先 ...
- VS2010下编译配置Boost_1.53
一.准备工作 1.下载最新版本的boost库.所在地址:boost_1_53_0.zip.官方推荐7z压缩格式的,因为其压缩效率更好,相应包的大小也比较小. 2.解压缩到指定目录,如C:\boost_ ...
- 转:在VS2010下编译、调试和生成mex文件
最近帮人调了一个程序,是网上公开的代码,利用matlab与c++混合编程做三维模型关键点检测,发现他们可以用VS2010编译.调试.生成mexw32文件,因此觉得之前在Matlab上利用mex命令真是 ...
- vs2010下编译osip2和eXosip2的4.0.0版的静态库及搭建开发环境
转载于:http://blog.csdn.net/lbc2100/article/details/48293911 本文为参考网上的动态库的方式,进行静态库的实现,在此对动态库的作者表示感谢. 第一步 ...
- VS2010下编译安装DarwinStreamingServer5.5.5
源码下载链接:http://dss.macosforge.org/源码版本: 5.5.5版本电脑环境:visual studio2010,window 7 x64系统.用VS2010打开WinNTSu ...
- 在VS2010 下编译 cocos2d-x-2.1.4
首先感谢 cocos2d-x 团队为我们做出这么好的跨平台框架,让我们这些码农省了很多时间,事半功倍. 里沃特最近在编译 win32 版本的时候最到一点小问题,现在记录下,说不定能帮到某些初学的朋友. ...
- VS2010下编译sqlite3
首先下载源码,http://www.sqlite.org/download.html中第一个下载文件就是,下载sqlite-amalgamation-3071000.zip,当前版本是3.7.10,里 ...
- 怎么将linux下的项目转换成windows的VS2010下的项目?
怎么将linux下的项目转换成windows的VS2010下的项目? 不显示删除回复 显示所有回复 显示星级回复 ...
随机推荐
- 转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比
转载:http://blog.csdn.net/dreamzml/article/details/9951577 ViewPager ViewPager 如其名所述,是负责翻页的一个 View.准确说 ...
- 解决“LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”问题
更新VS2010,或者卸载VS2013安装2010后,建立项目时会出现"LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏"的错误 ...
- VueJS取得URL参数
vuejs取得URL中参数的值 地址:http://localhost:3333/#/index?id=001 结果:001 console.log(this.$route.query.id)
- Linux下查看IP的命令:ifconfig -a
按照指南实践,在NFS挂载测试和tftp服务器架设时,均需用到本机的IP地址,怎么查看呢? 很简单,键入命令:ifconfig -a 这个命令具体是怎么定义的呢?有时间再查阅,先跑遍指南.
- 查看Oracle中是否有锁表的sql
1.查看是否有锁表的sql 代码如下: select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers, 'w ...
- 前端自动构建工具@gulp入门
gulp是一个自动化的前端工具.它可以利用自身的插件来实现一些功能,如sass.less编译:浏览器自动刷新,文件压缩.重命名.代码校验(个人使用sublime的插件进行校验)等功能.当然这些功能也可 ...
- 用POI读取具有任意合并单元的excel数据
maven依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ ...
- Mysql插入数据为何要加上" ` "(Esc下面那个按键符号)?
资料上和以前学习的SQL语言,往数据库里面插入数据语句是这样的 INSERT INTO test_table (clo_1, col_2) VALUES("this is value of ...
- iOS.Animation.Math-behind-CATransform3D
iOS CoreAnimation: Math behind CATransform3D 1. What's CATransform? Matrix Transform: "User spa ...
- 自动化-Appium
1.手把手教你 Android 标准 APP 的四大自动化测试法宝:https://testerhome.com/topics/5846 2.中文 Appium API 文档:https://test ...