使用ResNet卷积网络识别验证码图片
备注:验证码训练集可以在有验证码网站获取(但前期标注比较恶心),这里使用captcha自动进行验证码图像生成,验证码为4位数字,范围0~4(范围较小方便训练),使用pillow和opencv两种方法进行了图像预处理,使用torch+cpu训练。
-
网络架构图
0.1 整体结构

0.2 残差单元结构

0.3 部分识别结果展示

-
导包
from captcha.image import ImageCaptcha import matplotlib.pyplot as plt import random import numpy as np import glob import os import time import cv2 from PIL import Image from PIL import ImageFilter import torch import torch.nn as nn from torch.utils.data import Dataset,DataLoader from torch.nn import BCEWithLogitsLoss from torch.optim import Adam -
验证码图像生成
image = ImageCaptcha(width=120,height=80) # 生成批量验证码函数 def generate_captcha(fp='./',captcha_nums=3): for i in range(captcha_nums): chars = ''.join([str(random.randint(0,4)) for i in range(4)]) timestamp = str(time.time()).replace('.','') image.write(chars,os.path.join(fp,f'{ chars}_{ timestamp}.png')) generate_captcha(fp='./test/image',captcha_nums=3000)
训练集原始图像
-
验证码图像预处理(使用pillow和opencv两种方法进行了图像预处理)
# PIL排序滤镜 def PIL_process(filename,save_path): # 图像灰度化和二值化 im1 = Image.open(filename).convert('L').convert('1') # 图像排序过滤 im1 = im1.filter(ImageFilter.RankFilter(3,2)) save_path = os.path.join(save_path,os.path.basename(filename)) im1.save(save_path) # opencv def opencv_process(filename,save_path): im2 = cv2.imread(filename) # 灰度化 im2 = cv2.cvtColor(im2,cv2.COLOR_BGR2GRAY) # 二值化 thresh,im2 = cv2.threshold(im2,200
使用ResNet识别验证码:图像预处理与PyTorch训练

这篇博客介绍了如何利用ResNet卷积神经网络进行验证码图像识别,包括使用captcha库生成验证码,使用PIL和OpenCV进行图像预处理,构建ResNet网络模型,以及训练和测试过程。博主展示了两种预处理方法,虽然PIL处理效果不如OpenCV,但未深入调整。经过训练,模型在20张新验证码中识别准确率为95%。
最低0.47元/天 解锁文章
686

被折叠的 条评论
为什么被折叠?



