Python 计算人体关键点余弦相似度并找出最相似点
Python 计算人体关键点余弦相似度并找出最相似点
本文使用 Python 代码实现计算两个动作人体关键点之间的余弦相似度,并找出最相似的关键点对。代码简洁易懂,并提供详细的注释。
def cos_sim(vector_a, vector_b):
'计算两个向量之间的余弦相似度'
import numpy as np
vector_a = np.mat(vector_a)
vector_b = np.mat(vector_b)
num = float(vector_a * vector_b.T)
denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
cos = num / denom
sim = cos
return sim
keypoints1 = [[1,2],[3,4]]
keypoints2 = [[2,3],[4,5]]
sim_list = []
for i in range(len(keypoints1)):
for j in range(len(keypoints2)):
sim_list.append(cos_sim(keypoints1[i], keypoints2[j]))
print(sim_list)
max_index = sim_list.index(max(sim_list))
if max_index%2 == 0:
print('keypoints1中的第',int(max_index/2+1),'个关键点与keypoints2中的第',int(max_index/2+1),'个关键点最相似')
else:
print('keypoints1中的第',int(max_index/2+1),'个关键点与keypoints2中的第',int(max_index/2+2),'个关键点最相似')
代码解析:
cos_sim
函数:- 计算两个向量之间的余弦相似度。
- 使用
numpy
库进行向量运算。 - 返回余弦相似度
sim
。
keypoints1
和keypoints2
:- 两个动作的人体关键点列表,每个列表包含多个关键点坐标。
- 循环计算所有关键点对的相似度:
- 使用两层循环遍历所有关键点对,并计算它们的余弦相似度。
- 将所有相似度存储在
sim_list
列表中。
- 找出最相似点:
- 找到
sim_list
中最大值的索引max_index
。 - 根据
max_index
计算出最相似点在keypoints1
和keypoints2
中的索引。 - 打印出最相似点的索引。
- 找到
使用场景:
- 人体动作识别
- 姿势估计
- 计算机视觉应用
改进方向:
- 可以根据具体应用场景调整关键点提取方法和相似度计算方法。
- 可以添加图形化界面,方便用户查看关键点和相似度结果。
- 可以将代码封装成函数或类,方便在其他项目中使用。
原文地址: https://gggwd.com/t/topic/lpZP 著作权归作者所有。请勿转载和采集!