人体和手部姿态估计 Python 代码示例
这段代码使用预训练的人体姿态估计模型和手部姿态估计模型来检测图像中的人体和手部姿态。代码首先加载必要的库,包括 cv2 用于图像处理,matplotlib.pyplot 用于绘图,copy 用于复制图像,numpy 用于数组操作,以及 src 文件夹中的模型和工具函数。
代码定义了两个模型:body_estimation 用于人体姿态估计,hand_estimation 用于手部姿态估计。然后加载测试图像,并使用 body_estimation 模型进行人体姿态估计。
接着,代码检测图像中所有手的区域,并使用 hand_estimation 模型分别对每个手进行姿态估计。最后,将所有手的关键点绘制在图像上,并显示结果。
注意: 这段代码没有卷积操作,而是使用预训练的模型来进行姿态估计。
以下是代码的详细步骤:
- 导入必要的库
import cv2
import matplotlib.pyplot as plt
import copy
import numpy as np
from src import model
from src import util
from src.body import Body
from src.hand import Hand
- 加载模型
body_estimation = Body('model/body_pose_model.pth')
hand_estimation = Hand('model/hand_pose_model.pth')
- 加载测试图像
test_image = 'images/demo.jpg'
oriImg = cv2.imread(test_image) # B,G,R order
- 进行人体姿态估计
candidate, subset = body_estimation(oriImg)
canvas = copy.deepcopy(oriImg)
canvas = util.draw_bodypose(canvas, candidate, subset)
- 检测手部区域
hands_list = util.handDetect(candidate, subset, oriImg)
- 对每个手进行姿态估计
all_hand_peaks = []
for x, y, w, is_left in hands_list:
peaks = hand_estimation(oriImg[y:y+w, x:x+w, :])
peaks[:, 0] = np.where(peaks[:, 0]==0, peaks[:, 0], peaks[:, 0]+x)
peaks[:, 1] = np.where(peaks[:, 1]==0, peaks[:, 1], peaks[:, 1]+y)
all_hand_peaks.append(peaks)
- 绘制关键点
canvas = util.draw_handpose(canvas, all_hand_peaks)
- 显示结果
plt.imshow(canvas[:, :, [2, 1, 0]])
plt.axis('off')
plt.show()
这段代码示例展示了如何使用预训练模型进行人体和手部姿态估计。您可以根据自己的需求修改代码,例如加载不同的图像或使用不同的模型。
原文地址: https://www.cveoy.top/t/topic/fZvY 著作权归作者所有。请勿转载和采集!