YOLOv8 实时YouTube直播流目标追踪系统详解
YOLOv8 实时YouTube直播流目标追踪系统
本项目提供基于Flask的Web应用程序,可实时处理YouTube直播视频流,通过YOLOv8实现目标检测与追踪,并展示带有边界框和类别统计的处理画面。该系统同时提供获取目标数量的API接口。
核心功能
• 实时获取并处理YouTube直播视频流
• 采用YOLOv8模型进行目标检测与追踪
• 自定义监控区域(ROI)实现目标移动监测
• 统计穿越预设虚拟线的目标数量
• 提供可视化网页界面展示处理后的视频流
• 支持通过API获取实时目标统计数量
环境要求
运行前请确保安装以下依赖库:
pip install flask opencv-python numpy ultralytics shapely yt-dlp
安装与使用
1
2. 安装依赖库:
pip install -r requirements.txt
-
启动Flask应用:
python app.py -
浏览器访问:
http://localhost:8080/
配置说明
• 修改app.py中的youtube_live_id变量为指定YouTube直播ID
• 如需使用自定义模型,请调整YOLO模型路径
• 可通过修改roi_points和line_start/line_end自定义监控区域与检测线
API接口
• GET /video_feed - 获取带目标追踪的视频流
• GET /counts - 返回JSON格式的检测目标数量
部署方案
常规部署:
export PORT=8080
python app.py
Docker容器化部署:
docker build -t yolo-stream .
docker run -p 8080:8080 yolo-stream
1. 系统概述
本项目是一个基于 Flask 框架的 Web 应用程序,能够实时处理 YouTube 直播视频流,并利用 YOLOv8(You Only Look Once v8) 深度学习模型进行 目标检测与追踪。系统的主要功能包括:
- 实时视频流处理:通过
yt-dlp
库获取 YouTube 直播流,并使用 OpenCV 进行解码。 - 目标检测与追踪:采用 YOLOv8(Ultralytics 实现)检测视频中的物体,并利用 ByteTrack 或 BoT-SORT 等算法进行目标追踪。
- 自定义监控区域(ROI):用户可以设定一个 多边形区域(使用
shapely
库计算),仅在该区域内进行目标检测,减少计算量。 - 虚拟线计数:在视频画面中定义一条 检测线,系统会统计 跨越该线的目标数量(适用于车流统计、人流监控等场景)。
- 可视化界面:通过 Flask 渲染 HTML 页面,实时显示 带边界框和类别标签的视频流,并动态更新目标数量。
- RESTful API:提供
/counts
接口,返回 JSON 格式的统计结果,方便与其他系统(如数据分析平台、IoT 设备)集成。
2. 技术架构
2.1 核心组件
- 前端(Web 界面)
- 使用 Flask 模板引擎(Jinja2) 渲染 HTML,并通过
<img>
标签动态加载视频流(/video_feed
端点)。 - 可结合 JavaScript(AJAX) 定期请求
/counts
API,实现动态数据更新。
- 使用 Flask 模板引擎(Jinja2) 渲染 HTML,并通过
- 后端(Flask + YOLOv8)
- 视频流获取:
yt-dlp
下载 YouTube 直播流,OpenCV
逐帧解码。 - 目标检测:加载 YOLOv8s / YOLOv8m(轻量级模型,平衡速度与精度)。
- 目标追踪:可选 ByteTrack(默认) 或 DeepSORT,计算目标的 运动轨迹。
- ROI 检测:使用
shapely.geometry.Polygon
判断目标是否在指定区域内。 - 虚拟线计数:基于 目标中心点坐标变化,判断是否跨越检测线(如
y=300
的水平线)。
- 视频流获取:
- API 接口
GET /video_feed
:返回 MJPEG 流(Motion-JPEG),供前端显示。GET /counts
:返回{"car": 10, "person": 5}
格式的统计结果。
2.2 数据处理流程
- 输入:YouTube 直播 URL(如
https://youtu.be/XXXXXX
)。 - 视频解码:
OpenCV
逐帧读取,分辨率可调整(默认640x480
)。 - YOLOv8 检测:
- 输入帧 → YOLOv8 模型 → 输出 边界框(bbox) + 类别(class) + 置信度(conf)。
- 目标追踪:
- 计算每个目标的 ID,避免重复计数。
- ROI & 虚拟线逻辑:
- 仅统计 进入 ROI 区域 的目标。
- 当目标中心点 从虚拟线一侧移动到另一侧 时,计数器 +1。
- 输出:
- 视频流:叠加 bbox、ID、类别、计数。
- API:返回实时统计结果。
3. 应用场景
- 智慧交通:统计高速公路车流量。
- 安防监控:检测入侵者或异常行为。
- 零售分析:商场人流量统计。
- 工业检测:生产线物品计数。
4. 优化与扩展
- 模型优化:使用 TensorRT 加速 YOLOv8,提升 FPS。
- 多摄像头支持:扩展为 RTSP / IP Camera 输入。
- 云部署:通过 Docker + Kubernetes 实现弹性伸缩。
- 报警功能:当目标数量超过阈值时,触发 邮件/短信通知。
本系统适用于 实时监控场景,代码结构清晰,易于二次开发,欢迎贡献改进! 🚀