1. 程式人生 > >Python 新手實戰之機器學習實現簡單驗證碼識別(一):用PIL簡單繪製驗證碼

Python 新手實戰之機器學習實現簡單驗證碼識別(一):用PIL簡單繪製驗證碼

驗證碼生成

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

def draw():
    #隨機生成背景顏色 (RGB顏色範圍為0-255,越高越接近白色),背景顏色不宜過深,所以選擇從200到255
    bkcolor = (random.randrange(200, 255), random.randrange(200, 255), random.randrange(200, 255))
    #生成驗證碼的寬度
    width = 200  
    #生成驗證碼的高度
    height = 60   
    #驗證碼備選字型檔,增加了數字出現的頻率,並且去掉了容易混淆的O,0
strlist = 'QWERTYUIPASDFGHJKLZXCVBNM123456789123456789123456789' #建立一張新圖片 im = Image.new('RGB', (width, height), bkcolor) #初始化一個畫筆 Draw = ImageDraw.Draw(im) #從字型庫中選出所有字型的列表 fonts = os.listdir('./font') #初始化字元 st = '' #for迴圈隨機生成6個字元 for i in range(6): #隨機選擇一個字型
ran_font = random.choice(fonts) #生成字型路徑 font_file = os.path.join('./font', ran_font) #讀取字型 font = ImageFont.truetype(font_file, size=30) #生成字型顏色,不宜過淺 fontcolor = (random.randrange (0, 100), random.randrange(0, 100), random.randrange(0, 100)) #從字元庫中隨機選出一個字元
word = strlist[random.randrange(len(strlist))] st += word #繪製字元,間隔根據生成情況調整 Draw.text((10 + i * 30, 15), a, fontcolor, font) #迴圈生成噪點 for i in range(random.randrange(400, 800)): #噪點顏色 fill = (random.randrange(100, 255), random.randrange(100, 255), random.randrange(100, 255)) #繪製噪點 Draw.point((random.randrange(100), random.randrange(30)), fill) #返回圖片與字串 return im, st def createimage(num): for i in range(num): im, st = draw() #儲存圖片 im.save('./image/image-%s.jpg' % st) if __name__ == '__main__': createimage(100)

生成以後的效果
這裡寫圖片描述