使用yolov8和moviepy自动截取视频中人出现的片段

这篇具有很好参考价值的文章主要介绍了使用yolov8和moviepy自动截取视频中人出现的片段。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这么长时间没写博客,其实主要是忙于一个行为实时检测大型项目的开发,最近闲下来就写这篇当年末总结了。这篇文章的起因还是某个业务需求,要求分析视频中有人的部分,没人的部分需要去掉,同时行为检测的数据集如果要自己采集打标,也需要这个步骤。

分析

不想看分析的直接跳到代码复制 ^_^
1.拿到这个问题,我首先就丢给了gpt和一众大语言模型去解决,因为真的不想动手干这种杂活,懒惰之神上身了。

然后我一开始的指令是这样的:
python只要判断视频中有人就行,yolo,YOLO,音视频,目标跟踪,python
给了我一个空壳子:
python只要判断视频中有人就行,yolo,YOLO,音视频,目标跟踪,python
然后我觉得这种简单的需求,cv2应该可以搞定吧,就指导它使用haar级联检测器去检测:
python只要判断视频中有人就行,yolo,YOLO,音视频,目标跟踪,python
在改掉基本的逻辑错误后,我发现,它能检测出人脸的就没几帧!而且这样保存后出来的视频,是几秒钟不同时间的人物动作拼凑,根本达不到要求,这时我才明白我需要的是连贯的人体动作片段,而非抽帧。

2.如何让语言模型理解到底你要干什么:

经过几次尝试,我发现这些语言模型压根不知道我说的片段是什么意思。
于是我使用英文循序渐进的提问,先假设我有两个片段截取:
python只要判断视频中有人就行,yolo,YOLO,音视频,目标跟踪,python
告诉它,我这个视频中有两个segments(片段),要把它截取下来,它用moivepy完成了任务。于是,就可以跟它说我有一个模型来检测人物,我其实并不知道有几个片段,也不知道有几个时间点,请结合上面的moviepy来完成。
python只要判断视频中有人就行,yolo,YOLO,音视频,目标跟踪,python
于是它完美给出了整个框架和逻辑,除了人体检测部分需要我自己实现。

3.实现人体检测

鉴于之前已经用cv2尝试过简单的图像处理,各种方法都不是很满意,那就直接上目标检测模型好了,同时因为需要连贯的人体检测,不能说我这一帧检测到,下一帧突然消失,所以要加上目标跟踪,那最轻松的方法就是使用yolov8直接一行实现:

results = model.track(frame, persist=True, classes=0,verbose=False)

后面的参数persist表示后一帧要对前一帧产生的结果进行预测,classes=0表示只预测people这一类,其他不是我们需要关心的,verbose=False纯粹是因为yolo输出的打印太烦了,我不关心,直接关掉。
然后查阅可知results.boxes.shape返回的是预测出的目标向量的形状,那么第一维度为0时表示没有预测到,基于这个就可以实现判断。

代码

from ultralytics import YOLO
import moviepy.editor as mp
import cv2
model = YOLO('yolov8n.pt')
# 定义输入片段
input_file = "input.mp4"

# 定义相关片段变量
segment_start = None
segment_end = None
segments = []

# 用moviepy打开视频源
video = mp.VideoFileClip(input_file)

# 循环
for idx, frame in enumerate(video.iter_frames()):
    people_detected = False
    # 默认读取RGB,需转换成BGR输入
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
    #推理
    results = model.track(frame, persist=True, classes=0,verbose=False)
    #对结果进行判断
    for r in results:
      if r.boxes.shape[0] != 0:
        people_detected = True

    if people_detected and segment_start is None:
        # 开始新的片段
        segment_start = idx / video.fps
    elif not people_detected and segment_start is not None:
        # 结束当前片段
        segment_end = idx / video.fps
        if (segment_end - segment_start) > 1:
          segments.append((segment_start, segment_end))
          print((segment_start, segment_end))
        segment_start = None
        segment_end = None

# 如果一个片段直到结尾,就截取到结束
if segment_start is not None:
    segment_end = video.duration
    segments.append((segment_start, segment_end))

# 提取片段并写入本地文件
for i, (segment_start, segment_end) in enumerate(segments):
    segment_name = f"segment{i+1}.mp4"
    segment = video.subclip(segment_start, segment_end)
    segment.write_videofile(segment_name)

#关闭视频源
video.reader.close()

这里if (segment_end - segment_start) > 1可以去掉,我加上是为了去掉太短的人物片段,可能是因为模型误报和不稳定导致的,如果想要更准也可以把yolov8n换成yolov8s或者x,模型越大效果越好。

跑出来结果如下:
python只要判断视频中有人就行,yolo,YOLO,音视频,目标跟踪,python
有几个片段就会生成几个,segment1,segment2…以此类推。文章来源地址https://www.toymoban.com/news/detail-768099.html

到了这里,关于使用yolov8和moviepy自动截取视频中人出现的片段的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI审核视频--我们选择YOLOv8

    最近接到一个任务:用AI审核视频,帮助发现视频中的问题,提高运营审核的生产力。 这应该属于 计算机视觉 (Computer Vision)的领域。 计算机视觉的主要目标是:复刻人类视觉的强大能力。 计算机视觉要解决的主要问题是:给出一张图片,计算机视觉系统必须识别出图像中

    2024年04月09日
    浏览(43)
  • YOLOv8改进 | 可视化热力图 | 支持YOLOv8最新版本密度热力图,和视频热力图

    本文给大家带来的机制是集成了YOLOv8最新版本的可视化热力图功能,热力图作为我们论文当中的必备一环,可以展示出我们呈现机制的有效性,本文的内容支持YOLOv8最新版本的根据密度呈现的热力图,同时支持视频检测,根据视频中的密度来绘画热力图。 在开始之前给大家推

    2024年02月19日
    浏览(42)
  • 用python调用YOLOV8预测视频并解析结果----错误解决

    1 同济子豪兄关键点检测教程视频 2 同济子豪兄的GitHub代码参考 3 提出问题的小伙伴的博客 本节调用了YOLOV8的预训练模型来对视频进行预测,采用的是python的API,并将关键点检测的结果可视化。在未更改代码之前,跑出来的效果如图所示。如果检测到的点数少于16,会被自

    2024年01月19日
    浏览(27)
  • 模型实战(9)之YOLOv8预测模块predictor详解、预测视频后同时保存结果视频+目标帧

    Ultralytics YOLOv8Ultralytics YOLOv8是最新版本的YOLO对象检测和图像分割模型。 作为一种尖端的、最先进的(SOTA)模型,YOLOv8建立在以前版本的成功基础上,引入了新的功能和改进,以增强性能、灵活性和效率。 YOLOv8的设计非常注重速度、尺寸和精度,使其成为各种视觉人工智能任务

    2024年02月02日
    浏览(26)
  • YOLOv8/YOLOv7/YOLOv5-火灾检测、烟雾检测系统-界面+视频实时检测+数据集(算法-毕业设计)

    本项目通过yolov8/yolov7/yolov5训练自己的数据集,并开发可视化界面,实现了一个火灾烟雾实时检测系统,操作视频和效果展示如下: 【yolov8/yolov7/yolov5火灾烟雾检测系统-界面+视频实时检测+数据集(原创算法-毕业设计)】 https://www.bilibili.com/video/BV1FG41127H3/?share_source=copy_webvd_sou

    2024年02月04日
    浏览(42)
  • 易语言调用Yolov8与Yolov8综合工具使用

    相信大家也看了不少的Yolo系列那些繁杂的理论, Yolo的官方网站也免费公布了英文的源代码。 相信有些小伙伴们有一定的基础,经过了一段的深入研究。 已经能够调用并且使用成功了。 但是肯定还有一部分,基础不是很强的小伙伴们还不能成功的使用。 但是又想去感受使用

    2024年02月07日
    浏览(31)
  • 【YOLO】基于YOLOv8实现自定义数据的自动标注(针对VOC格式的数据集)

    利用yolov8的检测模型实现数据集的自标注,针对VOC数据集,.xml文件,labelimg标注工具 yolov8模型的训练可以参考笔者的博客 【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测 训练好自定义的模型,就可以执行下面的代码实现模型自标注数据集 修改下面三个参数即

    2024年02月11日
    浏览(36)
  • Yolov7, Yolov8使用

    【小白教学】如何用YOLOv7训练自己的数据集 - 知乎 YOLOv7——训练自己的数据集 - 代码网 conda create --name=yolov7 python=3.8 #the version of your python3  *** 这里需要注意如果 torch 和torchvion版本太高,会导致GPU不可用,因为GPU drive版本太低。可以使用低版本的:  pip install torch==1.12.1 t

    2024年01月20日
    浏览(36)
  • 使用ffmpeg截取视频片段

    本文将介绍2种使用ffmpeg截取视频的方法 指定截取视频的 开始时间 和 结束时间 ,进行视频截取 指定截取视频的 开始时间 和 截取的秒数 ,进行视频截取 两种截取方式的命令行如下 优先使用 或下面这种(不推荐使用) 字段说明 除非对保持原始视频码流有强烈需求,否则不

    2024年02月10日
    浏览(31)
  • 使用ffmpeg进行视频截取

    通过ffmpeg -i命令查看视频基本信息 指定截取视频的 开始时间 和 结束时间 ,进行视频截取 或者: 指定截取视频的 开始时间 和 截取的秒数 ,进行视频截取 -i ./input.mp4  指定输入视频路径 -ss 00:00:10  指定截取视频的开始时间点 -to 00:00:15  指定截取视频的结束时间点 -t 5 指定

    2024年01月18日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包