对于自动识别验证码,使用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识别验证码的更多相关文章

  1. VS2010 下编译 cocos2d-x-2.1.4

    在VS2010 下编译 cocos2d-x-2.1.4   首先感谢 cocos2d-x 团队为我们做出这么好的跨平台框架,让我们这些码农省了很多时间,事半功倍. 里沃特最近在编译 win32 版本的 ...

  2. 在vs2010下编译boost

    1. 解压缩后,运行bootstrap.bat批处理文件,得到bjam.exe; 2. 在vs2010下编译boost boost最新版本已经支持vs2010,然而直接下载编译会发现一堆bug: 首先 ...

  3. VS2010下编译配置Boost_1.53

    一.准备工作 1.下载最新版本的boost库.所在地址:boost_1_53_0.zip.官方推荐7z压缩格式的,因为其压缩效率更好,相应包的大小也比较小. 2.解压缩到指定目录,如C:\boost_ ...

  4. 转:在VS2010下编译、调试和生成mex文件

    最近帮人调了一个程序,是网上公开的代码,利用matlab与c++混合编程做三维模型关键点检测,发现他们可以用VS2010编译.调试.生成mexw32文件,因此觉得之前在Matlab上利用mex命令真是 ...

  5. vs2010下编译osip2和eXosip2的4.0.0版的静态库及搭建开发环境

    转载于:http://blog.csdn.net/lbc2100/article/details/48293911 本文为参考网上的动态库的方式,进行静态库的实现,在此对动态库的作者表示感谢. 第一步 ...

  6. VS2010下编译安装DarwinStreamingServer5.5.5

    源码下载链接:http://dss.macosforge.org/源码版本: 5.5.5版本电脑环境:visual studio2010,window 7 x64系统.用VS2010打开WinNTSu ...

  7. 在VS2010 下编译 cocos2d-x-2.1.4

    首先感谢 cocos2d-x 团队为我们做出这么好的跨平台框架,让我们这些码农省了很多时间,事半功倍. 里沃特最近在编译 win32 版本的时候最到一点小问题,现在记录下,说不定能帮到某些初学的朋友. ...

  8. VS2010下编译sqlite3

    首先下载源码,http://www.sqlite.org/download.html中第一个下载文件就是,下载sqlite-amalgamation-3071000.zip,当前版本是3.7.10,里 ...

  9. 怎么将linux下的项目转换成windows的VS2010下的项目?

    怎么将linux下的项目转换成windows的VS2010下的项目?             不显示删除回复             显示所有回复             显示星级回复        ...

随机推荐

  1. 在oracle里写各种语句得心应手,但是在mybatis.xml文件里呢?

    这个问题我让我搞了大半天,实在气人,话不多说,直接上代码 <select id="*" resultMap="Blog" parameterType=&q ...

  2. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

  3. ios 关于状态栏的一些小知识

    一.改变状态栏颜色 状态栏分为两种颜色,默认的是黑色,这里想要改为白色: 分为两步: 第一步:在项目中找到plist文件,添加View controller-based status bar appe ...

  4. Android学习---数据库的增删改查(sqlite CRUD)

    上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查. 下面直接看代码: MyDBHelper.java(创建数据库,添加一列phone) package com. ...

  5. iOS工作笔记(十五)

    1.使用MJRefresh上拉加载的小细节 MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingB ...

  6. $.each与$().each

    在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ...

  7. 模糊测试(Fuzz testing)

    模糊测试(fuzz testing)是一种安全测试方法,他介于完全的手工测试和完全的自动化测试之间.为什么是介于那两者之间?首先完全的手工测试即是渗透测试,测试人员可以模拟黑客恶意进入系统.查找漏洞, ...

  8. HR开发 获取信息类型数据

    1.PNP逻辑数据库. LOOP获取信息类型数据. TABLES: PERNR . , . START-OF-SELECTION. GET PERNR . LOOP AT P0000 WHERE .. ...

  9. sql server 还原数据库后,删除用户,提示数据库主体在该数据库中拥有架构,无法删除解决方法

    将另一台服务器上的数据库备份文件,在现在用的这台服务器上还原之后,再创建相同的用户名,提示用户已存在 想将之前的用户先删除掉,却提示“数据库主体在该数据库中拥有架构,无法删除解决方法” 在网上找到方法 ...

  10. geoserver使用curl发布 imagemosaic

    1.//create workspace     curl -v -u admin:geoserver -XPOST -H "Content-type: text/xml" -d ...