基于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
相关推荐
zone77391 小时前
001:简单 RAG 入门
后端·python·面试
F_Quant1 小时前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
允许部分打工人先富起来2 小时前
在node项目中执行python脚本
前端·python·node.js
IVEN_2 小时前
Python OpenCV: RGB三色识别的最佳工程实践
python·opencv
haosend3 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽3 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
Narrastory21 小时前
明日香 - Pytorch 快速入门保姆级教程(一)
人工智能·pytorch·深度学习
Narrastory21 小时前
明日香 - Pytorch 快速入门保姆级教程(二)
人工智能·pytorch·深度学习
IVEN_21 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计