下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Python用KNN算法实现验证码识别 作为一名爬虫爱好者,把互联网作为数据库的同时总会遇到很多坑,其中一个就是验证码,设置验证码一大理由就是为了限制你乱爬,不过对于很多简单的验证码,破解还是相当容易的。比如类似下面这种。最简单的办法是直接用pytesseract库,具体方法请自行搜索。当然如果不想用它,自己来写一个识别算法也并不难。可以用机器学习里面比较基础的KNN算法。先来介绍一下这个KNN算法,他全称叫K最近邻(kNN,k-NearestNeighbor),所谓K最近邻,就是离谁最近,是谁的可能性就更大。什么意思,举个例子就明白了。我现在已经统计了一组手机数据,方便起见,假设只有高端机和
2、低端机两个分类,如下:此时如果有一个新手机T(1500元,15小时),该怎么判断是什么手机呢?我把它们放到同一个坐标系中去比较一下。它并不能很好地跟已知数据完全重合,但不要紧,可以算一下它与其他手机的距离。经过计算,与T的距离D就是这么简单。当然了,这里面只是举个例子所以数据量比较小,当数据量足够大时,比如有200台低端机和300台高端机,选出最接近的200个数据,其中哪种机器多就归到哪种,得出的结论就会比较准确。这就是最简单的KNN算法,离哪个近,就把它归类为哪个种类。这是二维,还可以再加个“像素”属性,变为三维,仍然可以求最近距离。拓展到N个属性也是一样的道理。基本原理就是这样,下面来介绍
3、如何识别验证码,以下代码基于Python3还是这张验证码,我们把它放大一点可以看到,其实他就是一个一个的像素点构成的。里面颜色太多不好操作,首先把这张图变成黑白的from PIL import Image#引入Image类im = Image.open(图片路径)#打开图片im=im.convert(1)#原来图片是彩色的,这里把图片转换成模式1,即黑白的im.show()#显示图片于是我们就得到了这么一张图可以把每个点的颜色转变成0和1,并打印出来for i in range(im.size1): temp= for j in range(im.size0): pos=(j,i) col=i
4、m.getpixel(pos)#获取某坐标的点的颜色,黑色为0,白色为255,为了显示规程,把它转变成1了 if col=255: col=1 temp.append(col) print(temp)可以从打印出来的字符中隐约看到这几个数字然后处理一下这串字符,把不连续的点,即上下左右都没有同色的点去掉im2 = im for i in range(im.size1): for j in range(im.size0): #pos=(j,i) #print(pos) if i=0 or j=0 or i=im.size1-1 or j=im.size0-1: im2.putpixel(j,i)
5、,255)#图片最外面一周都换成白点 elif im.getpixel(j,i)!=im.getpixel(j-1,i) and im.getpixel(j,i)!=im.getpixel(j+1,i) and im.getpixel(j,i-1)!=im.getpixel(j,i) and im.getpixel(j,i+1)!=im.getpixel(j,i): im2.putpixel(j,i),255)#不连续点也都换成白点然后开始切割图片inletter = False foundletter = False start = 0 end = 0 letters = #用来记录每个数字
6、的起始位置 for x in range(im2.size0): for y in range(im2.size1): pix = im2.getpixel(x, y) if pix != 255: inletter = True#如果不是白色,这说明已经开始接触到数字了 if foundletter = False and inletter = True: foundletter = True start = x#数字的起始坐标 if foundletter = True and inletter = False: foundletter = False end = x-1#数字的结束位置
7、letters.append(start, end) inletter = Falseletters的值为(7,14), (20, 27), (33, 40), (46, 54),就是每个数字的起始X坐标,同样道理获得每个数字的起始Y坐标,然后切割开来。region = (起始X值,起始Y值,结束X值,结束Y值) #裁切图片 im3 = im2.crop(region)#im3就是这个区域内的图形,也就是提取的数字 #im3.show()于是得出了四个切割好的数字这个时候怎么做呢,我们把第一个数字9用0和1来打印看看。1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0,0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1,1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1,1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0,0, 1, 1, 0, 0, 1, 0, 1总大小7*14,总共98个点 到这里差不多就出来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 皮肌炎护理诊断及措施
- 2026中国自动驾驶技术产业链供需关系与市场竞争格局分析及投资布局规划报告
- 2026工业气体市场供需平衡及价格波动影响因素报告
- 2026自动驾驶测试场建设运营行业当前市场分析评估投资规划发展建议报告
- 2026共享经济商业模式发展分析及市场前景与投资机会研究报告
- 2026全国安全员B证-项目负责人(官方)-第一章安全生产管理人员职业道德参考试题库历年考点答案详解
- 2026全国一级注册建筑师资格考试(建筑技术设计)历年参考题库含答案详解
- 2026年北师大版数学五年级下册第二单元拔高模拟试卷及答案
- 2026住院医师规培-甘肃-甘肃住院医师规培(放射科)历年参考题库含答案详解
- 2026住院医师规培-浙江-浙江住院医师规培(内科)历年参考题库含答案详解
- 邮轮餐饮服务双语实训指导-西餐宴会服务常见问题
- 学堂在线 批判性思维-方法和实践 章节测试答案
- NBT高原用变压器现场绝缘干燥第1部分:低频短路加热法
- 脊柱解剖课件教学
- 村级水管员业务知识培训课件
- 电机学教案本
- 跳高技术动作要领
- 小学生课间游戏课件
- tb-10314-2021《邻近铁路营业线施工安全监测技术规程》内容解析
- 护林员考试试题及答案
- 煤矿20版标准化-瓦斯参数测定管理制度
评论
0/150
提交评论