Python 查找面标记之间的欧氏距离
我有多个帧,我使用Python 查找面标记之间的欧氏距离,python,numpy,euclidean-distance,Python,Numpy,Euclidean Distance,我有多个帧,我使用Retinaface检测到每个帧中的人脸。我想用它们的地标来追踪这些脸 为了找到两个地标之间的相似性,我尝试计算欧氏距离: 输入: landmark_1 = [1828, 911], [1887, 913], [1841, 942], [1832, 974], [1876, 976] landmark_2 = [1827, 928], [1887, 926], [1848, 963], [1836, 992], [1884, 990] euclidean_dist(landm
Retinaface
检测到每个帧中的人脸。我想用它们的地标来追踪这些脸
为了找到两个地标之间的相似性,我尝试计算欧氏距离:
输入:
landmark_1 = [1828, 911], [1887, 913], [1841, 942], [1832, 974], [1876, 976]
landmark_2 = [1827, 928], [1887, 926], [1848, 963], [1836, 992], [1884, 990]
euclidean_dist(landmark_1, landmark_2)
>> 1424.9424549784458
参考其他链接后,我编写了以下函数,但生成的值非常高:
def欧几里德距离(向量x,向量y):
向量x,向量y=np.数组(向量x),np.数组(向量y)
如果len(向量_x)!=len(向量y):
引发异常('向量必须是相同的维度')
ans=和((向量_x[dim]-向量_y[dim])**2表示范围内的dim(len(向量_x)))
返回np.sqrt(np.sum(ans**2))
输出:
landmark_1 = [1828, 911], [1887, 913], [1841, 942], [1832, 974], [1876, 976]
landmark_2 = [1827, 928], [1887, 926], [1848, 963], [1836, 992], [1884, 990]
euclidean_dist(landmark_1, landmark_2)
>> 1424.9424549784458
(本例中应为较小的值)
我猜代码只能用于一维向量,但我真的被困在这里了。任何帮助都将不胜感激。看起来你在两次摆正答案(
ans**2
)。但您也可以稍微简化函数:
def欧几里德距离(向量x,向量y):
向量x,向量y=np.数组(向量x),np.数组(向量y)
返回np.sqrt(np.sum((向量x-向量y)**2,轴=-1))
当向量是不兼容的形状时,这将自动引发异常
编辑:如果您使用
轴=-1
它将在数组的最后一个轴上求和,因此您可以使用二维向量数组。看起来您将答案平方两次(ans**2
)。但您也可以稍微简化函数:
def欧几里德距离(向量x,向量y):
向量x,向量y=np.数组(向量x),np.数组(向量y)
返回np.sqrt(np.sum((向量x-向量y)**2,轴=-1))
当向量是不兼容的形状时,这将自动引发异常
编辑:如果您使用轴=-1
它将在数组的最后一个轴上求和,因此您可以使用二维向量数组。您也可以使用
你也可以用