基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 自定义字符图片数据集

大家好,我是java1234_小锋老师,最近写了一套基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程,持续更新中,计划月底更新完,感谢支持。

视频在线地址:

https://www.bilibili.com/video/BV1BdUnBLE6N/

课程简介:

本课程采用主流的Python技术栈实现,分两套系统讲解,一套是专门讲PyTorch2卷积神经网络CNN训练模型,识别车牌,当然实现过程中还用到OpenCV实现图像格式转换,裁剪,大小缩放等。另外一套是基于前面Django+Vue通用权限系统基础上,加了车辆识别业务模型,Mysql8数据库,Django后端,Vue前端,后端集成训练好的模型,实现车牌识别。

基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 自定义字符图片数据集

之前学习Pytorch2的时候,我们用得数据集都是库自带的。但是我们这边的数据集需要自定义。

可以继承data.Dataset,实现 __init__初始化方法,__len__返回长度方法,__getitem__根据索引获取元素方法。因为数据集内容是图片,所以定义X属性,作为训练数据,定义y属性,作为目标数据

复制代码
复制代码
# 字符图片数据集
class CharPicDataset(data.Dataset):
​
    # 根据路径获取所有文件
    def list_all_files(self, root):
        files = []
        list = os.listdir(root)  # 获取根目录下的所有文件名
        for i in range(len(list)):
            element = os.path.join(root, list[i])  # 获取文件路径
            if os.path.isfile(element):  # 判断是否是文件
                files.append(element)
            elif os.path.isdir(element):  # 递归判断子目录
                files.extend(self.list_all_files(element))
        return files
​
    def __init__(self, data_dir):
        super().__init__()
        if not os.path.exists(data_dir):
            raise Exception("数据目录不存在")
        files = self.list_all_files(data_dir)
        self.X = []
        self.y = []
        self.dataset = numbers + alphbets + chinese
        for file in files:
            src_img = cv2.imread(file, cv2.IMREAD_GRAYSCALE)  # 读取灰度图
            resize_img = cv2.resize(src_img, (20, 20))  # 改变图片大小
            self.X.append(resize_img)
            dir = os.path.dirname(file)  # 获取文件的目录  结果类似  ./images/cnn_char_train\A
            dir_name = os.path.split(dir)[-1]  # 获取目录名  结果类似 0 或者 1 或者 A 或者 苏
            index_y = self.dataset.index(dir_name)  # 获取标签索引
            self.y.append([index_y])
​
        self.X = np.array(self.X)
        self.y = np.array(self.y)
​
    def __len__(self):
        return len(self.X)
​
    def __getitem__(self, index):
        """
        这段代码的作用是:
        - 创建一个 `transforms.ToTensor()` 转换对象,用于将 PIL 图像或 numpy 数组转换为 PyTorch 张量(tensor)
        - 该转换会自动将像素值从 [0, 255] 范围缩放到 [0, 1] 范围 归一化处理
        - 同时会将图像的通道顺序从 HWC (Height-Width-Channel) 调整为 CHW (Channel-Height-Width),这是 PyTorch 所要求的格式
        这个转换通常用于深度学习训练中,将图像数据预处理成适合神经网络输入的格式。
        """
        tf = transforms.ToTensor()
        return tf(self.X[index]), torch.LongTensor(self.y[index])

图片我们要处理下,先用opencv转成灰度图,0到255大小。20*20的二维数组。

定义main方法:

复制代码
if __name__ == '__main__':
    train_data_dir = './images/cnn_char_train'
    traindataset = CharPicDataset(train_data_dir)
    print(traindataset.X)
    print(traindataset.y)

运行输出:

复制代码
D:\python_pro\lpr2\lprs_model\venv\Scripts\python.exe D:\python_pro\lpr2\lprs_model\char_model.py 
[[[1 0 1 ... 0 0 0]
  [0 1 1 ... 0 0 0]
  [0 2 0 ... 0 0 0]
  ...
  [0 0 2 ... 0 0 0]
  [1 0 0 ... 0 0 0]
  [0 0 4 ... 0 0 0]]
​
 [[0 1 0 ... 0 0 0]
  [0 1 1 ... 0 0 0]
  [1 0 1 ... 0 0 0]
  ...
  [1 0 2 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 4 1 ... 0 0 0]]
​
 [[0 3 0 ... 0 0 0]
  [2 0 1 ... 0 0 0]
  [1 0 0 ... 0 0 0]
  ...
  [0 0 2 ... 0 0 0]
  [1 0 0 ... 0 0 0]
  [0 5 1 ... 0 0 0]]
​
 ...
​
 [[0 2 0 ... 0 0 2]
  [0 0 0 ... 1 1 0]
  [0 2 2 ... 0 1 0]
  ...
  [0 3 0 ... 0 0 0]
  [1 0 0 ... 0 0 0]
  [2 0 0 ... 0 0 0]]
​
 [[0 1 3 ... 0 0 0]
  [2 0 0 ... 0 0 0]
  [0 5 1 ... 0 0 0]
  ...
  [1 0 0 ... 0 0 0]
  [0 1 1 ... 0 0 0]
  [1 0 0 ... 0 0 0]]
​
 [[0 0 2 ... 0 0 0]
  [2 0 0 ... 0 0 0]
  [0 2 2 ... 0 0 0]
  ...
  [4 0 1 ... 0 0 0]
  [0 0 1 ... 0 0 0]
  [0 3 0 ... 0 0 0]]]
[[ 0]
 [ 0]
 [ 0]
 ...
 [66]
 [66]
 [66]]
​
Process finished with exit code 0
相关推荐
爱笑的眼睛1112 分钟前
深入理解MongoDB PyMongo API:从基础到高级实战
java·人工智能·python·ai
辣椒酱.18 分钟前
jupyter相关
python·jupyter
郝学胜-神的一滴22 分钟前
Python中常见的内置类型
开发语言·python·程序人生·个人开发
火白学安全1 小时前
《Python红队攻防零基础脚本编写:进阶篇(一)》
开发语言·python·安全·web安全·网络安全·系统安全
FreeCode1 小时前
LangGraph1.0智能体开发:运行时系统
python·langchain·agent
青瓷程序设计1 小时前
植物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
AI即插即用2 小时前
即插即用系列 | CVPR 2025 WPFormer:用于表面缺陷检测的查询式Transformer
人工智能·深度学习·yolo·目标检测·cnn·视觉检测·transformer
习习.y2 小时前
关于python中的面向对象
开发语言·python
hmbbcsm2 小时前
练习python题目小记(六)
开发语言·python