基于SVM的python简单实现验证码识别
1. 爬取验证码图片
from urllib import requestdef download_pics(pic_name):url = 'http://wsbs.zjhz.hrss.gov.cn/captcha.svl'res = request.urlopen(url)get_img = res.read()with open('/Users/luacheng/project/python/image/vcode/%s.jpg' % (pic_name), 'wb') as f:f.write(get_img)if __name__ == '__main__':for i in range(100):pic_name = idownload_pics(pic_name)
2. 二值化
接下来要做的工作就是二值化验证码,所谓二值化,就是将每一个像素点用0或1来表示,图像的每个像素点都有rgb三个值,我们首先转化成灰度图,这样每个像素点就只有一个灰度值了。接下来根据自己设定的阈值来确定每个像素点是该为0还是为1。
我的思路是首先将图像转化为array处理,当然完全可以直接图像处理。
from PIL import Image
import numpydef binarization(im): # 二值化imgry = im.convert('L')imgry = numpy.array(imgry) # 将图像转化为数组height, width = imgry.shapef = open('1.txt', 'w')for i in range(height):for j in range(width):gray = imgry[i, j]if gray <= 220: # 阈值设为220imgry[i, j] = 0else:imgry[i, j] = 1f.write(str(imgry[i,j])) #输出到txt查看f.write('\n')'''plt.figure('')plt.imshow(imgry, cmap='gray')plt.axis('off')plt.show()'''return imgryif __name__ == '__main__':img = Image.open('/Users/luacheng/project/python/image/vcode/1.jpg')binarization(img)
在二值化处理之后,处理结果如下所示:
3 图片分割
接下来要做的就是将这四个字符分割开来形成训练集,这个操作并不难。因为这些验证码的位置都是差不多的,如果验证码字符位置比较乱的话就会比较麻烦
1 def cutImg(img): #图像切割 2 s = 12 3 w = 40 4 h = 81 5 t = 0 6 cut_img = [] 7 for i in range(4): 8 pic = img.crop((s + w * i, t, s + w * (i + 1), h)) 9 cut_img.append(pic) 10 return cut_img
4 图片分类
这个步骤的目的就是人为的给训练集打上标签。 将相同的数字放在同一个文件夹下面
5 训练模型
训练模型很简单,因为直接就是使用libsvm库,我们只需要按照数据格式生成一些特征值即可
1 import os 2 from PIL import * 3 from PIL import Image 4 import numpy as np 5 from libsvm.python.svmutil import * 6 from libsvm.python.svm import * 7 8 9 address = 'D:\python\验证码-sort\\' 10 f = open('train.txt', 'w') 11 12 def get_feature(dir, file): 13 f.write(dir) 14 im = Image.open(address + dir +'\\' + file) 15 imarr = np.array(im) 16 height, width = imarr.shape 17 for i in range(height): 18 for j in range(width): 19 gray = imarr[i,j] 20 if gray <= 150: 21 imarr[i, j] = 0 22 else: 23 imarr[i, j] = 255 24 im = Image.fromarray(imarr) 25 count = 0 26 width, height = im.size 27 for i in range(height): 28 c = 0 29 for j in range(width): 30 if im.getpixel((j, i)) == 0: c += 1 31 f.write(' %d:%d'%(count, c)) 32 count += 1 33 for i in range(width): 34 c = 0 35 for j in range(height): 36 if im.getpixel((i, j)) == 0: c += 1 37 f.write(' %d:%d'%(count, c)) 38 count += 1 39 f.write('\n') 40 41 def train_svm_model(): 42 y, x = svm_read_problem('train.txt') 43 model = svm_train(y, x) 44 svm_save_model('model_file', model) 45 46 if __name__ == '__main__': 47 dirs = os.listdir(address) 48 for dir in dirs: 49 files = os.listdir(address + dir) 50 for file in files: 51 get_feature(dir, file) 52 train_svm_model()
6 测试模型
用测试数据对模型进行测试
1 from libsvm.python.svmutil import * 2 from libsvm.python.svm import * 3 import image_slove 4 5 if __name__ == '__main__': 6 model = svm_load_model('model_file') 7 yt, xt = svm_read_problem('test.txt') 8 p_label, p_acc, p_val = svm_predict(yt, xt, model)
转载于:https://www.cnblogs.com/zcjcsl/p/9369263.html
基于SVM的python简单实现验证码识别相关推荐
- 基于SVM技术的手写数字识别
老师常说,在人工智能未发展起来之前,SVM技术是一统江湖的,SVM常常听到,但究竟是什么呢?最近研究了一下基于SVM技术的手写数字识别.你没有看错,又是手写数字识别,就是喜欢这个手写数字识别,没办法( ...
- 使用Tensorflow构建和训练自己的CNN来做简单的验证码识别
Tensorflow是目前最流行的深度学习框架,我们可以用它来搭建自己的卷积神经网络并训练自己的分类器,本文介绍怎样使用Tensorflow构建自己的CNN,怎样训练用于简单的验证码识别的分类器.本文 ...
- python简单的人脸识别系统(PCA+逻辑回归)
python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...
- Python简单实现人脸识别检测, 对照片进行评分
大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮. [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests ...
- python免费的验证码识别OCR库
python免费的验证码识别OCR库 免费的验证码识别OCR项目已经打包成pypi包 1, 可以通过以下命令安装 pip install ddddocr -i https://pypi.org/sim ...
- 字符识别Python实现 图片验证码识别
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- 基于深度学习的图标型验证码识别系统
深度学习应用于图像处理领域应该说有很长一段时间了,相关的研究成果也有很多的积累了,从项目和实践入手是我觉得的最好最快速有效的学习手段,当下很多主流的验证码识别系统大都是基于神经网络设计开发而来的,在处 ...
- 一个简单的验证码识别教程
一.起因 前几天准备做一个自动计算gpa的网站,学校的教务登录时候需要输入验证码.本来想把验证码图片显示出来让用户手动输入,但是搞了半天没搞定...所以决定自己写一个识别的程序. 直接说结果吧,最终写 ...
- 使用TensorFlow 来实现一个简单的验证码识别过程
本文我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 1.验 ...
最新文章
- C++ stack容器
- [Luogu] 聪聪可可
- 【数据结构与算法-1】常用数据结构
- Django笔记---数据库设计
- DBL_EPSILON和FLT_EPSILON的用法
- CAD2008详细安装教程和激活失败方法
- 左程云算法Day6 图
- C# 绘制CIE1931彩色马蹄形图大家自己斟酌
- 基于YOLOv7的车辆装载负荷&车牌检测系统(源码&教程)
- linux如何删除多余引导
- Android 强大的图片加载缓存— Glide
- 组内相关系数intraclass correlation(ICC)
- SpringBoot整合Apollo配置中心快速使用
- 雅安职业技术学院工业机器人专业_雅安职业技术学院有哪些专业_2020年学费标准_中职中专网...
- java 开发设计 小游戏 英雄 怪物 武器 关键代码
- 2018以太坊技术及应用大会圆满成功,V神等24位大咖观点集锦
- 【学习笔记】群论入门
- 短视频运营:如何提高自己的剪辑技巧?
- Dijkstra(迪杰特斯拉)算法(极简版)
- 怎样选择正确的MacBook充电器?如何才能延长电池寿命?