You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenCV批量提取视频关键点时数据串扰问题的修正方法

问题修正方案

你的问题核心是未正确终止单视频的帧循环、未隔离各视频的关键点数据、资源未及时释放,导致不同视频的关键点混在一起。以下是具体修正步骤和完整代码:

关键修正点

  • 规范路径拼接:用os.path.join()避免因路径分隔符缺失导致的文件读取错误
  • 每段视频单独初始化关键点存储:确保每段视频的数据独立,不与上一段累加
  • 正确判断视频结束:当cap.read()返回的ret为False时,立即终止当前视频的帧循环
  • 释放视频资源:处理完单视频后调用cap.release(),避免资源占用影响后续视频读取
  • 对应保存JSON:每段视频处理完成后,单独保存为与原视频文件名对应的JSON文件

修正后的完整代码

import os
import cv2
import json

# 视频文件夹路径
video_path = "path to video folder"

# 遍历文件夹中的所有文件
for filename in os.listdir(video_path):
    # 只处理视频文件(可根据实际格式调整后缀)
    if filename.endswith(('.mp4', '.avi', '.mov')):
        # 规范拼接视频文件的完整路径
        full_video_path = os.path.join(video_path, filename)
        # 初始化当前视频的关键点存储列表(每段视频单独初始化,避免数据混入)
        video_keypoints = []
        
        # 打开视频文件
        cap = cv2.VideoCapture(full_video_path)
        if not cap.isOpened():
            print(f"无法打开视频文件: {filename}")
            continue
        
        # 循环读取视频帧
        while True:
            ret, frame = cap.read()
            # 当ret为False时,说明视频帧已读取完毕,终止循环
            if not ret:
                break
            
            # --- 这里替换成你的关键点提取逻辑 ---
            # 示例:假设你用某个模型提取到当前帧的keypoints
            # keypoints = your_keypoint_detector(frame)
            # video_keypoints.append(keypoints)
            # --- 关键点提取逻辑结束 ---
        
        # 释放当前视频的资源
        cap.release()
        
        # 将当前视频的关键点保存为JSON文件
        json_filename = os.path.splitext(filename)[0] + ".json"
        json_save_path = os.path.join(video_path, json_filename)
        with open(json_save_path, 'w', encoding='utf-8') as f:
            json.dump(video_keypoints, f, ensure_ascii=False, indent=2)
        
        print(f"已完成视频 {filename} 的关键点提取并保存为 {json_filename}")

额外说明

  • 请根据你实际使用的关键点检测模型,替换代码中--- 关键点提取逻辑 ---部分的内容
  • 如果你的视频格式不是代码中列出的.mp4/.avi/.mov,请补充到endswith()的参数中
  • 若需要跳过非视频文件,if filename.endswith(...)的判断可以避免处理无关文件

内容的提问来源于stack exchange,提问作者hishan lu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:45:56