Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

qyou/reCAPTCHA

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#reCAPTCHA 开者指南#


##简介## reCAPTCHA是一个识别验证码的程序,目的就是为了按需求解决验证码识别的问题。其识别思路简单清晰,具体用到的技术概要叙述如下:

  1. 图片接口的转换模块。通过FreeImageOpenCV之间接口的转换,使得可处理的图片格式大大增加,OpenCV本身是处理不了gif格式的,但是我们识别的图片都是互联网上流行的gif静态图片,需要做转换,转换后,基本识别全部图片格式,具体的图片格式,详见FreeImage支持的图片格式列表
  2. 图片的预处理模块。原始的图片噪声很多、并且文字有很多都有一定程度的倾斜,对后面的识别不利。首先通过OpenCV中图像平滑(主要是中值滤波[medianBlur](http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=medianblur#void medianBlur(InputArray src, OutputArray dst, int ksize)和形态学作用morphologyEx)去除噪声,然后使用轮廓发现算法(findContours)提取单个字符完成字符的切分,逐个完成字符的矫正。最后对矫正后的字符二值化送到后面的识别模块中完成识别。
  3. 识别模块。目前reCAPTCHA有两个版本,1和2。其中其中librecaptcha1使用的是Googletesseract;而librecaptcha2使用的是cvconvnet,这是一个很强大的卷积神经网络机器学习算法,广泛应用于语音识别、图像识别之中,我们通过完成数字的训练,可以大大提高准确性。两者各有利弊,前者准确度会低于后者,但是速度要大大快于后者。

##编译代码## 代码使用cmake管理编译,所以你首先需要安装cmake

sudo apt-get install cmake

然后进入对应的版本目录,仔细阅读COMPILE.txt文档,按流程完成编译操作,每一个版本下都有对应已经完成的编译版本在release目录下,编译平台Ubuntu 12.04 LTS X64,可以直接使用。

##头文件接口##

  • 版本librecaptcha1中的头文件recaptcha.h说明如下
char *recaptcha(const char *filepath, char *formula, char *result, double low_thres_val, double high_thres_val);
功能输入图像文件的地址通过双阈值`low_thres_val``high_thres_val`,输入图片识别的字符串`formula`,以及计算的结果`result`
注意低阈值`low_thres_val`最佳范围在140.0到190.0推荐160,高阈值`low_thres_val`最佳范围在190.0到210.0之间推荐200.0
char *recaptcha_from_buf(void *buffer, int buf_size, char *formula, char *result, double low_thres_val, double high_thres_val);
功能输入图像的内存指针`buffer`和大小`buf_size`,得倒对应的结果其他参数同`recaptcha`
char *simple_recaptcha(const char *filepath, char *result);
功能`recaptcha`的简化其中高低阈值使用的是推荐值只返回计算得到的结果以char*保存
char *simple_recaptcha_from_buf(void *buf, int buf_size, char *result);
功能`recaptcha_from_buf`的简化
int get_recaptcha_result(const char *filepath);
功能`recaptcha`的简化其中高低阈值使用的是推荐值只返回计算得到的结果以int保存
int get_recaptcha_result_from_buf(void *buf, int buf_size);
  • 版本librecaptcha2中的头文件librecatpcha2.h只是将所用recaptcha的地方替换为recaptcha2,其他使用方法同librecatpcha1

##模块概要##

  • ###图片接口的转换模块### 主要函数GenericLoader将图片载入FreeImage对应的内存格式中,do_trans完成FreeImage对应内存格式到OpenCV格式的转换,do_load完成最终的图片载入工作。将上述过程打包操作的函数为load_to_matload_to_mat_from_mem,具体的函数原型
int load_to_mat(const char *filepath, Mat &mat)
int load_to_mat_from_mem(void *buffer, int buf_size, Mat &mat)
  • ###图片的预处理模块### 主要函数smooth_morphology完成图片的平滑和形态学操作,threshold_and_contours完成初期二值化和轮廓提取, affine_contourrefine_contour完成图像的矫正和精细化操作,get_main_elements完成图像字符的切分和轮廓提取。将上述函数打包的最终函数为get_adaptive_elements,完成符号和数字的提取。其函数原型为
int get_adaptive_elements(Mat &data, double low_thres_val, double high_thres_val, vector<Point> &cnt1, vector<Point> &cnt2, vector<Point> &cnt_mark)
  • ###识别模块### 由于版本1和2采用了不同的方法,故分别加以介绍: 版本1使用的核心函数为ocr_read_simpledo_recatpcha,其函数原型为:
char *ocr_read_simple(tesseract::TessBaseAPI *api, const Mat &org, vector<Point> &contour, Mat &ret)
char *do_recaptcha(const Mat &img, char *formula, char *result, double low_thres_val, double high_thres_val)

版本2使用的核心函数为net_read_simpledo_recatpcha2,其函数原型为:

int net_read_simple(CvConvNet *pNet, const Mat &org, vector<Point> contour, Mat &ret)
char* do_recaptcha2(const Mat &img,  char *formula, char *result, double low_thres_val, double high_thres_val)

About

a simple reCAPTCHA application for recognizing special images

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.