【实战教程】使用YOLO和EasyOCR实现视频车牌检测与识别【附源码】

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发 2.【车牌识别与自动收费管理系统开发
3.【手势识别系统开发 4.【人脸面部活体检测系统开发
5.【图片风格快速迁移软件开发 6.【人脸表表情识别系统
7.【YOLOv8多目标识别与自动标注软件开发 8.【基于YOLOv8深度学习的行人跌倒检测系统
9.【基于YOLOv8深度学习的PCB板缺陷检测系统 10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统
11.【基于YOLOv8深度学习的安全帽目标检测系统 12.【基于YOLOv8深度学习的120种犬类检测与识别系统
13.【基于YOLOv8深度学习的路面坑洞检测系统 14.【基于YOLOv8深度学习的火焰烟雾检测系统
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统 16.【基于YOLOv8深度学习的舰船目标分类检测系统
17.【基于YOLOv8深度学习的西红柿成熟度检测系统 18.【基于YOLOv8深度学习的血细胞检测与计数系统
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统 20.【基于YOLOv8深度学习的水稻害虫检测与识别系统
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统 22.【基于YOLOv8深度学习的路面标志线检测与识别系统
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统 24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统 26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统
27.【基于YOLOv8深度学习的人脸面部表情识别系统 28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统
29.【基于YOLOv8深度学习的智能肺炎诊断系统 30.【基于YOLOv8深度学习的葡萄簇目标检测系统
31.【基于YOLOv8深度学习的100种中草药智能识别系统 32.【基于YOLOv8深度学习的102种花卉智能识别系统
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统 34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统 36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统 38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统 40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统 42.【基于YOLOv8深度学习的无人机视角地面物体检测系统
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统 44.【基于YOLOv8深度学习的野外火焰烟雾检测系统
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统 46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统 48.【基于深度学习的车辆检测追踪与流量计数系统
49.【基于深度学习的行人检测追踪与双向流量计数系统 50.【基于深度学习的反光衣检测与预警系统
51.【基于深度学习的危险区域人员闯入检测与报警系统 52.【基于深度学习的高密度人脸智能检测与统计系统
53.【基于深度学习的CT扫描图像肾结石智能检测系统 54.【基于深度学习的水果智能检测系统
55.【基于深度学习的水果质量好坏智能检测系统 56.【基于深度学习的蔬菜目标检测与识别系统
57.【基于深度学习的非机动车驾驶员头盔检测系统 58.【太基于深度学习的阳能电池板检测与分析系统
59.【基于深度学习的工业螺栓螺母检测 60.【基于深度学习的金属焊缝缺陷检测系统
61.【基于深度学习的链条缺陷检测与识别系统 62.【基于深度学习的交通信号灯检测识别
63.【基于深度学习的草莓成熟度检测与识别系统 64.【基于深度学习的水下海生物检测识别系统
65.【基于深度学习的道路交通事故检测识别系统 66.【基于深度学习的安检X光危险品检测与识别系统
67.【基于深度学习的农作物类别检测与识别系统 68.【基于深度学习的危险驾驶行为检测识别系统
69.【基于深度学习的维修工具检测识别系统 70.【基于深度学习的维修工具检测识别系统
71.【基于深度学习的建筑墙面损伤检测系统 72.【基于深度学习的煤矿传送带异物检测系统
73.【基于深度学习的老鼠智能检测系统

二、机器学习实战专栏【链接】 ,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

引言

在本文中,我们将探索如何在Python中使用YOLO(You Only Look Once)和EasyOCR(Optical Character Recognition)实现视频文件的车牌检测与识别。

1.安装库

在开始之前,请确保安装了以下Python包:

python 复制代码
pip install opencv-python ultralytics easyocr Pillow numpy

2.具体步骤

步骤1:初始化库

我们将从导入必要的库开始。我们将使用OpenCV进行视频处理,使用YOLO进行对象检测,使用EasyOCR阅读检测到的车牌上的文本。

python 复制代码
import cv2
from ultralytics import YOLO
import easyocr
from PIL import Image
import numpy as np

# 初始化 EasyOCR 读取器
reader = easyocr.Reader(['ch_sim'], gpu=False)

# 加载你的 YOLO 模型(替换为你模型的路径)
model = YOLO('best_float32.tflite', task='detect')

# 打开视频文件(替换为你的视频文件路径)
video_path = 'sample4.mp4'
cap = cv2.VideoCapture(video_path)

# 创建一个 VideoWriter 对象(可选,如果你希望保存输出)
output_path = 'output_video.mp4'
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, 30.0, (640, 480))  # 如有必要,调整帧大小

步骤2:处理视频帧

我们将从视频文件中读取每一帧,对其进行处理以检测车牌,然后应用OCR识别车牌上的文本。为了提高性能,我们可以每三帧处理一次,加快检测速度。

python 复制代码
# 帧跳过因子(根据性能需求进行调整)
frame_skip = 3  # 跳过每第3帧
frame_count = 0

while cap.isOpened():
    ret, frame = cap.read()  # 从视频中读取一帧
    if not ret:
        break  # 如果没有剩余帧,则退出循环

    # 跳过帧
    if frame_count % frame_skip != 0:
        frame_count += 1
        continue  # 跳过处理这一帧

    # 调整帧大小(可选,根据需要调整大小)
    frame = cv2.resize(frame, (640, 480))  # 调整为640x480

    # 在当前帧上进行预测
    results = model.predict(source=frame)

    # 遍历结果并绘制预测框
    for result in results:
        boxes = result.boxes  # 获取模型预测的边界框
        for box in boxes:
            class_id = int(box.cls)  # 获取类别ID
            confidence = box.conf.item()  # 获取置信度分数
            coordinates = box.xyxy[0]  # 获取边界框坐标作为张量

            # 提取并转换边界框坐标为整数
            x1, y1, x2, y2 = map(int, coordinates.tolist())  # 将张量转换为列表,然后再转换为整数

            # 在帧上绘制边界框
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)  # 绘制矩形

            # 尝试对检测区域应用OCR
            try:
                # 确保坐标在帧范围内
                r0 = max(0, x1)
                r1 = max(0, y1)
                r2 = min(frame.shape[1], x2)
                r3 = min(frame.shape[0], y2)

                # 裁剪车牌区域
                plate_region = frame[r1:r3, r0:r2]

                # 转换为与EasyOCR兼容的格式
                plate_image = Image.fromarray(cv2.cvtColor(plate_region, cv2.COLOR_BGR2RGB))
                plate_array = np.array(plate_image)

                # 使用EasyOCR从车牌中读取文本
                plate_number = reader.readtext(plate_array)
                concat_number = ' '.join([number[1] for number in plate_number])
                number_conf = np.mean([number[2] for number in plate_number])

                # 在帧上绘制检测到的文本
                cv2.putText(
                    img=frame,
                    text=f"Plate: {concat_number} ({number_conf:.2f})",
                    org=(r0, r1 - 10),
                    fontFace=cv2.FONT_HERSHEY_SIMPLEX,
                    fontScale=0.7,
                    color=(0, 0, 255),
                    thickness=2
                )

            except Exception as e:
                print(f"OCR Error: {e}")
                pass

    # 显示带有检测结果的帧
    cv2.imshow('Detections', frame)

    # 将帧写入输出视频(可选)
    out.write(frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break  # 如果按下 'q' 键,则退出循环

    frame_count += 1  # 增加帧计数

# 释放资源
cap.release()
out.release()  # 释放VideoWriter对象(如果使用了)
cv2.destroyAllWindows()

步骤说明

  1. 初始化EasyOCR:EasyOCR初始化为中文文本识别。
  2. 加载YOLO模型:从指定路径加载YOLO模型。请确保将此路径替换为您的模型路径。
  3. 读取视频帧 :使用OpenCV打开视频文件,如果要保存输出,则会初始化VideoWriter
  4. 帧处理:读取每个帧并调整大小。用模型预测车牌位置。
  5. 绘制预测:在帧上绘制检测到的边界框。包含车牌的区域被裁剪以进行OCR处理。
  6. 应用OCR:EasyOCR从裁剪的车牌图像中读取文本。检测到的文本和置信度分数显示在检测框上。
  7. 输出视频:处理后的帧可以显示在窗口中,也可以选择保存到输出视频文件中。

结论

此代码提供了一种使用YOLO和EasyOCR从视频文件中检测和识别车牌的方法。通过遵循这些步骤,我们可以在自己的应用程序实现类似的系统。


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关推荐
池央3 小时前
DCGAN - 深度卷积生成对抗网络:基于卷积神经网络的GAN
深度学习·生成对抗网络·cnn
scdifsn4 小时前
动手学深度学习11.6. 动量法-笔记&练习(PyTorch)
pytorch·笔记·深度学习
金色旭光4 小时前
目标检测高频评价指标的计算过程
算法·yolo
羊小猪~~4 小时前
深度学习基础--LSTM学习笔记(李沐《动手学习深度学习》)
人工智能·rnn·深度学习·学习·机器学习·gru·lstm
青松@FasterAI4 小时前
Word2Vec如何优化从中间层到输出层的计算?
人工智能·深度学习·自然语言处理·nlp面题
paradoxjun4 小时前
落地级分类模型训练框架搭建(1):resnet18/50和mobilenetv2在CIFAR10上测试结果
人工智能·深度学习·算法·计算机视觉·分类
神经星星5 小时前
登Nature子刊!北大团队用AI预测新冠/艾滋病/流感病毒进化方向,精度提升67%
人工智能·深度学习·机器学习
Scabbards_5 小时前
用于牙科的多任务视频增强
人工智能·深度学习·算法·机器学习
Golinie6 小时前
2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程
人工智能·pytorch·深度学习
周杰伦_Jay6 小时前
Ollama能本地部署Llama 3等大模型的原因解析(ollama核心架构、技术特性、实际应用)
数据结构·人工智能·深度学习·架构·transformer·llama