logo

Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)

作者:渣渣辉2024.02.17 01:58浏览量:40

简介:本文将介绍如何使用Python、OpenCV和OpenPose库实现人体姿态估计,即检测人体的关键点。我们将首先安装必要的库,然后通过一个简单的示例来展示如何使用这些库进行人体姿态估计。

在Python中,我们可以使用OpenCV和OpenPose库来实现人体姿态估计,也称为人体关键点检测。首先,我们需要安装这些库。如果你还没有安装,可以通过pip来安装:

  1. pip install opencv-python
  2. pip install openpose

接下来,我们将通过一个简单的示例来展示如何使用这些库进行人体姿态估计。这个示例将使用OpenPose库来检测人体的21个关键点,包括头部、颈部、肩膀、肘部、手腕等。

首先,我们需要导入必要的库:

  1. import cv2
  2. import numpy as np
  3. import openpose as op

然后,我们可以创建一个OpenPose对象,并设置一些参数:

  1. # 创建OpenPose对象
  2. op_model = op.Model(model_folder='/path/to/openpose', model_format='caffemodel', use_gpu=True)
  3. # 设置图像大小和关键点数量
  4. image_size = (640, 480)
  5. num_keypoints = 21

接下来,我们可以加载一张图像,并使用OpenPose来检测人体的关键点:

  1. # 加载图像
  2. image = cv2.imread('path/to/image.jpg')
  3. image = cv2.resize(image, image_size)
  4. image = np.transpose(image, [2, 0, 1]) # OpenPose需要通道在最后一个维度上
  5. # 使用OpenPose进行人体姿态估计
  6. outputs = op_model.predict(image)
  7. keypoints = outputs['keypoints'] # 获取关键点坐标

现在,我们可以将检测到的关键点绘制在图像上:

  1. # 将关键点坐标转换为图像上的像素坐标
  2. keypoints = np.transpose(keypoints, [1, 0]) # OpenPose返回的keypoints的形状是[num_keypoints, 3],需要转换为[3, num_keypoints]才能直接用于cv2.circle()函数绘制圆点。
  3. keypoints = keypoints * np.array(image_size) + (image_size[0] / 2, image_size[1] / 2) # 将关键点坐标转换到图像中心。由于OpenPose的关键点坐标是基于原图的,需要加上图像中心作为偏移量。
  4. keypoints = keypoints.astype(int) # 将浮点数坐标转换为整数坐标。cv2.circle()函数只接受整数坐标。
  5. # 在图像上绘制关键点
  6. for i in range(num_keypoints):
  7. cv2.circle(image, (keypoints[i, 0], keypoints[i, 1]), 5, (0, 255, 0), -1) # 在图像上绘制关键点,半径为5的圆形,颜色为绿色。-1表示填充圆形。

最后,我们可以显示图像:

```python

显示图像

cv2.imshow(‘image’, image)
cv2.waitKey(0) # 按任意键关闭窗口
cv2.destroyAllWindows() # 销毁所有窗口

相关文章推荐

发表评论