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

图片分类

这个步骤的目的就是人为的给训练集打上标签。 将相同的数字放在同一个文件夹下面

训练模型

训练模型很简单,因为直接就是使用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()

测试模型

用测试数据对模型进行测试

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简单实现验证码识别相关推荐

  1. 基于SVM技术的手写数字识别

    老师常说,在人工智能未发展起来之前,SVM技术是一统江湖的,SVM常常听到,但究竟是什么呢?最近研究了一下基于SVM技术的手写数字识别.你没有看错,又是手写数字识别,就是喜欢这个手写数字识别,没办法( ...

  2. 使用Tensorflow构建和训练自己的CNN来做简单的验证码识别

    Tensorflow是目前最流行的深度学习框架,我们可以用它来搭建自己的卷积神经网络并训练自己的分类器,本文介绍怎样使用Tensorflow构建自己的CNN,怎样训练用于简单的验证码识别的分类器.本文 ...

  3. python简单的人脸识别系统(PCA+逻辑回归)

    python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...

  4. Python简单实现人脸识别检测, 对照片进行评分

    大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮. [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests ...

  5. python免费的验证码识别OCR库

    python免费的验证码识别OCR库 免费的验证码识别OCR项目已经打包成pypi包 1, 可以通过以下命令安装 pip install ddddocr -i https://pypi.org/sim ...

  6. 字符识别Python实现 图片验证码识别

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  7. 基于深度学习的图标型验证码识别系统

    深度学习应用于图像处理领域应该说有很长一段时间了,相关的研究成果也有很多的积累了,从项目和实践入手是我觉得的最好最快速有效的学习手段,当下很多主流的验证码识别系统大都是基于神经网络设计开发而来的,在处 ...

  8. 一个简单的验证码识别教程

    一.起因 前几天准备做一个自动计算gpa的网站,学校的教务登录时候需要输入验证码.本来想把验证码图片显示出来让用户手动输入,但是搞了半天没搞定...所以决定自己写一个识别的程序. 直接说结果吧,最终写 ...

  9. 使用TensorFlow 来实现一个简单的验证码识别过程

    本文我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 1.验 ...

最新文章

  1. C++ stack容器
  2. [Luogu] 聪聪可可
  3. 【数据结构与算法-1】常用数据结构
  4. Django笔记---数据库设计
  5. DBL_EPSILON和FLT_EPSILON的用法
  6. CAD2008详细安装教程和激活失败方法
  7. 左程云算法Day6 图
  8. C# 绘制CIE1931彩色马蹄形图大家自己斟酌
  9. 基于YOLOv7的车辆装载负荷&车牌检测系统(源码&教程)
  10. linux如何删除多余引导
  11. Android 强大的图片加载缓存— Glide
  12. 组内相关系数intraclass correlation(ICC)
  13. SpringBoot整合Apollo配置中心快速使用
  14. 雅安职业技术学院工业机器人专业_雅安职业技术学院有哪些专业_2020年学费标准_中职中专网...
  15. java 开发设计 小游戏 英雄 怪物 武器 关键代码
  16. 2018以太坊技术及应用大会圆满成功,V神等24位大咖观点集锦
  17. 【学习笔记】群论入门
  18. 短视频运营:如何提高自己的剪辑技巧?
  19. Dijkstra(迪杰特斯拉)算法(极简版)
  20. 怎样选择正确的MacBook充电器?如何才能延长电池寿命?

热门文章

  1. 11个高效的VS调试技巧
  2. NLP《词汇表示方法(二)词嵌入表示》
  3. 漫步最优化九——泰勒级数
  4. php环境模拟stphp_用php模拟做服务端侦听端口
  5. docker从入门到实践第三版pdf_测开日常积累--Docker入门到实践
  6. RecordMyDesktop安装与使用
  7. Shell脚本基本规则
  8. 数据竞赛入门-金融风控(贷款违约预测)三、特征工程
  9. 高等数学基础 - 高等数学主要内容
  10. [gstreamer] [002] porting from 0.10 to 1.0 knew how