惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
D
Docker
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
F
Full Disclosure
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
L
LangChain Blog
H
Help Net Security
B
Blog
T
Tailwind CSS Blog
V
V2EX
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
Recent Announcements
Recent Announcements
aimingoo的专栏
aimingoo的专栏
美团技术团队
A
About on SuperTechFans
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
I
InfoQ
Project Zero
Project Zero
I
Intezer
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
Last Week in AI
Last Week in AI
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AWS News Blog
AWS News Blog
Spread Privacy
Spread Privacy
S
Securelist
Recorded Future
Recorded Future
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 叶小钗
S
Security Affairs
Blog — PlanetScale
Blog — PlanetScale
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
The Hacker News
The Hacker News

博客园 - gxh973121

Windbg在Managed App中设置函数断点的几种方法 TeamTalk---服务端架构 找不到资产文件 project.assets.json windows 2008 VPN(PPTP/L2TP)搭建 - gxh973121 vs 调试时 QuickWatch 不能计算变量值 wireshark 分析过滤数据 go module 设置 逻辑漏洞之支付漏洞 java holdsLock()方法检测一个线程是否拥有锁 c#编程指南(十) 平台调用P-INVOKE完全掌握, 字符串和指针 Git过滤文件和文夹 VC CComboBox用法总结 WideCharToMultiByte和MultiByteToWideChar函数的用法 c++ 时间类型详解 time_t 链接报error LNK2019: unresolved external symbol错误,解决 VS2008 工程只生成dll不生成lib的解决方案 vs2010中的MSBuild输出warning MSB8012问题 tesseract-ocr 提高验证码识别率手段之---识别码库训练方法 Windows下Qt5搭建Android开发环境笔记
在VS2010下编译和使用tesseract_ocr识别验证码
gxh973121 · 2014-07-25 · via 博客园 - gxh973121

对于自动识别验证码,使用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的提示自动转换工程。

编译过程会出现以下错误:

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,但系统提示运行失败:

在VS2010下编译和使用tesseract_ocr识别验证码

原因是我使用的liblept168d.dll是vs2008编译的(leptonica-1.68-win32-lib-include-dirs.zip),系统中没有安装vs2008的运行环境,因此无法启动。

解决方法

  1 根据官网说明,可以使用liblept168d静态库编译。

    选择LIB_Debug编译配置,重新生成以上文件。

  2 使用vs2010重新编译liblept168d.dll,可以参考编译方法。

    文中介绍的还是vs2008,但vs2010过程完全一样,具体这里不做说明了,一步一步照做就行。

生成后,使用京东商城的验证码进行测试:

在VS2010下编译和使用tesseract_ocr识别验证码

另存图片为image.jpg  在VS2010下编译和使用tesseract_ocr识别验证码

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文件。

注意运行时需要语言库。