基于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
相关推荐
zjy277779 分钟前
Layui tab选项卡如何动态根据ID值进行程序化切换
jvm·数据库·python
m0_6028577612 分钟前
Redis如何修复槽位分配重叠的脏状态_使用redis-cli --cluster fix工具扫描并修复不一致的Slot
jvm·数据库·python
2301_7662834426 分钟前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
动物园猫26 分钟前
工业织物缺陷目标检测数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·目标检测
tang7778932 分钟前
代理IP质量检测实战:Python实现IP可用性、延迟、匿名度自动测试脚本
大数据·爬虫·python·网络协议·tcp/ip
ACCELERATOR_LLC37 分钟前
【DataWhale组队学习】DIY-LLM Task6 评估与基准测试
人工智能·深度学习·大模型·模型评估
2501_9216494942 分钟前
企业定制金融数据 API:从架构设计到 Python 接入实战
大数据·开发语言·python·websocket·金融·量化
2601_956139421 小时前
政府事业机构品牌策划公司哪家专业
大数据·人工智能·python
Jmayday1 小时前
Pytorch:AI歌词生成器
人工智能·pytorch·python
狮子座明仔1 小时前
ThinkTwice: 让模型学会“做完题再检查一遍“,推理+自纠错联合训练只加3%开销
大数据·人工智能·深度学习