python+svmlib+opencv实现图片验证码的自动识别
2017-09-17 18:09
351 查看
识别原理关键基于机器学习
以下是余下全文
python配置opencv网址
python配置SVMLIB网址
代码分析:上述url是网站中获取验证码路径,并且将获取的图片保存到本地
代码分析:由于从上一步获取的图片都是白色作为背景色,因此将噪声点全部设置为白色
代码分析:通过分析图片,发现图片中每个数字的高度固定在15~100(上边界和下边界)之间,而x1代表数字的左边界,x2代表数字的右边界
代码分析:FeatureKeep保存了每个子区域的总的黑色像素点个数,cov_mat保存了协方差
代码分析:(详情见参考网址中的svmlib for python详解)
1.“train.tx”有特定格式:label index1:value1 index2:value2 …
2.y代表样本的标签(数字0类、数字1类),x代表了样本的特征
3.svm_train训练得到一个模型
4.svm_save_model保存训练模型
代码分析:(详情见参考网址中的svmlib for python详解)
1.recognize.txt中是和训练中的train.txt相同格式的
2.yt代表了识别图片的编号,就是代表第几张图片。xt代表识别图片的特征
3.svm_load_model加载训练模型
4.svm_predict识别,p_label中存放的是识别的结果,会返回识别的标签(数字0或者数字1…)
svmlib for python详解
以下是余下全文
python配置opencv网址
python配置SVMLIB网址
一、思想(基本步骤)
1.获取训练样本(python“爬”取)
2.图片预处理(去噪声)
3.图片分割(分割为单个数字)
4.提取特征(每行黑色像素点构成的向量的协方差)
5.训练(基于svmlib)
6.识别(基于svmlib)
二、获取训练样本
图片验证码是来源于“湖南大学迎新系统”url='http://yxxt.hnu.cn/VerifyCode.aspx?????' f = open("./picture/"+str(i)+".png","wb") f.write(urllib2.urlopen(url).read()) f.close()
代码分析:上述url是网站中获取验证码路径,并且将获取的图片保存到本地
三、图片预处理(去噪声)
通过观察训练样本,发现噪声点的RGB都大于等于195for i in range(image_output.shape[0]): for j in range(image_output.shape[1]): if(image_output[i][j][0]>=195 and image_output[i][j][1]>=195 and image_output[i][j][2]>=195): image_output[i][j]=(255,255,255)
代码分析:由于从上一步获取的图片都是白色作为背景色,因此将噪声点全部设置为白色
四、图片分割(分割为单个数字)
基本思路:首先得分析图像,此样本中的图片的每个数字基本上分布比较均匀,只要确定数字的左右、上下边界,就能将单个数字分割出来child_img_list = [] for i in range(4): x1 = 10 + i * 50 x2 = 60 + i * 50 child_img = img[15:100,x1:x2] child_img_list.append(child_img) cv2.imwrite(path+str(PictureNum)+str(i)+".png",child_img)
代码分析:通过分析图片,发现图片中每个数字的高度固定在15~100(上边界和下边界)之间,而x1代表数字的左边界,x2代表数字的右边界
五、提取特征(每行黑色像素点构成的向量的协方差)
1.将图片分割成5×5个子区域,每个区域是10×17个像素点
2.计算每个子区域中黑色像素点个数,得到了5×5的矩阵
3.计算第二步得到的矩阵的协方差(协方差代表了每个子区域之间的关联性)
FeatureKeep =[[] for i in xrange(5)] for i in range(5): for j in range(5): black_sum=0 for k in range(10): for m in range(17): # 判定黑点 if(input_image[5*i+k,j*5+m] < 200): black_sum=black_sum+1 FeatureKeep[i].append(black_sum) #计算协方差 cov_mat = np.cov(FeatureKeep,rowvar=0)
代码分析:FeatureKeep保存了每个子区域的总的黑色像素点个数,cov_mat保存了协方差
六、训练(基于svmlib)
y, x = svm_read_problem("./data/train.txt") model = svm_train(y, x) svm_save_model("./model", model)
代码分析:(详情见参考网址中的svmlib for python详解)
1.“train.tx”有特定格式:label index1:value1 index2:value2 …
2.y代表样本的标签(数字0类、数字1类),x代表了样本的特征
3.svm_train训练得到一个模型
4.svm_save_model保存训练模型
七、识别(基于svmlib)
yt, xt = svm_read_problem(“./testPicture/recognize.txt”) model = svm_load_model("./model") p_label, p_acc, p_val = svm_predict(yt, xt, model) # p_label即为识别的结果
代码分析:(详情见参考网址中的svmlib for python详解)
1.recognize.txt中是和训练中的train.txt相同格式的
2.yt代表了识别图片的编号,就是代表第几张图片。xt代表识别图片的特征
3.svm_load_model加载训练模型
4.svm_predict识别,p_label中存放的是识别的结果,会返回识别的标签(数字0或者数字1…)
八、参考网址
python实现验证码识别svmlib for python详解
相关文章推荐
- 使用opencv的SVM实现车牌区域识别
- 使用OpenCV+PCA+KNN/SVM进行人脸检测和识别-Python
- 使用opencv的SVM和神经网络实现车牌识别(高质量的文章******)
- Python + OpenCV 实现简单的人脸识别
- 使用opencv的SVM和神经网络实现车牌识别
- 模式识别之(一)SVM的opencv3.0实现
- 使用opencv的SVM实现车牌区域识别
- Python 实现全自动登录(真正的全自动,自动识别验证码)
- 实现自动识别OpenCV的版本号
- 使用opencv的SVM实现车牌区域识别
- 【图像识别】 Python+Opencv调用摄像头实现人脸识别并保存视频
- python+opencv实现hog+svm的训练
- opencv(三):HOG+SVM实现手写字符识别
- python调用OpenCV实现人脸识别功能
- python+cookielib实现批量利用账号和密码自动获取新浪微博登录cookie
- 表情识别的简单实现(实时,C++,SVM+Dlib)
- 基于OpenCV的 SVM算法实现数字识别(二)---SVM原理
- OpenCV3计算机视觉Python语言实现人脸识别笔记
- python + openCV 实现图像轮廓识别和面积计算
- Python3.5+sklearn 使用SVM自动识别字母验证码