验证码生成并保存标签到CSV

全国高校计算机能力挑战赛验证码识别
先下载要生成验证码的字体或者用电脑自带的字体,默认生成10张,根据需求增加干扰线、调整背景颜色或者字体颜色。

import random
import string
import sys
import math
from PIL import Image,ImageDraw,ImageFont,ImageFilter

#字体的位置,不同版本的系统会有不同
font_path = 'C:/Windows/Fonts/georgiaz.ttf'

#生成几位数的验证码
number = 4
#生成验证码图片的高度和宽度
size = (120,40)
#背景颜色,默认为白色
bgcolor = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
#字体颜色,默认为蓝色
fontcolor = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
#干扰线颜色。默认为红色
linecolor = (255,192,203)
#是否要加入干扰线
draw_line = True
#加入干扰线条数
line_number = 4
#加入干扰点
point_number = 100

source = ['0','1','2','3','4','5','6','7','8','9','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','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']
import sys
import csv
f = open("D:/1.csv",'w',encoding='utf-8',newline='')
csv_writer = csv.writer(f)
csv_writer.writerow(["ID","label"])

#用来随机生成一个字符串
def gene_text():
    return ''.join(random.sample(source,number))#number是生成验证码的位数
#用来绘制干扰线
def gene_line(draw,width,height):
    begin = (random.randint(0, width), random.randint(0, height))
    end = (random.randint(0, width), random.randint(0, height))
    draw.line([begin, end], fill = (linecolor))

def gene_point(draw,width,height):
    begin = (random.randint(0, width), random.randint(0, height))
    end = (random.randint(0, width), random.randint(0, height))
    draw.point([begin, end], fill = (random.randint(0,255),random.randint(0,255),random.randint(0,255)))

#生成验证码
def gene_code(t):
    width,height = size #宽和高
    #背景颜色,默认为白色
    bgcolor = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
#字体颜色,默认为蓝色
    fontcolor = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
#干扰线颜色。默认为红色
    linecolor = (255,192,203)
    image = Image.new('RGB',(width,height),bgcolor) #创建图片
    font = ImageFont.truetype(font_path,35) #验证码的字体
    draw = ImageDraw.Draw(image)  #创建画笔
    text = gene_text() #生成字符串
    font_width, font_height = font.getsize(text)
    draw.text(((width - font_width) / number, (height - font_height) / number),text,\
            font= font,fill=fontcolor) #填充字符串
    if draw_line:
        for i in range(line_number):
            gene_line(draw,width,height)
    for i in range(point_number):
        gene_point(draw, width, height)
    # image = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR)  #创建扭曲
    #image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR)  #创建扭曲
    #image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #滤镜,边界加强
    csv_writer.writerow(['./train_data/'+str(t)+'.jpg',text])
    image.save('D:/train_data/' + str(t) +'.jpg') #保存验证码图片
count = 10
if __name__ == "__main__":
    for i in range(count):
        gene_code(i)
    print('finish')

效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值