Python3.5 + sklearn利用SVM自动识别字母验证码方法示例


Posted in Python onMay 10, 2019

前言

最近正在研究人工智能,为了加深对算法的理解,决定写个自动设别验证码的程序。看了看网上的demo,大部分都是python2的写法,而且验证码的识别都是用的数字做例子,那我就写个基于python3字母识别的程序,不过一路写下来碰到不少坑,大家感兴趣的话可以慢慢看。

图片识别有几个比较大的步骤是必须完成的:

1、有大量的验证码图片作为样本

2、图片要进行处理  流程是:灰度化==》二值化==》字符切割==》识别分类

3、图像识别要提取特征值,然后把图片二值化的数据当做样本做训练,最后基于样本完成对新验证码的识别

一、大量验证码准备

因为要写字母识别,所以需要大量的字母验证码,正好之前做过某电商的项目,印象中是纯字母的查了下果然是的所以就用那个网站作为例子了。

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

获取验证码方法很简单,找到验证码动态生成的地址,

然后调用python的urllib.request获得图片然后保存就好了

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

二、图片的灰度化和二值化

其实为了增强识别率,我们将彩色的图片灰度化,

这样就变成了黑白两色,黑的是255白的是0,这样更容易让机器来识别。

灰度化和二值化之前、后的效果图

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

三、图片的分割

经过观察验证码可以发现,验证码是4位的字母,

同时验证码直接是有空白分隔的(后面的验证码有黏连的单独讲)

这里使用垂直投影法,根据投影进行图片的切割。这个算法讲起来太复杂,看代码吧。。。

效果如下,反正就是切成了4个图片

 Python3.5 + sklearn利用SVM自动识别字母验证码方法示例 Python3.5 + sklearn利用SVM自动识别字母验证码方法示例 Python3.5 + sklearn利用SVM自动识别字母验证码方法示例 Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

四、识别分类

这里因为图片太多了,要对每个图片分26个字母的哪一个太麻烦,所以借用Google的tesseract这个OCR的软件,用它来帮我识别下图片是哪个字母(当然它识别的成功率不高,不然也不用人工智能了),然后识别错误的我再手动分类。

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

经过ocr识别和人工分类后,我的temp目录下就变成了这样的,每个目录下都是正确的字母图片

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

五、提取特征值

将字母的文件夹图片取出,提取特征值然后存储到文本文件里

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

六、机器训练

这里使用sklearn.svm这个支持向量机的算法,来对数据进行分类。

SVM的算法是啥,可以看看知乎大神的讲解https://www.zhihu.com/question/21094489 ,

通过fit进行训练后,将训练的结果保存到pkl文件里,其实里面都是0和1的特征值

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

七、最后的验证就很简单了

找个验证码图片,调用之前的方法,变成二值化的数据,然后用SVM进行识别,就能得到正确的结果了

八、滴水算法(解决黏连问题)

这个验证码也不是完全都有空格分割好的,可能是长这样的,字母直接黏在一起了

Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

这样的字母为了分割出来,就要用滴水算法,模拟水滴重力下落的过程,自动切分图片。

可以看我的water.py文件里面是详细的算法。

讲讲碰到的坑

1、python3不能用opencv了,尤其是cv2.cv方法只是python2用的,不用他换个python写法一样可以实现

2、原始图片有蓝色边,刚开始老识别错误,后来发现问题后,要先进行切割,保证只有字母是有颜色的,其它区域是白色的。

这个是cutImg方法的作用

3、使用Google的ocr时,使用了python的pytesseract,这个要先在电脑安装Tesseract-OCR,然后要在程序里指定路径才行,

不然会报错误的。pytesseract.pytesseract.tesseract_cmd = 'E:/Program Files (x86)/Tesseract-OCR/tesseract'

4、pytesseract.image_to_string(cur_img, config='-psm 7 outputbase letters')

这个letters是我自己创建的,位置在E:\Program Files (x86)\Tesseract-OCR\tessdata\configs 这里的letters是用来

约束识别范围的,比如我设置tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz 这就表示只识别字母,这样

就会把1,0之类的变成l和o了

最后附上github的源码地址 https://github.com/zjy090/verifyCode  (本地下载)

下次研究遗传算法GA的实现等写好了也写个demo分享给大家

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python计算三角函数之asin()方法的使用
May 15 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Django小白教程之Django用户注册与登录
Apr 22 Python
详解Python中类的定义与使用
Apr 11 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
python使用itchat实现手机控制电脑
Feb 22 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
python 将Excel转Word的示例
Mar 02 Python
python解决12306登录验证码的实现
Apr 18 Python
Python类方法总结讲解
Jul 26 Python
python lxml中etree的简单应用
May 10 #Python
基于Python的PIL库学习详解
May 10 #Python
python导入坐标点的具体操作
May 10 #Python
python简单验证码识别的实现方法
May 10 #Python
eclipse创建python项目步骤详解
May 10 #Python
Python实现字符型图片验证码识别完整过程详解
May 10 #Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 #Python
You might like
延长phpmyadmin登录时间的方法
2011/02/06 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
php源码的安装方法和实例
2019/09/26 PHP
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
浅谈js中的闭包
2015/03/16 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
djang常用查询SQL语句的使用代码
2019/02/15 Python
vue常用指令代码实例总结
2020/03/16 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
上海中网科技笔试题
2012/02/19 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
高三家长寄语
2014/04/03 职场文书
节约用水倡议书
2014/04/16 职场文书
煤矿安全承诺书
2014/05/22 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python