基于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
相关推荐
哥本哈士奇(aspnetx)5 小时前
Streamlit + LangChain 1.0 简单实现智能问答前后端
python·大模型
我一定会有钱5 小时前
斐波纳契数列、end关键字
python
小鸡吃米…6 小时前
Python 列表
开发语言·python
Dekesas96957 小时前
【深度学习】基于Faster R-CNN的黄瓜幼苗智能识别与定位系统,农业AI新突破
人工智能·深度学习·r语言
星依网络7 小时前
yolov5实现游戏图像识别与后续辅助功能
python·开源·游戏程序·骨骼绑定
大佐不会说日语~7 小时前
Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
人工智能·spring boot·python·spring·封装·spring ai
2501_921649498 小时前
如何获取美股实时行情:Python 量化交易指南
开发语言·后端·python·websocket·金融
qq_448011168 小时前
python HTTP请求同时返回为JSON的异常处理
python·http·json
棒棒的皮皮8 小时前
【OpenCV】Python图像处理几何变换之翻转
图像处理·python·opencv·计算机视觉
CodeCraft Studio8 小时前
国产化PPT处理控件Spire.Presentation教程:使用Python将图片批量转换为PPT
python·opencv·powerpoint·ppt文档开发·ppt组件库·ppt api