【yolov5改编系列之二】yolov5-6.0中detect.py检测视频文件,官方文档内容太多,看着眼花缭乱,我直接给它删掉一大堆。

引言

yolov5官方的detect.py文件集成度比较高。一般情况下我们不需要同时实现这么多的功能,比如:检测图像、视频、摄像头等,包括支持pytorch、tensorflow等模型框架。

本节内容是基于yolov5-6.0的detect.py文件改写的。我相信也适用于相近的yolov5版本。

本节代码功能支撑:windows系统、pytorch模型框架、检测视频文件、基于python语言

使用方法:直接用本节代码替换detect.py文件或者在官方detect.py同级目录下新建一个py文件,配置好环境后直接运行。

代码文件.py
import cv2
import numpy as np
import torch
import os

from models.experimental import attempt_load
from utils.general import check_img_size, non_max_suppression, scale_coords
from utils.plots import Annotator, colors
from utils.augmentations import letterbox
from utils.torch_utils import select_device

# 设置相关参数和路径
img_size = 640
stride = 32
weights = 'yolov5s.pt'  # 模型权重文件路径
device = '0'  # 设置设备类型
source = 'data/images/3.mp4'  # 输入图像路径(也可以是绝对路径)
save_path = 'run1/'  # 输出图像保存路径(也可以是绝对路径)
view_img = True  # 是否显示检测结果的图像窗口
half = False

# 选择设备(GPU 或 CPU)
device = select_device(device)
# 判断是否可用半精度浮点数运算
half &= device.type != 'cpu'
# 导入模型
model = attempt_load(weights, map_location=device)
# 检查并调整图像大小
img_size = check_img_size(img_size, s=stride)
# 获取模型标签名称
names = model.names

# 读取视频对象
cap = cv2.VideoCapture(source)
frame = 0  # 开始处理的帧数
frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # 待处理的总帧数

# 获取当前视频的帧率与宽高,设置同样的格式,以确保相同帧率与宽高的视频输出
fps = cap.get(cv2.CAP_PROP_FPS)
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 设置视频保存路径
save_path += os.path.basename(source)
# 创建视频编码器
vid_writer = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))

# 循环处理视频帧
while frame <= frames:
    # 读取帧图像
    ret_val, img0 = cap.read()
    if not ret_val:
        break
    frame += 1
    print(f'video {frame}/{frames} {save_path}')

    # 调整图像大小
    img = letterbox(img0, img_size, stride=stride, auto=True)[0]
    # 转换为模型所需的格式
    img = img.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB
    img = np.ascontiguousarray(img)
    img = torch.from_numpy(img).to(device)
    img = img.float() / 255.0  # 0 - 255 to 0.0 - 1.0
    img = img[None]  # [h w c] -> [1 h w c]

    # 进行目标检测
    pred = model(img)[0]
    pred = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45, max_det=1000)

    # 绘制边界框和标签
    det = pred[0]
    annotator = Annotator(img0.copy(), line_width=3, example=str(names))
    if len(det):
        det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()
        for *xyxy, conf, cls in reversed(det):
            c = int(cls)  # integer class
            label = f'{names[c]} {conf:.2f}'
            annotator.box_label(xyxy, label, color=colors(c, True))

    # 将带有边界框的图像写入视频
    im0 = annotator.result()
    vid_writer.write(im0)
    if view_img:
        # 调整图像大小并显示
        im0 = cv2.resize(im0, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
        cv2.imshow(str('image'), im0)
        cv2.waitKey(1)

# 释放资源
vid_writer.release()
cap.release()
print(f'{source} finish, save to {save_path}')

结语
大家一起努力,一步一个脚印,加油!!!

参考资料
链接: YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用的信息,可以使用训练好的权重pt文件对YOLOv5进行推理测试,包括测试视频和图片。这意味着你可以使用yolov5s-fire_smoke.pt和yolov5m-fire_smoke.pt这两个训练好的火焰烟雾检测模型进行测试。这些模型可以在代码进行加载并使用。至于具体的测试视频文件,很抱歉,我没有找到相关的引用内容提供具体的视频文件名称。但是,根据引用的信息,你可以使用yolov3的代码和yolo_video.py文件来进行视频检测。希望这对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [YOLOv5火灾烟雾检测数据集](https://download.csdn.net/download/qq_45163992/87512463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [yolov3用于视频检测](https://download.csdn.net/download/qq_35224449/12536821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [pyqt5实现YOLOv5视频检测结果的展示](https://blog.csdn.net/ChaoChao66666/article/details/123435161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值