目标检测之数据预测
1.前言
前几篇文章使用了 ssd 进行了静态视频的输出,然后卡在了检测结果的输出上面了。使用 yolov8 的基本流程也类似
- 定义视频流地址,并使用FFmpeg启动一个进程来读取视频流,并将其转换为图像帧。
- 加载YOLOv8模型,并设置相关参数,如输入图像尺寸、阈值等。
- 循环读取每一帧图像,并将其输入到YOLOv8模型中进行目标检测。
- 处理检测结果,如筛选出置信度高的检测框、绘制边界框等。
- 可以将处理后的图像帧保存到视频文件中,也可以直接在屏幕上显示图像帧(使用OpenCV等库)
【1】.基于DL Streamer与YOLOv8模型实现多路视频流实时分析 这里首次提到了一个叫 DL Streamer 的东西,DL Streamer是一个高性能的深度学习视频流处理框架,它支持多种视频源输入,包括摄像头、视频文件和网络流等。DL Streamer提供了丰富的功能,如视频解码、预处理、模型推理和后处理等,使得开发人员能够快速地搭建视频流处理系统。
【2】.YOLOv8 实时检测视频并将结果处理为 httpflv 这里有整个代码,但是关于模型的构建还是没有想过的说明
【3】.用训练好的模型在Yolov8上进行推理演示python代码,含图像检测,视频推理,实时摄像头检测。 1.图像检测;2.视频检测;3.实时摄像头检测。
【4】.yolov8实战第五天——yolov8+ffmpg实时视频流检测并进行实时推流——(推流,保姆教学) 这里还安装了 nginx-rtmp 模块,使用windows进行了安装和配置
【5】.快速入门 这里似乎是 yolov8 的官方说明文档
【6】.【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测 下载模型权重文件,这一步其实可以不做,我们在第三步导出模型为onnx的时候如果权重文件不存在,会自动帮我们下载一个权重文件,但速度会较慢,所以个人还是建议先在官网中下载权重文件,再导出为onnx模型.
【7】.yolov8图像识别python 这里有 yolov8.pt 的下载地址
【8】.使用OpenCV和YOLOv8制作目标检测器(附源码) 这里还提供了一个区域的人员检测的问题。1.进行区域划分,编写算法,判断不同区域内的人员数量。2.小狗检测器,使用预训练模型获取小狗和沙发的目标框,并且计算两者的关系,以此来触发报警。3.车辆检测器。
2.视频预测
使用官方默认的模型,对视频数据mp4进行标注,然后发布为 rtmp 。这里的 model 如果不在本地的话,会自动去网上下载,然后保存到本地。
1 | import cv2 |
【1】.零基础yolov8实时检测 根据模型返回数据自己处理原图像,可以自己设置检测框以及检测标签的样式,相关模型返回数据及处理方式请参考官方文档
【2】.python 获取视频上的时间戳 video.get(cv2.CAP_PROP_POS_MSEC),获取当前帧的时间戳,单位为毫秒。
【3】.python opencv 获取rtmp实践戳 这里也是通过 cv2.CAP_PROP_POS_MSEC 获取到的rtmp的时间戳。
3.预测参数
model接口参数如下:
source
指定用于推理的数据源。可以是实时源的图像路径、视频文件、目录、URL 或设备 ID。支持多种格式和来源,可跨不同类型的输入灵活应用。默认:’ultralytics/assets’conf
设置检测的最小置信度阈值。置信度低于此阈值的检测到的对象将被忽略。调整此值有助于减少误报。默认:0.25iou
非极大值抑制 (NMS) 的交并集 (IoU) 阈值。较低的值会消除重叠框,从而减少检测次数,这对于减少重复项很有用。默认:0.7imgsz
定义用于推理的图像大小。可以是用于调整正方形大小的单个整数 640 或(高度,宽度)元组。适当的尺寸可以提高检测精度和处理速度。默认:0.7half
启用半精度 (FP16) 推理,这可以加快受支持 GPU 上的模型推理速度,同时对准确性的影响最小。默认:Falsedevice
指定用于推理的设备(例如,cpu、cuda:0 或 0)。允许用户选择 CPU、特定 GPU 或其他计算设备来执行模型。默认:Nonemax_det
每个图像允许的最大检测数。限制模型在单次推理中可以检测到的对象总数,防止密集场景中的过多输出。默认:300vid_stride
视频输入的帧步长。允许在视频中跳帧以加快处理速度,但会牺牲时间分辨率。值为 1 时处理每一帧,较高的值会跳过帧。默认:1stream_buffer
确定是否对视频流的传入帧进行排队。如果为 False,旧帧将被丢弃以容纳新帧(针对实时应用程序进行了优化)。如果为“True”,则将新帧放入缓冲区中排队,确保不会跳过任何帧,但如果推理 FPS 低于流 FPS,则会导致延迟。默认:Falsevisualize
在推理过程中激活模型特征的可视化,提供对模型“看到”的内容的见解。对于调试和模型解释很有用。默认:Falseaugment
启用预测测试时间增强 (TTA),可能会以推理速度为代价提高检测鲁棒性.默认:Falseagnostic_nms
启用与类无关的非极大值抑制 (NMS),它合并不同类的重叠框。在类重叠很常见的多类检测场景中很有用。默认:Falseclasses
将预测过滤为一组类 ID。仅返回属于指定类别的检测。对于在多类检测任务中关注相关对象很有用。按类别过滤结果。可以指定单个类别(例如class=0)或多个类别(例如class=[0,2,3])。默认值为None,表示不进行类别过滤。默认:Noneretina_masks
如果模型中可用,则使用高分辨率分割掩模。这可以提高分割任务的掩模质量,提供更精细的细节。默认:Falseembed
指定从中提取特征向量或嵌入的图层。对于聚类或相似性搜索等下游任务很有用。默认:Noneshow
是否显示检测结果。如果设置为True,则会在屏幕上显示检测到的对象。默认值为False。save
是否保存带有检测结果的图像。如果设置为True,则会将检测结果保存为图像文件。默认值为False。save_txt
是否将检测结果保存为文本文件(.txt)。默认值为False。save_conf
是否将检测结果与置信度分数一起保存。默认值为False。save_crop
是否保存裁剪后的带有检测结果的图像。默认值为False。hide_labels
是否隐藏标签。如果设置为True,则在显示检测结果时不显示对象标签。默认值为False。hide_conf
是否隐藏置信度分数。如果设置为True,则在显示检测结果时不显示置信度分数。默认值为False。line_width
边界框的线宽。如果设置为None,则根据图像大小进行自动缩放。默认值为None。visualize
是否可视化模型特征。默认值为False。boxes
在分割预测中显示边界框。默认值为True。
【1】.YOLOv8预测参数详解(全面详细、重点突出、大白话阐述小白也能看懂)
【2】.Model Prediction with Ultralytics YOLO 这里是官方的关于预测结果的说明文档,有些参数说明:boxes、masks、probs,speed等。
3.预测结果
通常使用 model 传入相关的参数,就可以得到一个 results 结果,其中包含了 boxes 属性,也包含了如 plot() 这样的方法。
1 | results = model("bus.jpg") |
Boxes object can be used to index, manipulate, and convert bounding boxes to different formats.
【1】.YOLOv8得到物体的坐标中心点信息
【2】.Reference for ultralytics/engine/results.py 这是 results 结果的 API 说明。
【3】.视频流识别—python