YOLOv8视频目标检测项目解析
目录
效果预览
原始视频:
test
效果视频:
result
项目文件结构
YOLO_Project/
│
├── TEST/
├── test3.py # 视频处理主程序
├── yolov8x.pt # YOLOv8预训练模型
│
├── datasets/ # 输入视频目录
│ └── test.mp4 # 测试视频
│
└── results/ # 输出结果目录
└── result.mp4 # 处理后的视频
项目简介
这是一个基于YOLOv8模型的视频目标检测项目,能够实时处理视频流,识别视频中的多个对象,并在视频帧上标注出检测结果。
代码详细解析
1. 环境配置和依赖导入
import cv2
from ultralytics import YOLO
import os
current_dir = os.path.dirname(os.path.abspath(__file__))
- 使用OpenCV处理视频流
- 导入YOLO模型进行目标检测
- 使用os模块处理文件路径
- 获取当前文件所在目录路径
2. 模型加载和视频读取
# 加载模型和视频
model = YOLO('yolov8x.pt')
video_path = os.path.join(current_dir, 'datasets', 'test.mp4')
cap = cv2.VideoCapture(video_path)
# 获取视频属性
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 设置输出视频
output_path = os.path.join(current_dir, 'results', 'result.mp4')
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
- 加载预训练的YOLOv8x模型
- 读取输入视频文件
- 获取视频的基本属性(帧率、分辨率)
- 配置输出视频的编码格式和参数
3. 视频处理流程
while cap.isOpened():
success, frame = cap.read()
if not success:
break
# 目标检测
results = model(frame)
# 在帧上绘制检测结果
for result in results:
boxes = result.boxes
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0]
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
# 绘制边界框和标签
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
conf = float(box.conf)
cls = int(box.cls)
label = f'{result.names[cls]} {conf:.2f}'
cv2.putText(frame, label, (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
- 逐帧读取视频
- 对每一帧进行目标检测
- 实时绘制检测框和标签
- 显示对象类别和置信度
4. 结果保存与显示
# 保存和显示处理后的帧
out.write(frame)
cv2.imshow('Detection Result', frame)
# 按 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
- 将处理后的帧写入输出视频
- 实时显示处理结果
- 支持交互式控制(按’q’退出)
- 程序结束时释放资源
应用场景
-
实时监控系统
- 交通监控
- 安防监控
- 人流量统计
-
智能驾驶
- 车辆检测
- 行人检测
- 交通标志识别
-
体育赛事分析
- 运动员跟踪
- 动作分析
- 比赛数据统计
-
工业自动化
- 生产线监控
- 质量检测
- 异常行为识别
-
视频分析
- 视频内容理解
- 目标跟踪
- 行为分析
项目特点
- 实时视频处理能力
- 高效的目标检测算法
- 支持多目标同时跟踪
- 可视化检测结果
- 支持视频保存和实时预览
- 交互式控制界面
使用说明
- 安装必要的依赖包
- 将待处理视频放入datasets文件夹
- 运行程序开始处理
- 按’q’键可随时退出程序
- 处理结果自动保存在results文件夹中
我使用的是一个交通场景视频,各位可以尝试其他的场景视频,项目已经包含完整代码,如果还想要项目文件的可以关注我,留下自己的邮箱,在操作过程中有任何问题也欢迎交流。
如果大家想看如何使用yolo进行图像的目标检测,可以移步到我的这篇文章YOLOv8图像识别与目标检测实战:从项目文件结构开始到多场景应用的解析(文章包括完整代码以及演示图片和结果图)。