YOLO vid_stride参数视频处理异常,如何设置实现30秒间隔预测?
解决每隔30秒预测一次的参数调整问题
首先明确核心计算:你的视频帧率是25fps,30秒对应的帧数是 25 * 30 = 750 帧,也就是每间隔750帧需要执行一次预测。
你之前设置vid_stride=750出现异常的原因是,vid_stride的作用是连续采样时的帧步长(即每跳过vid_stride-1帧取一帧处理),但它不是用来实现“间隔固定时间点预测”的参数,直接设置大值会导致仅采样极少帧,保存的片段自然很短。
要实现每隔30秒预测一次的需求,有两种可行方案:
方案1:手动控制采样帧(推荐)
利用stream=True的迭代特性,手动计数帧索引,每750帧执行一次预测并保存结果:
from ultralytics import YOLO model_path = "/content/best.pt" model = YOLO(model_path) frame_count = 0 # 每750帧执行一次预测(对应30秒) sample_interval = 25 * 30 for r in model.predict(source="/content/myvideo.mp4", stream=True): if frame_count % sample_interval == 0: # 对当前帧执行预测并保存结果 r.save() frame_count += 1
方案2:指定预测的目标帧索引
如果已经明确需要预测的帧位置(0、750、1500...),可以直接通过frames参数传入这些索引,让模型只处理指定帧:
from ultralytics import YOLO model_path = "/content/best.pt" model = YOLO(model_path) fps = 25 interval_sec = 30 total_frames = 7478 # 生成需要预测的帧索引列表 target_frames = list(range(0, total_frames, fps * interval_sec)) # 仅处理指定帧并保存结果 model.predict(source="/content/myvideo.mp4", save=True, frames=target_frames)
注意事项
- 如果你需要的是每隔30秒对一个短片段(比如连续几帧)进行预测,而不是单帧,可以在触发预测时,连续处理接下来的N帧(比如9帧),再跳过剩余的750-N帧。
save=True在处理单帧时会生成仅含单帧的视频片段,若需要将所有预测帧合并成一个视频,可以后续用视频处理工具(如OpenCV)拼接结果。
内容的提问来源于stack exchange,提问作者sibhive
相关产品推荐
相关产品推荐

