首页 > 编程问答 >从opencv视频文件夹中读取并提取关键点

从opencv视频文件夹中读取并提取关键点

时间:2024-07-30 08:32:55浏览次数:12  
标签:python opencv computer-vision

我的文件夹中有一个视频列表(每个视频 10 秒),我试图循环遍历每个动作视频以提取关键点并将它们保存为 json 文件。

path = "path to video folder"
for file in os.listdir(path):
  cap = cv2.VideoCapture(path+file)
  while cap.isOpened():
    try:
      ret, frame = cap.read()

我遇到了一个问题,提取的数据有一些关键点来自其他视频,我只想运行此代码,以视频完成的停止时间结束,暂停,开始下一个视频。我该如何帮助纠正这个问题?


问题似乎是你的关键点跟踪器没有在每个视频后正确重置。你需要在开始处理新视频时重置跟踪器。遗憾的是,你没有包含关键点提取代码,所以我无法提供具体的解决方案。

但是,我可以提供一个关于如何使用 OpenCV MediaPipe (一个用于姿态估计的强大库)的完整示例:

import cv2
import mediapipe as mp
import os
import json

# 初始化 MediaPipe 姿态估计器
mp_pose = mp.solutions.pose.Pose(
    static_image_mode=False,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5
)

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

# 循环遍历文件夹中的每个视频
for file in os.listdir(path):
    if not file.endswith((".mp4", ".avi")):  # 确保只处理视频文件
        continue

    cap = cv2.VideoCapture(os.path.join(path, file))
    keypoints_data = []

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        # 将帧从 BGR 转换为 RGB
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        # 处理 MediaPipe 姿态估计
        results = mp_pose.process(frame_rgb)

        # 提取关键点
        if results.pose_landmarks:
            frame_keypoints = []
            for landmark in results.pose_landmarks.landmark:
                frame_keypoints.append({
                    'x': landmark.x,
                    'y': landmark.y,
                    'z': landmark.z,
                    'visibility': landmark.visibility
                })
            keypoints_data.append(frame_keypoints)
        else:
            # 如果在帧中未检测到姿态,则附加空列表
            keypoints_data.append([])

        cv2.imshow('Frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

    # 将关键点数据保存为 JSON 文件
    with open(f"{file[:-4]}.json", 'w') as f:
        json.dump(keypoints_data, f)

# 关闭 MediaPipe 姿态估计器
mp_pose.close()

解释:

  1. 导入必要的库: cv2 用于视频处理, mediapipe 用于姿态估计, os 用于文件处理, json 用于保存数据。
  2. 初始化 MediaPipe 姿态估计器。
  3. 循环遍历视频文件夹中的每个文件:
  4. 检查文件是否是视频文件( .mp4 .avi )。
  5. 打开视频文件。
  6. 初始化一个空列表来存储关键点数据。
  7. 循环遍历视频的每一帧:
  8. 读取一帧。
  9. 将帧从 BGR 转换为 RGB(MediaPipe 需要)。
  10. 使用 MediaPipe 处理帧以进行姿态估计。
  11. 如果检测到姿态,则提取关键点坐标(x、y、z)及其可见性并将其附加到 keypoints_data 列表中。如果在帧中未检测到姿态,则附加一个空列表。
  12. 可选:显示带有检测到的关键点的帧。
  13. 在处理完所有帧后:
  14. 释放视频捕获对象。
  15. 关闭所有 OpenCV 窗口。
  16. 将提取的关键点数据保存到 JSON 文件中。
  17. 最后,关闭 MediaPipe 姿态估计器。

此脚本将为每个视频创建一个单独的 JSON 文件,其中包含每帧提取的关键点。这应该可以解决来自不同视频的关键点混合的问题。

标签:python,opencv,computer-vision
From: 73565108

相关文章

  • 即使使用 docker run -dit 命令,python-Docker 容器也会在运行两秒后退出
    我想从此处使用Dockerfile测试自定义kubernetes调度程序:FROMpython:3.7RUNpipinstallkubernetesCOPYscheduler.py/scheduler.pyCMDpython/scheduler.py一旦创建了映像和容器:dockerbuild-tapp.dockercontainerrun-d-it--namemy-sched......
  • Python多重处理,如何避免创建具有百万个对象的元组
    python多处理新手。我有一项任务,涉及访问网络服务数百万次并将响应保存在文件中(每个请求都有单独的文件)。我已经得到了高级工作代码,但对一些事情没有感到困惑。以下两种语法有什么区别?pool=Pool(processes=4)pool.starmap(task,listOfInputParametersTu......
  • Python OpenCV - 显示坏像素检查测试
    我想找到显示器中存在的每个坏像素。坏像素可能是颜色不正确的像素,或者像素只是黑色。显示屏的尺寸为160x320像素。所以如果显示效果好的话,必须有160*320=51200像素。如果显示器没有51200像素,那就是坏的。另外,我想知道每个坏像素的位置。一旦拍摄的图像太大,我将共享一个......
  • 在python日志输出的每一行前面添加变量缩进
    我正在将日志记录构建到一个Python应用程序中,我希望它是人类可读的。目前,调试日志记录了调用的每个函数以及参数和返回值。这意味着,实际上,嵌套函数调用的调试日志可能如下所示:2024-07-2916:52:26,641:DEBUG:MainController.initialize_componentscalledwithargs<control......
  • 使用 DQN 实现 pong,使用 python 中的特征向量而不是像素。我的 DQNA 实现代码正确吗,因
    我正在致力于使用OpenAI的Gym为Pong游戏实现强化学习(RL)环境。目标是训练人工智能代理通过控制球拍来打乒乓球。代理收到太多负面奖励,即使它看起来移动正确。具体来说,奖励函数会惩罚远离球的智能体,但这种情况发生得太频繁,即使球朝球拍移动时似乎也会发生。观察......
  • Python CDLL 无法加载两次
    我正在尝试用python创建一个密码管理器,但遇到了一个问题,一旦加载了一种类型的dll,我就无法加载不同的dll,在这个示例中,我加载了一个dll,并尝试解密加密的密码数据,它工作正常,直到我加载另一个不同的nss3.dll文件,此时它给我一个错误:“过程入口点HeapAlloc无法位于动态链......
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?
    我正在尝试构建一个Web界面来模拟网络设备上的静态接口,该网络设备使用摘要式身份验证和HTTPS。我想出了如何将摘要式身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以向我展示如何实现,请评论我需要使用下面的代码做什么来实现这一点。from......
  • Python:比较 csv 文件并打印相似之处
    我需要比较两个csv文件并打印出它们的相似之处。第一个文件有名称和浓度,第二个文件就像只有名称的“最佳”列表,我需要绘制相似性图表。例如,这就是我的列表的样子:file1-old_file.csvname_id,conc_test1,conc_test2name1,####,####name2,###......
  • Python 类交叉引用
    我用Python创建了一个数独游戏。我有一个:单元格类-“保存”数字可能性单元格组-保存单元格类实例我使用这些组在数独中运行行、列和正方形功能。每个单元格包含所有组,他属于classCell:def__init__(groups):self.groups=groupscla......
  • 如何修复我的 Python Azure Function DevOps Pipeline 上的“找到 1 个函数(自定义)加载
    我正在尝试使用AzureDevOps构建管道将PythonAzureFunction部署到Azure门户。由于某种原因,代码被部署到服务器,但我在尝试访问端点时收到404错误。我收到一个错误,显示1functionsfound(Custom)0functionsloaded,以及在服务器上显示ModuleNotFound......