请给我一份得到Openpose算法热点图和评价的代码
以下是使用OpenCV和Matplotlib库实现的Openpose算法热点图和评价的Python代码:
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 加载模型和配置文件
net = cv2.dnn.readNetFromTensorflow('pose/coco/pose_iter_440000.pb')
inWidth = 368
inHeight = 368
threshold = 0.1
# 定义身体关键点的连接关系
BODY_PARTS = {
"Nose": 0,
"Neck": 1,
"RShoulder": 2,
"RElbow": 3,
"RWrist": 4,
"LShoulder": 5,
"LElbow": 6,
"LWrist": 7,
"RHip": 8,
"RKnee": 9,
"RAnkle": 10,
"LHip": 11,
"LKnee": 12,
"LAnkle": 13,
"REye": 14,
"LEye": 15,
"REar": 16,
"LEar": 17,
"Background": 18
}
# 定义身体关键点连接的顺序
POSE_PAIRS = [
["Neck", "RShoulder"],
["Neck", "LShoulder"],
["RShoulder", "RElbow"],
["RElbow", "RWrist"],
["LShoulder", "LElbow"],
["LElbow", "LWrist"],
["Neck", "RHip"],
["RHip", "RKnee"],
["RKnee", "RAnkle"],
["Neck", "LHip"],
["LHip", "LKnee"],
["LKnee", "LAnkle"],
["Nose", "REye"],
["REye", "REar"],
["Nose", "LEye"],
["LEye", "LEar"]
]
# 读取图像
image = cv2.imread('test.jpg')
# 对图像进行预处理
blob = cv2.dnn.blobFromImage(image, 1.0 / 255, (inWidth, inHeight), (0, 0, 0), swapRB=False, crop=False)
# 运行模型
net.setInput(blob)
out = net.forward()
# 获取关键点
points = []
for i in range(len(BODY_PARTS)):
heatMap = out[0, i, :, :]
_, conf, _, point = cv2.minMaxLoc(heatMap)
x = int((image.shape[1] * point[0]) / out.shape[3])
y = int((image.shape[0] * point[1]) / out.shape[2])
if conf > threshold:
points.append((x, y))
else:
points.append(None)
# 绘制关键点和连接线
for pair in POSE_PAIRS:
partFrom = pair[0]
partTo = pair[1]
idFrom = BODY_PARTS[partFrom]
idTo = BODY_PARTS[partTo]
if points[idFrom] and points[idTo]:
cv2.line(image, points[idFrom], points[idTo], (0, 255, 0), 3)
cv2.circle(image, points[idFrom], 4, (0, 0, 255), thickness=-1, lineType=cv2.FILLED)
cv2.circle(image, points[idTo], 4, (0, 0, 255), thickness=-1, lineType=cv2.FILLED)
# 显示图像
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()
# 计算关键点的热点图
h, w, c = image.shape
heatmap = np.zeros((h, w), dtype=np.float32)
for i in range(len(BODY_PARTS)):
heatMap = out[0, i, :, :]
heatmap += cv2.resize(heatMap, (w, h))
heatmap /= len(BODY_PARTS)
# 显示关键点的热点图
plt.imshow(heatmap, cmap='hot')
plt.show()
# 计算关键点的评价
score = 0
for pair in POSE_PAIRS:
partFrom = pair[0]
partTo = pair[1]
idFrom = BODY_PARTS[partFrom]
idTo = BODY_PARTS[partTo]
if points[idFrom] and points[idTo]:
dist = np.sqrt((points[idFrom][0] - points[idTo][0]) ** 2 + (points[idFrom][1] - points[idTo][1]) ** 2)
score += dist
score /= len(POSE_PAIRS)
print('Score:', score)
需要先下载Openpose算法的模型文件和配置文件,将其保存在pose/coco目录下。将要测试的图像保存在当前目录下并命名为test.jpg。运行代码后会显示图像和关键点的热点图,并输出关键点的评价得分
原文地址: https://www.cveoy.top/t/topic/eRR9 著作权归作者所有。请勿转载和采集!