通过OCR实现验证码识别
链接地址:
https://www.paddlepaddle.org.cn/documentation/docs/zh/2.6/practices/cv/image_ocr.html
import osimport PIL.Image as Image
import numpy as np
from paddle.io import Dataset# 图片信息配置 - 通道数、高度、宽度
IMAGE_SHAPE_C = 3
IMAGE_SHAPE_H = 30
IMAGE_SHAPE_W = 70
# 数据集图片中标签长度最大值设置 - 因图片中均为4个字符,故该处填写为4即可
LABEL_MAX_LEN = 4class Reader(Dataset):def __init__(self, data_path: str, is_val: bool = False):"""数据读取Reader:param data_path: Dataset路径:param is_val: 是否为验证集"""super().__init__()self.data_path = data_path# 读取Label字典with open(os.path.join(self.data_path, "label_dict.txt"), "r", encoding="utf-8") as f:self.info = eval(f.read())# 获取文件名列表self.img_paths = [img_name for img_name in self.info]# 将数据集后1024张图片设置为验证集,当is_val为真时img_path切换为后1024张self.img_paths = self.img_paths[-1024:] if is_val else self.img_paths[:-1024]def __getitem__(self, index):# 获取第index个文件的文件名以及其所在路径file_name = self.img_paths[index]file_path = os.path.join(self.data_path, file_name)# 捕获异常 - 在发生异常时终止训练try:# 使用Pillow来读取图像数据img = Image.open(file_path)# 转为Numpy的array格式并整体除以255进行归一化img = np.array(img, dtype="float32").reshape((IMAGE_SHAPE_C, IMAGE_SHAPE_H, IMAGE_SHAPE_W)) / 255except Exception as e:raise Exception(file_name + "\t文件打开失败,请检查路径是否准确以及图像文件完整性,报错信息如下:\n" + str(e))# 读取该图像文件对应的Label字符串,并进行处理label = self.info[file_name]label = list(label)# 将label转化为Numpy的array格式label = np.array(label, dtype="int32")return img, labeldef __len__(self):# 返回每个Epoch中图片数量return len(self.img_paths)
