基于 YOLOv8 和 Streamlit 的实时目标检测与追踪系统
项目简介
本开源项目展示了如何通过将 YOLOv8(目标检测算法)与 Streamlit(一个用于创建交互式 Web 应用的流行 Python 框架)无缝集成,实现实时视频流的目标检测与追踪。该系统具有用户友好的界面,支持对以下多种视频源进行目标检测和追踪:
- RTSP 流(例如 IP 摄像机)
- UDP 流
- YouTube 视频链接
- 静态视频文件
- 静态图片
通过该项目,用户能够方便地进行目标检测与追踪操作,并直观地查看检测结果。
—
项目资源
深入了解实现细节
作者在 Medium 上撰写了三篇系列文章,详细讲解了从头开始创建该 Web 应用的过程。
Streamlit 云端 Web 应用演示
感谢 Streamlit 团队为社区提供的云端支持!您可以直接通过以下链接访问项目的 Web 应用演示:
注意:由于云端演示中缺少 GPU,视频推理速度可能较慢。
功能概览
目标检测与追踪演示
- 示例视频演示目标检测与追踪功能:
- 使用 YOLOv8 模型检测图片、视频、或实时流中的目标。
界面预览
-
主页:
- 欢迎界面,展示上传图片或视频的选项。
-
图片检测界面:
- 上传图片后,用户可以一键运行目标检测,检测结果会直接展示在页面上。
-
分割任务界面:
- 可切换至分割模式,在图片中运行实例分割任务。
环境要求
- Python 版本:3.6 或更高
- 主要依赖:
- YOLOv8
- Streamlit
- pytube(用于处理 YouTube 视频链接)
安装依赖项的命令:
pip install ultralytics pytube
安装步骤
2. 进入项目目录:
```bash
cd yolov8
-
创建以下目录:
- weights:用于存放预训练模型权重。
- videos:用于存放待处理的视频。
- images:用于存放图片。
-
下载预训练的 YOLOv8 模型权重:
- 链接:[YOLOv8 权重文件]
- 将下载的文件放置于
weights
文件夹中。
使用方法
运行应用
通过以下命令启动 Streamlit 应用:
app.py
应用将自动在浏览器中打开。
模型配置
进入 Web 应用后,用户可以自定义模型配置:
- 选择任务类型:
- 检测(Detection):目标检测任务。
- 分割(Segmentation):目标实例分割任务。
- 设置模型置信度:
- 通过滑块调整置信度阈值(范围:25%-100%)。
- 选择数据源:
- 可从图片、视频、RTSP 流或 YouTube 视频链接中选择。
功能细节
1. 图片目标检测
- 默认展示一张带有检测结果的示例图片。
- 上传自己的图片:
- 点击“浏览文件”按钮上传图片。
- 运行检测:
- 点击“检测目标”按钮,使用所选置信度运行检测。
- 查看结果:
- 检测结果会直接显示在页面上,并支持下载检测结果。
2. 视频目标检测
- 在项目目录下创建
videos
文件夹。 - 将待处理视频文件放入
videos
文件夹。 - 修改
settings.py
中的视频路径配置:# 视频目录 VIDEO_DIR = ROOT / 'videos' # 配置视频路径 VIDEO_1_PATH = VIDEO_DIR / 'video_1.mp4' VIDEO_2_PATH = VIDEO_DIR / 'video_2.mp4' VIDEO_3_PATH = VIDEO_DIR / 'video_3.mp4' VIDEO_4_PATH = VIDEO_DIR / 'video_4.mp4' # 配置视频名称字典 VIDEOS_DICT = { 'video_1': VIDEO_1_PATH, 'video_2': VIDEO_2_PATH, 'video_3': VIDEO_3_PATH, 'video_4': VIDEO_4_PATH, }
- 在应用中选择目标视频,点击“检测视频目标”按钮,系统将开始目标检测或分割任务。
3. RTSP 实时流检测
- 选择数据源为 RTSP 流。
- 输入 RTSP 流 URL。
- 点击“检测目标”按钮,即可开始对实时视频流进行目标检测或分割。
4. YouTube 视频检测
- 选择数据源为 YouTube 视频。
- 输入视频链接到文本框中。
- 点击“检测目标”按钮,即可对 YouTube 视频进行检测或分割。
项目=
- 本项目使用 YOLOv8 实现目标检测与分割功能。
- Streamlit 提供了用户友好的 Web 应用界面。
- 感谢 Python-OpenCV 在处理图像和视频方面的强大支持。
注意事项
- 本项目仅供学习和技术演示,并非为生产环境设计。
- 目标是展示 YOLOv8 和 Streamlit 等技术的集成与应用,并为开发者提供学习和参考的资源。
- 项目中的所有代码、界面和功能均可自由扩展,欢迎贡献或基于此项目进行二次开发。