yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

这些天我忽然有个需求,要更新迭代一个场景的检测模型,甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便),而我训练模型确实要标注好的图片形式。
根据这些条件的话,思路应该是要这样的:首先使用现有的最新一个模型输入视频进行检测,检测结果以每帧图片的形式进行保存,以及每帧图片对应的label。将图片和label用标注工具打开如labelme等进行可视化调整模型标注好的数据(这样比每张图片直接从0开始标注要快),再将这些标注好的数据加入之前的数据中进行训练。

保存图片形式

这个流程可能会有几处有些障碍,一个是模型检测生成的label的yolo格式数据转化成labelme格式的数据以及调整好之后labelme格式的数据再转回yolo训练格式的数据,这个问题的解决及对应的代码写在我之前的文章中;另一个就是yolov5输入的是视频时输出的也同样是个视频,且是带有检测结果的视频(带有实时检测框的视频),如图:
在这里插入图片描述
在这里插入图片描述

而我们想要的是原图进行训练,保存的是原图及对应的label。解决方法如下:
在detect.py代码里的Process predictions中添加如下两行的代码:

e_save = os.path.splitext(save_path)[0] + f'_{frame}' + '.jpg'
cv2.imwrite(e_save, im0)

在这里插入图片描述
记得这里添加一个保存图片后面的保存图片(Save results模块)要注释掉:
在这里插入图片描述

运行结果如图:
在这里插入图片描述
在这里插入图片描述
图片命名格式为输入视频的名称后面加上帧数。
可以看到保存的图片为原始图片而不是在上面plot检测框的图片,这样才能直接拿来训练。

设置帧率

看了一下保存的图片,会发现一个问题,基本上每张图片会重复几十次。所以如果不是高速移动的目标的话每帧都保存会有大量几乎重复的图片,每张都拿来训练是没必要的且浪费修改label的时间,所以下面设置每隔几帧保存一次。

在这里插入图片描述
detect.py中前向推理部分的代码结构大概是这样的:

for path, img, im0s, vid_cap in dataset:
    # ... 一些前期的代码 ...

    # 运行检测
    img = torch.from_numpy(img).to(device)
    img = img.float()  # uint8 to fp16/32
    img /= 255.0  # 0 - 255 to 0.0 - 1.0
    if img.ndimension() == 3:
        img = img.unsqueeze(0)

    # ... 一些中间的代码,可能有模型推理的部分 ...

    # 后处理
    # ...

    # 在这里添加代码,确保只在每25帧执行检测
    if vid_path:
        if current_frame % 25 == 0:
            # 执行你的检测代码
            # ...

# ... 一些后期的代码 ...

在这里插入图片描述

运行结果如图:
在这里插入图片描述
这样就减少了很多重复图片。

写在最后:
我觉得csdn是一个能学到技术的地方,那是因为很多大佬的无私奉献。我的每一条博文都是粉丝才可见,若是你们看了觉得我不值得你们关注,取关无可厚非。但是为什么就是有很多人收藏了我的博文然而又取消关注呢,我觉得让我很不舒服,我希望各位看管都是高素质人群,尊重一下创作者辣!不然越来越多这样的行为会打击分享技术的积极性,谢谢!

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Qt和YOLOv5进行检测并在像上绘制检测框可以分为以下几步: 1. 获取YOLOv5模型,并使用PyTorch进行加载。 2. 在Qt界面中添加一个像显示部件(如 QLabel) 3. 通过调用YOLOv5模型的 forward() 函数对输入像进行检测。 4. 处理输出检测结果,在上绘制矩形框并在框内标注对象类别。 5. 显示处理后的像,更新到QLabel中。 还有需要注意的是,检测过程可能比较耗时,建议在另一个线程中进行。 代码实现可能略有复杂, 如果你需要样例代码可以给我更具体的信息或者例子 ### 回答2: 使用YOLOv5进行检测并在像上绘制检测框的过程如下: 1. 导入必要的库和模块,如torch、torchvision等,并加载YOLOv5网络模型。 2. 载入待检测像,并进行一些预处理,例如像缩放、归一化等,以适应模型的输入要求。 3. 将预处理后的输入YOLOv5模型中,进行目标检测。模型将返回检测到的目标的位置信息,如左上角和右下角的坐标。 4. 遍历每个检测到的目标,获取其位置信息。 5. 使用绘函数将检测框绘制在像上,将左上角和右下角的坐标作为参数传入绘函数,并指定线条颜色和线宽等绘属性。 6. 最后,显示带有检测框的像,以便观察检测结果。 需要注意的是,YOLOv5是一个开源的目标检测算法,可以在GitHub上找到其相关代码和模型。在使用YOLOv5进行检测时,需要根据具体情况进行安装配置,并根据项目需求完成相关代码的编写。以上是简要的步骤描述,具体实现可以根据实际情况进行调整和补充。 ### 回答3: YOLOv5是一种目标检测算法,可以通过QT库对像进行检测并在像上检测框。 首先,我们需要使用QT库加载并显示待检测像。可以使用QImage类读取像文件,并通过QPixmap类将像显示在QT应用程序的窗口上。 接下来,我们需要使用YOLOv5模型对像进行检测。可以使用YOLOv5的Python接口进行检测,可以调用Python代码来执行检测任务。可以使用subprocess库在QT应用程序中调用Python脚本,将需要检测像作为参数传递给脚本。 在Python脚本中,可以使用YOLOv5的函数来加载预训练的模型,并对像进行检测YOLOv5输出每个检测到的目标的边界框坐标和类别,可以将这些信息保存下来。 回到QT应用程序中,可以使用QPainter类在像上检测框。可以通过QPainter的drawRect函数绘制矩形,将边界框的坐标作为参数传递给该函数。可以使用QPen类设置矩形的颜色和线条粗细等属性。 最后,更新QT应用程序的窗口,将绘制好的检测框显示在像上。 综上所述,可以通过QT库加载像并调用YOLOv5进行目标检测,再将检测结果像上,从而实现在QT应用程序中对像进行检测检测框的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值