基于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)  # 车牌定位
相关推荐
jiang_changsheng6 分钟前
RTX 2080 Ti魔改22GB显卡的最优解ComfyUI教程
python·comfyui
空白诗13 分钟前
CANN ops-nn 算子解读:Stable Diffusion 图像生成中的 Conv2D 卷积实现
深度学习·计算机视觉·stable diffusion
0思必得01 小时前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化
User_芊芊君子1 小时前
CANN图编译器GE全面解析:构建高效异构计算图的核心引擎
人工智能·深度学习·神经网络
沈浩(种子思维作者)1 小时前
系统要活起来就必须开放包容去中心化
人工智能·python·flask·量子计算
爱吃大芒果1 小时前
CANN神经网络算子库设计思路:ops-nn项目的工程化实现逻辑
人工智能·深度学习·神经网络
2301_790300961 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
哈__1 小时前
CANN加速VAE变分自编码器推理:潜在空间重构与编码解码优化
人工智能·深度学习·重构
m0_736919101 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
getapi1 小时前
实时音视频传输与屏幕共享(投屏)
python