Skip to content

qyou/reCAPTCHA

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