文档章节

使用Tesseract-OCR编程识别验证码

i春秋学院
 i春秋学院
发布于 2017/01/06 10:35
字数 1246
阅读 225
收藏 0

本文参加i春秋原创计划,未经许可严禁转载


Tesseract简介

OCR是什么?OCR(Optical Character Recognition):光学字符识别,简单来说就是识别图片上的文字获取,然后转换成一些我们需要的编码格式,当然当中的实现与ANN,deep learning有所关系,这是后话了,好用就行。

Tesseract是什么?Tesseract是一款开源的OCR识别引擎,一开始是由HP实验室挖坑的,开源后就给Google进行继续填坑了。最初Tesseract发布在SourceForge,googleCode,不过到今天(2016年12月30日),这个项目基本扎根在gayhub上了。

那么最后Tesseract有什么用?为什么使用Tesseract?显然的验证码识别可以使用Tesseract,至于为什么,当然是因为使用起来非常非常的简单,你不需要任何相关的知识就可以把Tesseract移植到自己的代码中。


如何获取Tesseract

获取Tesseract的方法非常简单,直接登录gayhub就可以了。当然如果你希望下载快一点的话,你应该使用一些科学上网的手段。


一.你可以使用下面的链接来获取tesseract


https://github.com/tesseract-ocr


然后点击Clone or download,如果你没用gayhub for windows的话,你可以直接点击download Zip



编译Tesseract的准备工作

当然光有Tesseract还不够,Windows平台你还需要下面三个工具。


1.Visual studio 2015(至少是2013以后版本),必须支持C++ 11。


你可以在这个连接中下载到Visual Studio 2015:
https://www.visualstudio.com/


2.你还需要cppan和CMake将Tesseract转换为Visual Studio 2015可以编译的项目。


CPPAN下载地址:
https://cppan.org/client/cppan-master-Windows-client.zip
CMAKE下载地址:
https://cmake.org/download/

当你全部搞定后,你应该有类似下面几个文件
现在你需要做以下事情
1. 安装CMake,然后重启你的电脑。
2.把tesseract解压出来,解压完成后大概是这个样子

解压cppan,然后把解压出来的cppan.exe它分别放在tesseract的目录和cmake的安装目录下,如图1.1,1.2。
   
图1.1
            
图1.2

编译Tesseract

一、打开cmd,cd到tesseract的解压目录(为了方便我把tesseract-master重命名为tesseract了)



然后依次输入下面的命令:
1. cppan
2. mkdir build
3. cd build
4. cmake ..
不出意外的话,你应该看到这个:


二、然后进入tesseract目录下的build目录,应该就可以看到visual studio 2015的项目文件了。


三、双击这个项目文件,启动visual studio 2015,在项目中,找到tesseract,点击鼠标右键,将发布版本切换为release,单击build,然后去泡一杯咖啡,慢慢坐着等。



四、假如不出意外的话,你应该看得到这个错误


双击这个错误,找到那个报错的源代码文件,将那个文件用记事本打开,以UTF-8的编码格式保存,没错,就是这个文件


然后重新编译一次,这回不出意外的话,你应该看得到这个


编译结束后,你应该可以在tesseract的文件下找到下面的目录
Tesseract\build\bin\Release
里面的文件类似于这样


使用tesseract编程识别验证码

1、打开Visual studio 2015,新建一个空项目,创建一个Main.cpp

2、将Tesseract\build\bin\Release目录下的所有文件拷贝到这个项目目录下。

3.将Tesseract这个目录拷贝到这个项目的文件夹下

4.将C:\Users\你的名字\.cppan这个目录拷贝到项目文件夹下。

5.从这里下载一个tesseract-ocr-3.02.eng英文包:http://download.csdn.net/detail/coverupsorrow/8336781;解压后把解压出来的文件放在Tesseract目录下的tessdata

完成后,应该是这个样子。

回到Visual Studio 2015,将额外的include的目录写入项目配置中。



打开__Main.cpp编写DEMO代码

#pragma comment(lib,"tesseract305.lib")

#pragma comment(lib,"pvt.cppan.demo.danbloomberg.leptonica-1.74.0.lib")

#pragma comment(lib,"pvt.cppan.demo.jpeg-9.2.0.lib")

#pragma comment(lib,"pvt.cppan.demo.openjpeg.openjp2-2.1.2.lib")

#pragma comment(lib,"pvt.cppan.demo.png-1.6.27.lib")

#pragma comment(lib,"pvt.cppan.demo.tiff-4.0.7.lib")

#pragma comment(lib,"pvt.cppan.demo.unicode.icu.common-58.2.0.lib")

#pragma comment(lib,"pvt.cppan.demo.unicode.icu.data-58.2.0.lib")

#pragma comment(lib,"pvt.cppan.demo.unicode.icu.i18n-58.2.0.lib")

#pragma comment(lib,"pvt.cppan.demo.xz_utils.lzma-5.2.2.lib")

#pragma comment(lib,"pvt.cppan.demo.zlib-1.2.8.lib")


#include <iostream>

#include <memory>


#include <allheaders.h> // leptonica main header for image io

#include <baseapi.h> // tesseract main header


int main()

{


    tesseract::TessBaseAPI tess;


    if (tess.Init("D:\\Validata\\Validata\\tesseract\\tessdata", "eng"))

    {

        std::cout << "OCRTesseract: Could not initialize tesseract." << std::endl;

        return 1;

    }


    // setup

    tess.SetPageSegMode(tesseract::PageSegMode::PSM_AUTO);

    tess.SetVariable("save_best_choices", "T");


    // read image

    auto pixs = pixRead("D:/validateCode.jpg");//这里自行修改为需要识别的图片

    if (!pixs)

    {

        std::cout << "Cannot open input file" << std::endl;

        return 1;

    }


    // recognize

    tess.SetImage(pixs);

    tess.Recognize(0);


    // get result and delete[] returned char* string

    std::cout << tess.GetUTF8Text()<< std::endl;


    // cleanup

    tess.Clear();

    pixDestroy(&pixs);

    getchar();

    return 0;

}



载一个验证码图片,鉴于我们使用的是默认的识别库,找一些不大复杂的,例如这个


我将这个文件放在了D:/validateCode.jpg,也就是源代码写的那样。
运行DEMO,结果如下,成功识别了验证码:

更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php

© 著作权归作者所有

i春秋学院
粉丝 18
博文 105
码字总数 159006
作品 0
海淀
私信 提问
python 验证码问题

tesseract-ocr-setup-3.02.02.exe 下载地址:https://sourceforge.net/projects/tesseract-ocr-alt/files/tesseract-ocr-setup-3.02.02.exe/download?usemirror=jaist&r=https%3A%2F%2Fsourc......

lweihua
2017/06/12
0
0
自动化中图像识别

验证码: 如下,在进行自动化测试,遇到验证码的问题,一般有两种方式 1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 使用OCR自动化识别,一般识别率不是太高,处理一般简单验证码...

铃铛的!
2016/08/03
0
0
使用 python 识别简单验证码

概述 简介 坑! 安装 Tesseract-OCR 使用 pytesseract 识别验证码 高级玩法 - 除线 简介 首先呢,简单的验证码是这样的: 不是这样的: 这里使用了 pytesseract 来进行验证码识别,它是基于 ...

zone_
2018/08/17
0
0
Python 实现识别弱图片验证码

图片来自 unsplash 目前,很多网站为了防止爬虫肆意模拟浏览器登录,采用增加验证码的方式来拦截爬虫。验证码的形式有多种,最常见的就是图片验证码。其他验证码的形式有音频验证码,滑动验证...

猴哥Yuri
2017/12/23
0
0
一验证码识别的小程序源码

前些天,12306这个网站挺火的,看到网上出现了各种各样的登陆、订票插件跟程序。虽然没经历过春运,看到网上各种各样的插件跟工具挺有意思的,下载了几个看了看,都挺不错的。印象中有个jav...

晨曦之光
2012/05/16
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

读书笔记:深入理解ES6 (五)

第五章 解构:使数据访问更便捷 第1节 为什么使用解构功能?   在ES5中,开发者们从对象、数组中获取特定数据并赋值给变量,编写了很多看起来同质化的代码。例如: 1 let options = {2 ...

张森ZS
25分钟前
21
0
CentOS7 yum方式安装MySQL5.7

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。 1 下载并安装MySQL官方的 Yum Repository [root@localho...

roockee
34分钟前
14
0
Allegro三种自定义设置快捷键的方法

Allegro自定义设置快捷键的三种方法: 1、在Allegro PCB editor 命令窗口直接定义 2、通过修改用户变量env文件来设置快捷键 3、定义笔画为快捷键 1、在Allegro PCB editor 命令窗口直接定义 ...

demyar
38分钟前
16
0
如何做一张能让人眼前一亮的大屏?

作为在职场驰骋的社会人,提到数据可视化大家应该都不陌生了。数据可视化的作用也不用我多说,主要是利用图形化手段,更清晰直观地将数据展示。多层次、交互式的可视化分析能够方便决策者理解...

朕想上头条
39分钟前
9
0
TL138/1808/6748-EthEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EthEVM是广州创龙基于SOM-TL138/1808/6748核心板开发的一款开发板,具有三个网络接口。由于SOM-TL138/1808/6748核心板管脚兼容,所以此三个核心板共用同一个底板。开发板采用...

Tronlong创龙
43分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部