首页 > 编程知识 正文

python验证码识别模块,python验证码识别算法

时间:2023-05-06 01:02:10 阅读:151710 作者:1067

动态生成代码图像

要模拟验证码的生成,首先生成随机字符并对字符进行模糊处理。 本节介绍Python提供的Pillow模块。

Pillow

pil:Python图像库,python的图像处理标准库,功能强大。

PIL是第三方库,使用前必须安装。 具体命令如下。 (如果安装了Anaconda,则可以跳过此步骤。 )

$ pip install pillow

首先,简单说明Pillow的功能。

操作示意图

缩放图像是Pillow的功能之一。 例如以下所示。

来自pil import image

#打开图像,注意路径

img=image.open(pitbull.JPEG ) )。

#获取图像大小

weight,height=img.size

print ()原始图像大小((x ) ).format (height,height ) )

#缩放50%

img.thumbnail((weight//2,height//2) )

print ()调整后的图像大小((x ) ).format (height//2,height//2) )

#保存缩放的图像

img.save('thumbnail.jpg ',' jpeg ' ) )。

Pillow还提供了其他功能,如旋转、剪切、滤镜、输出字符和调色板。

图像过滤器

尝试模糊图像的处理。

from PIL import Image,ImageFilter

#打开图像文件,注意路径

img=image.open(pitbull.JPEG ) )。

#应用模糊滤镜

img2=img.filter (image filter.blur ) )。

img2.save('blur.jpg ',' jpeg ' ) )。

ImageFilter是Python提供的图像滤镜,ImageFilter.BLUR是模糊滤镜。

上述代码的具体效果如下。

ImageDraw

此外,Pillow的ImageDraw提供了几种可以直接绘制的列绘制方法。 尝试使用以下方法生成字符认证码图像:

#-* -编码: utf-8-* -

“”'

@ file : generate _ random _ code.py

@ time :2020/01/3120336032336010

@Author:大梦三千秋

@Contact: yiluolion@126.com

“”'

# Put the import lib here

from random import randint,choice

from PIL import Image,ImageDraw,ImageFont,ImageFilter

defRND_chr(chr_set ) :

“”获取随机字符

Args:

由chr_set:创建的字符集

Returns:

返回随机字符

“”'

returnchoice(chr_set ) )

def rnd_bg_color () :

“”获取随机像素值并填充背景

Returns:

返回随机像素值,然后返回元组类型

“”'

返回(randint (97,255 )、randint (97,255 )、randint (97,255 ) )

def rnd_chr_color () :

获取“”随机像素并填充输出字符

Returns:

返回随机像素值,然后返回元组类型

“”'

#与画板的填充颜色有一定的偏差,避免完全覆盖

return (randint (32,96 )、randint (32,96 )、randint (32,96 ) )

戴尔主(:

#生成字符集

chr_set=['0','1','2','3','4','5','6','7','8','9']

foriinrange (65,91 ) :

CHR_set.append(CHR(I ) )

forjinrange (97,123 ) :

CHR_set.append(CHR(j ) )

#print(chr_set ) )为

#定义画板大小250 x 50

width=60 * 5

height=60

Image对象,创建空白画板

image=image.new('RGB ',) width,height ),(255,255 ) )

创建Draw对象

draw=ImageDraw.Draw(image )

创建字体对象

font=image font.truetype ('./consola.TTF ',36 ) )。

#填充画板

forxinrange(width ) :

foryinrange(Height ) :

Draw.point () x,y ),fill=rnd_bg_color ) )

#文本填充

forninrange(5) :

draw.text () 60 * n25,12 )、rnd _ chr (chr _ set )、fill=rnd_chr_color )、font=font ) ) ) ) )

#模糊保存图像内容

image=image.filter (image filter.blur )。

image.save('./random_code.jpg ',' jpeg ' )

if __name__=='__main__':

main () )

代码的具体实现过程是用随机颜色填充背景,生成文字,最后对图像进行模糊。 具体效果如下

执行代码时,可能会出现以下错误:

io error : cannot开放资源

这个问题是因为PIL不能确定字体文件的位置,可以考虑直接提供绝对的位置。

font=image font.truetype (/absolute/path/font.TTF ),36 ) ) )。

本文提到的Pillow只是简单功能的一部分。 要继续了解PIL的强大功能,请参考Pillow的官方文档。

https://pillow.readthedocs.org/

以上是本文的全部内容,希望对大家的学习有帮助。 另外,希望大家多多支持云海天教程。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。