openpose之使用摄像头检测并输出到json文件

编程如画,我是panda!


前言

之前给大家分享了如何搭建openpose环境,并进行了测试案例,但是如果要使用摄像头的话,还需要修改一下运行文件,并且这次会教大家如何输出到json文件 。

如果环境还没有搭建好,请参见我的博客:openpose环境搭建

一、了解输出格式

输出:

如果你使用一张图片进行测试,会得到一个n*25*3的矩阵, n代表检测到了几个人,25代表25个节点,3代表了(x坐标,y坐标,置信度)。

25个节点分别为:

复制代码
// const std::map<unsigned int, std::string> POSE_BODY_25_BODY_PARTS {
//     {0,  "Nose"},
//     {1,  "Neck"},
//     {2,  "RShoulder"},
//     {3,  "RElbow"},
//     {4,  "RWrist"},
//     {5,  "LShoulder"},
//     {6,  "LElbow"},
//     {7,  "LWrist"},
//     {8,  "MidHip"},
//     {9,  "RHip"},
//     {10, "RKnee"},
//     {11, "RAnkle"},
//     {12, "LHip"},
//     {13, "LKnee"},
//     {14, "LAnkle"},
//     {15, "REye"},
//     {16, "LEye"},
//     {17, "REar"},
//     {18, "LEar"},
//     {19, "LBigToe"},
//     {20, "LSmallToe"},
//     {21, "LHeel"},
//     {22, "RBigToe"},
//     {23, "RSmallToe"},
//     {24, "RHeel"},
//     {25, "Background"}
// };

二、使用摄像头

openpose中有很多参数,可以使用参数来控制是否使用摄像头:

python 复制代码
import os
import sys
import cv2
from sys import platform
import argparse
import numpy as np

dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(dir_path)
os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/bin;'
import pyopenpose as op

print(op)
print("成功引入pyopenpose")

parser = argparse.ArgumentParser()
parser.add_argument("--camera", default=0, help="Camera index for capturing video. Default is 0.")
args = parser.parse_known_args()

# Custom Params
params = dict()
params["model_folder"] = "models/"
params["net_resolution"] = "368x256"

# Starting OpenPose
opWrapper = op.WrapperPython()
opWrapper.configure(params)
opWrapper.start()

# Start capturing from the camera
cap = cv2.VideoCapture(int(args[0].camera))

while True:
    # Read a frame from the camera
    ret, frame = cap.read()
    if not ret:
        break

    # Process the frame
    datum = op.Datum()
    datum.cvInputData = frame
    opWrapper.emplaceAndPop(op.VectorDatum([datum]))

    # Display the result
    print("Body keypoints: \n" + str(datum.poseKeypoints))
    cv2.imshow("OpenPose 1.7.0 - Tutorial Python API", datum.cvOutputData)

    # Break the loop when 'q' is pressed
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release resources
cap.release()
cv2.destroyAllWindows()
opWrapper.stop()

如果你想输出到json文件,可以设置参数:

python 复制代码
params["write_json"] = "json_output/"  # 指定保存 JSON 文件的目录

完整代码如下:

python 复制代码
import os
import sys
import cv2
from sys import platform
import argparse
import json  # 添加 json 模块

dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(dir_path)
os.environ['PATH'] = os.environ['PATH'] + ';' + dir_path + '/bin;'
import pyopenpose as op

print(op)
print("成功引入pyopenpose")

parser = argparse.ArgumentParser()
parser.add_argument("--camera", default=0, help="Camera index for capturing video. Default is 0.")
args = parser.parse_known_args()

# Custom Params
params = dict()
params["model_folder"] = "models/"
params["net_resolution"] = "368x256"
params["write_json"] = "json_output/"  # 指定保存 JSON 文件的目录

# Starting OpenPose
opWrapper = op.WrapperPython()
opWrapper.configure(params)
opWrapper.start()

# Start capturing from the camera
cap = cv2.VideoCapture(int(args[0].camera))

while True:
    # Read a frame from the camera
    ret, frame = cap.read()
    if not ret:
        break

    # Process the frame
    datum = op.Datum()
    datum.cvInputData = frame
    opWrapper.emplaceAndPop(op.VectorDatum([datum]))

    # Display the result
    print("Body keypoints: \n" + str(datum.poseKeypoints))

    # Check if JSON file exists and read keypoints from JSON
    json_path = os.path.join(params["write_json"], f"{str(args[0].camera)}.json")
    if os.path.exists(json_path):
        with open(json_path, 'r') as json_file:
            json_data = json.load(json_file)
            keypoints = json_data["people"][0]["pose_keypoints_2d"]
            print("Body keypoints from JSON: \n", keypoints)

    cv2.imshow("OpenPose 1.7.0 - Tutorial Python API", datum.cvOutputData)

    # Break the loop when 'q' is pressed
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release resources
cap.release()
cv2.destroyAllWindows()
opWrapper.stop()

结果:(要把摄像头打开哈,我就不打开了(●'◡'●))

然后会得到json文件夹:

相关推荐
飞翔的佩奇2 小时前
【完整源码+数据集+部署教程】表盘指针检测系统源码和数据集:改进yolo11-CA-HSFPN
python·yolo·计算机视觉·数据集·yolo11·表盘指针检测
Coovally AI模型快速验证5 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
RaymondZhao346 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
飞翔的佩奇6 小时前
【完整源码+数据集+部署教程】二维码与查找模式检测系统源码和数据集:改进yolo11-CSwinTransformer
python·yolo·计算机视觉·数据集·yolo11·二维码与查找模式检测
无规则ai7 小时前
动手学深度学习(pytorch版):第四章节—多层感知机(5)权重衰减
人工智能·pytorch·python·深度学习
网安INF8 小时前
【论文阅读】-《HopSkipJumpAttack: A Query-Efficient Decision-Based Attack》
论文阅读·人工智能·深度学习·网络安全·对抗攻击
qq_526099138 小时前
图像采集卡与工业相机:机器视觉“双剑合璧”的效能解析
图像处理·数码相机·计算机视觉
雷达学弱狗10 小时前
backward怎么计算的是torch.tensor(2.0, requires_grad=True)变量的梯度
人工智能·pytorch·深度学习
CoovallyAIHub10 小时前
为高空安全上双保险!无人机AI护航,YOLOv5秒判安全带,守护施工生命线
深度学习·算法·计算机视觉
才思喷涌的小书虫11 小时前
小白玩转 DINO-X MCP(2):基于 DINO-X MCP 搭建饮食规划工作流
计算机视觉·mcp