利用Python突破验证码限制,啃完999页Python面试高频宝典

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

#-- coding:utf8 --

from PIL import Image

im = Image.open(“captcha.gif”)

im = im.convert(“P”)

im2 = Image.new(“P”,im.size,255)

for x in range(im.size[1]):

for y in range(im.size[0]):

pix = im.getpixel((y,x))

if pix == 220 or pix == 227: # these are the numbers to get

im2.putpixel((y,x),0)

im2.show()

得到的结果:

提取单个字符图片


接下来的工作是要得到单个字符的像素集合,由于例子比较简单,我们对其进行纵向切割:

inletter = False

foundletter=False

start = 0

end = 0

letters = []

for y in range(im2.size[0]):

for x in range(im2.size[1]):

pix = im2.getpixel((y,x))

if pix != 255:

inletter = True

if foundletter == False and inletter == True:

foundletter = True

start = y

if foundletter == True and inletter == False:

foundletter = False

end = y

letters.append((start,end))

inletter=False

print letters

#在学习Python的过程中,往往因为没有资料或者没人指导从而导致自己不想学下去了,因此我特意准备了个群 592539176 ,群里有大量的PDF书籍、教程都给大家免费使用!不管是学习到哪个阶段的小伙伴都可以获取到自己相对应的资料!

输出:

[(6, 14), (15, 25), (27, 35), (37, 46), (48, 56), (57, 67)]

得到每个字符开始和结束的列序号。

import hashlib

import time

count = 0

for letter in letters:

m = hashlib.md5()

im3 = im2.crop(( letter[0] , 0, letter[1],im2.size[1] ))

m.update(“%s%s”%(time.time(),count))

im3.save(“./%s.gif”%(m.hexdigest()))

count += 1

(接上面的代码)

对图片进行切割,得到每个字符所在的那部分图片。

AI 与向量空间图像识别


在这里我们使用向量空间搜索引擎来做字符识别,它具有很多优点:

  • 不需要大量的训练迭代

  • 不会训练过度

  • 你可以随时加入/移除错误的数据查看效果

  • 很容易理解和编写成代码

  • 提供分级结果,你可以查看最接近的多个匹配

  • 对于无法识别的东西只要加入到搜索引擎中,马上就能识别了。

当然它也有缺点,例如分类的速度比神经网络慢很多,它不能找到自己的方法解决问题等等。

向量空间搜索引擎名字听上去很高大上其实原理很简单。拿文章里的例子来说:

你有 3 篇文档,我们要怎么计算它们之间的相似度呢?2 篇文档所使用的相同的单词越多,那这两篇文章就越相似!但是这单词太多怎么办,就由我们来选择几个关键单词,选择的单词又被称作特征,每一个特征就好比空间中的一个维度(x,y,z 等),一组特征就是一个矢量,每一个文档我们都能得到这么一个矢量,只要计算矢量之间的夹角就能得到文章的相似度了。

用 Python 类实现向量空间:

import math

class VectorCompare:

#计算矢量大小

def magnitude(self,concordance):

total = 0

for word,count in concordance.iteritems():

total += count ** 2

return math.sqrt(total)

#计算矢量之间的 cos 值

def relation(self,concordance1, concordance2):

relevance = 0

topvalue = 0

for word, count in concordance1.iteritems():

if concordance2.has_key(word):

topvalue += count * concordance2[word]

return topvalue / (self.magnitude(concordance1) * self.magnitude(concordance2))

它会比较两个 python 字典类型并输出它们的相似度(用 0~1 的数字表示)

将之前的内容放在一起


还有取大量验证码提取单个字符图片作为训练集合的工作,但只要是有好好读上文的同学就一定知道这些工作要怎么做,在这里就略去了。可以直接使用提供的训练集合来进行下面的操作。

iconset目录下放的是我们的训练集。

最后追加的内容:

#将图片转换为矢量

def buildvector(im):

d1 = {}

count = 0

for i in im.getdata():

d1[count] = i

count += 1

return d1

v = VectorCompare()

iconset = [‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’,‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’,‘k’,‘l’,‘m’,‘n’,‘o’,‘p’,‘q’,‘r’,‘s’,‘t’,‘u’,‘v’,‘w’,‘x’,‘y’,‘z’]

#加载训练集

imageset = []

for letter in iconset:

for img in os.listdir(‘./iconset/%s/’%(letter)):

temp = []

if img != “Thumbs.db” and img != “.DS_Store”:

temp.append(buildvector(Image.open(“./iconset/%s/%s”%(letter,img))))

imageset.append({letter:temp})

count = 0

#对验证码图片进行切割

for letter in letters:

m = hashlib.md5()

im3 = im2.crop(( letter[0] , 0, letter[1],im2.size[1] ))

guess = []

#将切割得到的验证码小片段与每个训练片段进行比较

for image in imageset:

for x,y in image.iteritems():

if len(y) != 0:

guess.append( ( v.relation(y[0],buildvector(im3)),x) )

guess.sort(reverse=True)

print “”,guess[0]

count += 1

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
append( ( v.relation(y[0],buildvector(im3)),x) )

guess.sort(reverse=True)

print “”,guess[0]

count += 1

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-HKESEkgd-1713471727799)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值