前言
最近正在研究人工智能,为了加深对算法的理解,决定写个自动设别验证码的程序。看了看网上的demo,大部分都是python2的写法,而且验证码的识别都是用的数字做例子,那我就写个基于python3字母识别的程序,不过一路写下来碰到不少坑,大家感兴趣的话可以慢慢看。
图片识别有几个比较大的步骤是必须完成的:
1、有大量的验证码图片作为样本
2、图片要进行处理 流程是:灰度化==》二值化==》字符切割==》识别分类
3、图像识别要提取特征值,然后把图片二值化的数据当做样本做训练,最后基于样本完成对新验证码的识别
一、大量验证码准备
因为要写字母识别,所以需要大量的字母验证码,正好之前做过某电商的项目,印象中是纯字母的查了下果然是的所以就用那个网站作为例子了。
获取验证码方法很简单,找到验证码动态生成的地址,
然后调用python的urllib.request获得图片然后保存就好了
二、图片的灰度化和二值化
其实为了增强识别率,我们将彩色的图片灰度化,
这样就变成了黑白两色,黑的是255白的是0,这样更容易让机器来识别。
灰度化和二值化之前、后的效果图
三、图片的分割
经过观察验证码可以发现,验证码是4位的字母,
同时验证码直接是有空白分隔的(后面的验证码有黏连的单独讲)
这里使用垂直投影法,根据投影进行图片的切割。这个算法讲起来太复杂,看代码吧。。。
效果如下,反正就是切成了4个图片
四、识别分类
这里因为图片太多了,要对每个图片分26个字母的哪一个太麻烦,所以借用Google的tesseract这个OCR的软件,用它来帮我识别下图片是哪个字母(当然它识别的成功率不高,不然也不用人工智能了),然后识别错误的我再手动分类。
经过ocr识别和人工分类后,我的temp目录下就变成了这样的,每个目录下都是正确的字母图片
五、提取特征值
将字母的文件夹图片取出,提取特征值然后存储到文本文件里
六、机器训练
这里使用sklearn.svm这个支持向量机的算法,来对数据进行分类。
SVM的算法是啥,可以看看知乎大神的讲解https:///zjy090/verifyCode(本地下载)
下次研究遗传算法GA的实现等写好了也写个demo分享给大家
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。