使用yolov8对视频进行目标检测

使用 Ultralytics 的 YOLO 模型对视频进行逐帧目标检测非常简单,以下是完整的实现方法:
我们的输入视频是这样的

视频目标检测输入视频

这里是天津市和平区天津大学附近,感兴趣的小伙伴来天津玩哈!!


1. 安装依赖

确保已安装最新版 ultralyticsopencv-python

pip install ultralytics opencv-python

2. 基础代码实现

以下代码将读取输入视频,逐帧检测并保存结果视频:

from ultralytics import YOLO
import cv2# 加载YOLO模型(可选模型:yolov8n.pt, yolov8s.pt, yolov8m.pt等)
model = YOLO('yolov8m.pt')  # 会自动下载预训练模型# 输入输出视频路径
input_video = 'input1.mp4'
output_video = 'output1.mp4'# 打开视频文件
cap = cv2.VideoCapture(input_video)# 获取视频属性(用于设置输出视频)
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))# 创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_video, fourcc, fps, (width, height))# 逐帧处理
while cap.isOpened():ret, frame = cap.read()if not ret:break# 使用YOLO检测当前帧results = model(frame)# 在帧上绘制检测结果annotated_frame = results[0].plot()  # 自动绘制边界框和标签# 写入输出视频out.write(annotated_frame)# 释放资源
cap.release()
out.release()
print(f"处理完成!结果已保存到 {output_video}")

3. 关键功能扩展

(1) 只检测特定类别
results = model(frame, classes=[0, 14])  # 只检测人(class 0)和鸟(class 14)
(2) 调整置信度阈值
results = model(frame, conf=0.5)  # 只显示置信度≥50%的检测
(3) 保存检测数据(JSON/CSV)
for result in results:boxes = result.boxes  # 边界框信息for box in boxes:class_id = box.cls  # 类别IDconf = box.conf    # 置信度xyxy = box.xyxy    # 框坐标[x1,y1,x2,y2]print(f"Class: {class_id}, Confidence: {conf}, Box: {xyxy}")
(4) 处理摄像头实时流
cap = cv2.VideoCapture(0)  # 0表示默认摄像头

4. 性能优化技巧

(1) 使用GPU加速
model = YOLO('yolov8n.pt').to('cuda')  # 如果有NVIDIA GPU
(2) 跳帧处理(提升速度)
frame_count = 0
while cap.isOpened():ret, frame = cap.read()frame_count += 1if frame_count % 3 != 0:  # 每3帧处理1次continue# 检测代码...
(3) 降低分辨率
small_frame = cv2.resize(frame, (640, 360))  # 缩小帧尺寸
results = model(small_frame)

5. 完整案例:车辆检测并计数

from collections import defaultdictvehicle_classes = [2, 3, 5, 7]  # 汽车、摩托车、公交车、卡车
counter = defaultdict(int)while cap.isOpened():ret, frame = cap.read()results = model(frame, classes=vehicle_classes)for result in results:for box in result.boxes:class_id = int(box.cls)class_name = model.names[class_id]counter[class_name] += 1# 在帧上显示计数for i, (name, count) in enumerate(counter.items()):cv2.putText(frame, f"{name}: {count}", (10, 30*(i+1)), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)out.write(frame)

6. 常见问题解决

Q1: 视频输出无法播放
  • 确保安装了正确的视频编码器(如fourcc = cv2.VideoWriter_fourcc(*'avc1')
  • 尝试输出为.avi格式
Q2: 检测速度慢
  • 换用更小的模型(如yolov8n.ptyolov8n-seg.pt
  • 启用半精度推理:
    model = YOLO('yolov8n.pt', half=True)  # FP16加速
    
Q3: 如何检测自定义对象?
  1. 准备标注好的数据集(YOLO格式)
  2. 训练自定义模型:
    model.train(data='custom.yaml', epochs=100)
    

检测结果如下

视频目标检测结果


YOLOv8 提供的不同模型(如 yolov8n.ptyolov8s.ptyolov8m.pt)主要在 模型大小计算量检测精度 之间进行权衡。以下是它们的详细区别和适用场景:


核心区别对比

模型代号全称参数量 (Parameters)计算量 (FLOPs)推理速度 (FPS) ⚡精度 (mAP50-95) 🎯适用场景
nNano~3.2M~8.7G最高较低移动端/嵌入式设备、实时性要求高的场景
sSmall~11.4M~28.6G中等平衡速度和精度(最常用)
mMedium~26.3M~78.9G中等较高对精度有要求的中等算力设备
lLarge~43.7M~165.2G较低服务器/高性能GPU环境
xXLarge~68.2M~257.8G最低最高学术研究或极端精度需求

性能直观对比

(1) 精度(mAP50-95)
yolov8n < yolov8s < yolov8m < yolov8l < yolov8x
  • 示例:在COCO数据集上,yolov8xyolov8n 的 mAP 高约 15-20%,但速度慢 5-10 倍。
(2) 推理速度(FPS)
yolov8n > yolov8s > yolov8m > yolov8l > yolov8x
  • 实测数据(RTX 3090, 640x640输入):
    • yolov8n: 300+ FPS
    • yolov8s: 150-200 FPS
    • yolov8x: 50-80 FPS

如何选择模型?

选择依据
  1. 硬件能力

    • 手机/树莓派 → 选 ns
    • 中等GPU(如GTX 1660) → 选 sm
    • 高端GPU(如RTX 4090) → 选 lx
  2. 应用场景

    • 实时视频检测(如摄像头监控) → n/s
    • 高精度需求(如医学图像分析) → m/l
    • 学术论文对比实验 → x
  3. 延迟 vs 精度

    • 如果允许 100ms 延迟:m 是理想选择
    • 要求 <30ms 延迟:必须用 ns

模型文件大小对比

模型文件大小(.pt格式)备注
yolov8n~6MB适合资源严格受限的环境
yolov8s~22MB通用场景的性价比之选
yolov8m~50MB需要更高精度的移动端部署
yolov8l~87MB服务器端应用
yolov8x~134MB极少用于生产环境

实际效果示例

场景:行人检测(COCO数据集)
模型检测到的人数误检数漏检数
yolov8n85510
yolov8s9233
yolov8m9421

进阶建议

  • 量化压缩:对 n/s 模型使用 TensorRT 或 ONNX 量化,可进一步提升速度。
  • 自定义训练:小模型(如 n)在数据量少时容易欠拟合,建议至少 10,000+ 标注数据再用 m/l
  • 任务类型:同一模型有不同任务版本(如 yolov8n-seg.pt 用于分割,比检测版略慢)。

总结

  • yolov8n.pt:极致轻量,适合边缘设备。
  • yolov8s.pt:最佳平衡,推荐大多数项目首选。
  • yolov8m.pt:需要精度但算力有限的场景。
  • yolov8l/x.pt:除非有极端精度需求,否则谨慎选择。

根据你的硬件和需求,从 sm 开始实验通常是最稳妥的选择! 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/98059.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/98059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Edge浏览器的自动化点击系统

Tag_click_openclose_V6 开发与使用注意事项 网页自动化点击系统 一个基于Python和CustomTkinter开发的桌面应用程序&#xff0c;通过Selenium实现对Edge浏览器的自动化控制。点击Tag_click_openclose_V6进入Github自取&#xff0c;记得点赞收藏嗷。 功能介绍 连接到已打开…

Python股票数据分析与预测系统 LSTM神经网络算法 股票价格预测 Tensorflow深度学习 机器学习 Flask框架 东方财富(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W&#xff0c;前互联网大厂软件研发、集结硕博英豪成立软件开发工作室&#xff0c;专注于计算机相关专业项目实战6年之久&#xff0c;累计开发项目作品上万套。凭借丰富的经验与专业实力&#xff0c;已帮助成千上万的学生顺利毕业&#xff0c;…

英莱科技焊缝跟踪系统亮相德国埃森焊接展,激光视觉点亮世界舞台

9月15-19日&#xff0c;每4年一届的德国埃森焊接与切割展览会&#xff08;SCHWEISSEN & SCHNEIDEN&#xff09;即将盛大开幕。作为焊接行业最具规模及权威性的盛会之一&#xff0c;英莱科技将携全新PF系列激光视觉焊缝跟踪系统惊艳亮相&#xff0c;为全球智能化焊接贡献中国…

嵌入式基本概念:什么是指令集,微架构,IDE,DFP等等是什么意思,有什么关系???

注&#xff1a;下面是指令集和微框架的分类图&#xff0c;后面我会以ARM的M4举例子。 一.什么是指令集 大概的可以看这个视频 https://www.bilibili.com/video/BV1uXzbYBEy2/?spm_id_from333.1007.top_right_bar_window_custom_collection.content.click&vd_source406ed…

Spring Cloud之服务入口Gateway之自定义过滤器

目录 过滤器执行顺序 自定义过滤器 自定义GatewayFilter 定义GatewayFilter 配置过滤器 启动服务并访问 自定义GlobalFilter 定义GlobalFilter 启动服务并访问 服务部署 过滤器执行顺序 如果⼀个项⽬中, 既有GatewayFilter, ⼜有 GlobalFilter时, 执⾏的先后顺序是什…

MySQL——视图、储储过程、触发器

目录 一、视图 二、存储过程 三、触发器 一、视图 视图是一种虚拟存在的表。视图中的数据并不在数据库中真实存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xff0c…

iOS App 卡顿与性能瓶颈排查实战 如何定位CPU内存GPU帧率问题、优化耗电与网络延迟(uni-app开发性能优化全流程指南)

在 iOS 应用开发中&#xff0c;卡顿 是用户最直观的负面体验。 一个 App 如果在页面切换、滚动、后台运行时频繁掉帧或发热&#xff0c;用户很快就会放弃使用。 对于 uni-app 跨平台开发者 来说&#xff0c;卡顿问题更为复杂&#xff1a; JS 与原生层桥接增加了 CPU 负载&#…

腾讯开源多模态 RAG:复杂文档秒变自建知识库,支持 API 调用

上篇&#xff0c;分享了 小智AI MCP系列的第一篇&#xff1a; 小智 AI 闹钟提醒 定时任务&#xff0c;设备端MCP实现 有朋友问&#xff0c;能否接入知识库 RAG&#xff1f; 让小智可以根据企业知识库&#xff0c;回答客户的疑问~ 当然可以&#xff0c;接入方式同样是 MC…

Node.js中的 http 模块详解

http 模块是 Node.js 中的核心模块之一&#xff0c;专门用于构建基于 HTTP 的网络应用程序。它允许创建 HTTP 服务器和客户端&#xff0c;处理网络请求和响应。1. 核心 API 详解1.1. http.createServer([options][, requestListener])用于创建 HTTP 服务器的核心方法&#xff0…

LAMP 环境部署

LAMP 环境部署 一、概述 1. 目的 基于 CentOS 7 系统部署 LAMP&#xff08;Linux Apache MySQL PHP&#xff09;环境的完整步骤&#xff0c;通过脚本化操作实现环境快速搭建&#xff0c;适用于运维人员进行测试环境或基础生产环境的 LAMP 部署 2. 适用环境操作系统&#xff…

用html5仿造nes游戏敲玻璃写一个敲玻璃游戏

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>敲玻璃游戏</title><style>body {ma…

996引擎-ItemTips特效框层级自定义

996引擎-ItemTips特效框层级自定义 需求场景 ItemTips 中相关方法 创建特效的位置 创建特效框 核心修改 调整视图,自己加个背景,不用原来的 设置 tipsLayout_bg 的层级 结果预览 参考资料 需求场景 策划说我们的tips特效框,遮挡文字。如果按官方说的设为底层又跑到背景框后…

Java 注解与 APT(Annotation Processing Tool)

Java 注解与 APT&#xff08;Annotation Processing Tool&#xff09; 注解&#xff08;Annotation&#xff09;基础 注解是 Java 语言的一种元数据形式&#xff0c;它可以在代码中添加标记信息&#xff0c;用于描述代码的额外信息&#xff0c;但不会直接影响代码的执行逻辑。注…

Unity 检测网络-判断当前(Android/Windows平台)设备是否连接了指定WiFi

判断设备是否连接了特定的网络1.Unity 脚本2.Unity AndroidManifest.xml文件①改个设置②补充权限语句1.Unity 脚本 using UnityEngine; using System.Collections; using System.Diagnostics; using Debug UnityEngine.Debug; using UnityEngine.UI;#if UNITY_ANDROID &…

通过网络强化增强混合IT环境的安全

网络是企业运营的支柱&#xff0c;也是网络犯罪分子和恶意威胁者的主要目标&#xff0c;他们会破坏IT运营的连续性。随着混合云基础设施、远程办公和物联网&#xff08;IoT&#xff09;生态系统的出现&#xff0c;网络边界正在不断扩大&#xff0c;新的漏洞不断产生&#xff0c…

ACP(四):RAG工作流程及如何创建一个RAG应用

RAG的工作原理 你在考试的时候有可能会因为忘记某个概念或公式而失去分数&#xff0c;但考试如果是开卷形式&#xff0c;那么你只需要找到与考题最相关的知识点&#xff0c;并加上你的理解就可以进行回答了。 对于大模型来说也是如此&#xff0c;在训练过程中由于没有见过某个知…

宇视设备视频平台EasyCVR视频设备轨迹回放平台监控摄像头故障根因剖析

监控摄像头的类型繁多&#xff0c;市场上提供了广泛的选择。然而&#xff0c;在使用监控摄像头的过程中&#xff0c;用户可能会遇到云台在很短的时间内出现运转不灵或完全无法转动的问题。这里&#xff0c;我们将对这一常见问题进行深入分析。一、具体的原因&#xff1a; 1、距…

【Uni-App+SSM 宠物项目实战】Day15:购物车添加

大家好!今天是学习路线的第15天,我们正式进入订单与购物车核心模块。昨天完成了商家服务列表的分页加载,今天聚焦“购物车添加”功能——这是连接“商品浏览”与“订单提交”的关键环节,用户可将宠物用品(如粮食、玩具)加入购物车,后续统一结算。 为什么学这个? 购物车…

Java 黑马程序员学习笔记(进阶篇6)

常用的 API1. 正则表达式(1) 题目&#xff1a;贪婪爬取和非贪婪爬取① 贪婪爬取&#xff1a;爬取数据的时候尽可能的多获取数据 ② 非贪婪爬取&#xff1a;爬取数据的时候尽可能的少获取数据 ③ Java中默认的是贪婪爬取 ④ 后面加上 ? 可以转变为非贪婪爬取(2) 捕获分组捕获分…

计算机网络---数据链路层上

文章目录1. 数据链路层的功能2. 组帧2.1 字符填充法2.2 字节填充法2.3 零比特填充法2.4 违规编码2.5 总结3. 差错控制3.1 检错编码3.1.1 奇偶校验3.1.2 循环冗余校验码&#xff08;CRC&#xff09;3.1.3 总结3.2 纠错编码&#xff08;海明校验码&#xff09;3.3 总结4. 流量控制…