基于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实现)视频教程 - 车牌矩阵定位

前面我们做了图像预处理,接下来可以进行车牌矩阵定位:

复制代码
def verify_scale(rotate_rect):
    return True
​
​
def img_transform(rotate_rect, orig_img):
    return None
​
​
def locate_carPlate(orig_img, pred_img):
    carPlate_list = []  # 车牌列表
    temp1_orig_img = orig_img.copy()  # 拷贝图片 调试用
    temp2_orig_img = orig_img.copy()  # 拷贝图片 调试用
    # 从二值图像中查找轮廓的函数
    # cv2.RETR_EXTERNAL参数表示只检索最外层轮廓,
    # cv2.CHAIN_APPROX_SIMPLE参数表示压缩轮廓的水平、垂直和对角线部分,只保留端点。
    # 函数返回轮廓列表contours和层级信息heriachy,用于后续的车牌定位处理。
    contours, hierarchy = cv2.findContours(pred_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for i, contour in enumerate(contours):
        """
        这段代码的功能是在调试图像上绘制检测到的轮廓。具体来说:
        cv2.drawContours()函数用于在temp1_orig_img图像上绘制轮廓
        contours是要绘制的轮廓点集
        i表示当前绘制第几个轮廓
        (0, 255, 255)是绘制的颜色(青色)
        2是线条粗细度
        这样可以可视化显示所有检测到的车牌候选区域轮廓,便于调试观察。
        """
        cv2.drawContours(temp1_orig_img, contours, i, (0, 255, 255), 2)
        """
        获取当前轮廓的最小外接矩形,cv2.minAreaRect()函数会计算能够完全包围轮廓的最小面积矩形,
        并返回一个包含矩形中心点坐标、宽度高度和旋转角度的元组,
        用于后续的车牌定位和矫正处理。
        """
        rotate_rect = cv2.minAreaRect(contour)
​
        # 根据矩形面积大小和长宽比判断是否是车牌
        if verify_scale(rotate_rect):
            # 裁剪车牌并且位置矫正
            car_plate = img_transform(rotate_rect, temp2_orig_img)
            cv2.imwrite('process_img/transform_img.jpg', car_plate)
            # 调整尺寸为后面CNN车牌识别做准备
            car_plate = cv2.resize(car_plate, (car_plate_w, car_plate_h))
            cv2.imwrite('process_img/resize_img.jpg', car_plate)
            carPlate_list.append(car_plate)
    return carPlate_list
​
​
if __name__ == '__main__':
    car_plate_w, car_plate_h = 136, 36  # 车牌宽高
    char_w, char_h = 20, 20  # 字符宽高
    char_model_path = "char.pth"
    test_images_root = 'images/test/'  # 测试图片路径
    files = list_all_files(test_images_root)
    files.sort()
​
    for file in files:
        img = cv2.imread(file)  # 读取图片
        pred_img = pre_process(img)  # 预处理图片
        locate_carPlate(img, pred_img)  # 车牌定位
相关推荐
iAm_Ike2 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt2 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
牧子川2 小时前
009-Transformer-Architecture
人工智能·深度学习·transformer
旦莫3 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
dfsj660114 小时前
第四章:深度学习革命
人工智能·深度学习
知识领航员4 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
cskywit4 小时前
【CVPR2024】用Diffusion“造”遥感分割数据:SatSynth论文解读
人工智能·深度学习·计算机视觉
薛定e的猫咪4 小时前
因果推理研究方向综述笔记
人工智能·笔记·深度学习·算法
老毛肚5 小时前
卷积神经网络CNN
人工智能·深度学习·cnn
如何原谅奋力过但无声5 小时前
【灵神高频面试题合集06-08】反转链表、快慢指针(环形链表/重排链表)、前后指针(删除链表/链表去重)
数据结构·python·算法·leetcode·链表