机器学习实战案例—验证码(CAPTCHA)识别基于Logistic

基于逻辑回归(Logistic)图像处理实现数字验证码的识别

一、准备数据(制作验证码)

通过在画布获取的随机数字(随机颜色),在添加干扰元素(噪点,噪线)

from PIL import Image
from PIL import ImageDraw,ImageFont
import random

def getRandomColor():
    """获取一个随机颜色RGB格式的(r,g,b)
        如果获取到白色将其传为黑色"""
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    if (r, g, b) == (0, 0, 0):
        (r, g, b) = (255, 255, 255)
    return (r, g, b)

def getRandmStr():
    """获取一个随机数字且每个数字颜色也是随机的"""
    random_num =str(random.randint(0,9))
    return random_num

def generate_captcha():
    #获取一个Image对象,参数分别是RGB模式,宽150,高50,背景为白色
    image =Image.new('RGB',(150,50),(255,255,255))
    #获取一个画笔对象,将图片对象传过去
    draw = ImageDraw.Draw(image)
    #获取一个font字体对象参数是ttf的字体文件的目录,以及字体的大小
    font = ImageFont.truetype("LiberationSans-Bold.ttf",size=32)
    label =""
    for i in range(5):
        random_char =getRandmStr()
        label += random_char
        #在图片上写东西,参数是:定位,字符串,颜色,字体
        draw.text((10+i*30,0),random_char,getRandomColor(),font=font)
    ##噪点噪线
    width =150
    height =30
    #画线
    for i in range(4):
        x1= random.randint(0,width)
        x2= random.randint(0,width)
        y1 =random.randint(0,height)
        y2 =random.randint(0,height)
        draw.line((x1,y1,x2,y2),fill=(0,0,0))

    # 画点
    for i in range(5):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=getRandomColor())
        x = random.randint(0, width)
        y = random.randint(0, height)
        #arc 弧线
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=(0, 0, 0))
    #保存到硬盘,名为test.png格式的图片
    image.save(open(''.join(['captcha_images/',label,'.png']),'wb'),'png')

if __name__ == '__main__':
    for i in range(150):
        generate_captcha()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值