项目-验证码识别
首先,生成訓練集,用PIL庫生成150張驗證碼圖片
對驗證碼進行處理,首先將圖片的RGB值(0~255,0~255,0~255)轉為灰度值,再對灰度值二值化,得到像素點只有黑白(0,1)的圖片,對該圖片降噪,切分,得到訓練集
from PIL import Image import numpy as np import matplotlib.pyplot as plt import osdef binarizaion(path):img = Image.open(path)img_gray = img.convert('L')img_gray = np.array(img_gray)w, h = img_gray.shapefor x in range(w):for y in range(h):gray = img_gray[x, y]if gray <= 220:img_gray[x, y] = 0else:img_gray[x, y] = 1plt.figure('')plt.imshow(img_gray, cmap='gray')plt.axis('off')plt.show()return img_graydef noiseReduction(img_gray, label):height, width = img_gray.shapefor x in range(height):for y in range(width):cnt = 0# 白色的點不用管if img_gray[x, y] == 1:continueelse:try:if img_gray[x-1, y-1] == 0:cnt += 1except:passtry:if img_gray[x-1, y] == 0:cnt += 1except:passtry:if img_gray[x-1, y+1] == 0:cnt += 1except:passtry:if img_gray[x, y-1] == 0:cnt += 1except:passtry:if img_gray[x, y+1] == 0:cnt += 1except:passtry:if img_gray[x+1, y-1] == 0:cnt += 1except:passtry:if img_gray[x+1, y] == 0:cnt += 1except:passtry:if img_gray[x+1, y+1] == 0:cnt += 1except:passif cnt < 4: # 周圍少于4點就算是噪點img_gray[x, y] = 1plt.figure('')plt.imshow(img_gray, cmap='gray')plt.axis('off')# plt.show()plt.savefig(''.join(['clean_captcha_img/', label, '.png']))def cutImg(label):labels = list(label)img = Image.open(''.join(['clean_captcha_img/', label, '.png']))for i in range(5):pic = img.crop((100*(1+i), 170, 100*(1+i)+100, 280))plt.imshow(pic)seq = get_save_seq(label[i])pic.save(''.join(['cut_number/', str(label[i]), '/', str(seq), '.png']))def get_save_seq(num):numlist = os.listdir(''.join(['cut_number/', num, '/']))if len(numlist) == 0 or numlist is None:return 0else:max_file = 0for file in numlist:if int(file.split('.')[0]) > max_file:max_file = int(file.split('.')[0])return int(max_file)+1def create_dir():for i in range(10):os.mkdir(''.join(['cut_number/', str(i)]))def img_2_clean():captchas = os.listdir(''.join(['captcha_images/']))for captcha in captchas:label = captcha.split('.')[0]img_path = ''.join(['captcha_images/', captcha])# 二值化im = binarizaion(img_path)# 降噪noiseReduction(im, label)def clean_to_cut():captchas = os.listdir(''.join(['clean_captcha_img/']))for captcha in captchas:label = captcha.split('.')[0]cutImg(label)if __name__ == '__main__':img_2_clean()create_dir()clean_to_cut()lee = os.listdir('captcha_images/')for name in lee:lable = name.split('.')[0]path = 'captcha_images/'+namepic = binarizaion(path)noiseReduction(pic,lable)總結
- 上一篇: 电源平面Z阻抗参数的提取是否需要设置VR
- 下一篇: 给未来写封信app服务器维护中,给未来写