如何根据图像中的人脸特征点确定人脸相似度?
how to determine face similarity based on face landmark in an image?
我正在基于 dlib 库提取人脸标志
从我得到的图像中有一个元组列表
P1 = [(277, 288), (248, 290), (182, 291), (210, 291), (230, 347)]
P10 = [(349, 291), (307, 278), (220, 247), (255, 260), (248, 346)]
P1
The left eyes on (277, 288), (248, 290)
The right eyes on (182, 291), (210, 291)
Nose tip on (230, 347)
P10
The left eyes on (349, 291), (307, 278)
The right eyes on (220, 247), (255, 260)
Nose tip on (248, 346)
我曾尝试使用欧几里得距离,但我认为这不是确定与这些地标的相似性的正确方法。
我想知道如何从我提取的那些地标中获取相似度值?
我按照以下方式理解您的问题:您需要测量 5 边形(或 2D 点的 5 元组)的相似程度。如果是这样,您可能可以使用 Procrustes 分析来完成该任务。 scipy.spatial.procrustes
应该可以解决问题:
https://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.spatial.procrustes.html
你应该寻找 disparity
:
import scipy.spatial
d = scipy.spatial.procrustes(P10,P1)[-1]
print(d) #prints 0.001937599061578668
如果我没记错的话越小那个值越相似的记录。请注意,这是对比例不敏感的,即 5 边形,如果相同形状的 5 边形大 2 倍,将给出 0.0
(c.f。link 中的示例)。
我正在基于 dlib 库提取人脸标志
从我得到的图像中有一个元组列表
P1 = [(277, 288), (248, 290), (182, 291), (210, 291), (230, 347)]
P10 = [(349, 291), (307, 278), (220, 247), (255, 260), (248, 346)]
P1
The left eyes on (277, 288), (248, 290)
The right eyes on (182, 291), (210, 291)
Nose tip on (230, 347)
P10
The left eyes on (349, 291), (307, 278)
The right eyes on (220, 247), (255, 260)
Nose tip on (248, 346)
我曾尝试使用欧几里得距离,但我认为这不是确定与这些地标的相似性的正确方法。
我想知道如何从我提取的那些地标中获取相似度值?
我按照以下方式理解您的问题:您需要测量 5 边形(或 2D 点的 5 元组)的相似程度。如果是这样,您可能可以使用 Procrustes 分析来完成该任务。 scipy.spatial.procrustes
应该可以解决问题:
https://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.spatial.procrustes.html
你应该寻找 disparity
:
import scipy.spatial
d = scipy.spatial.procrustes(P10,P1)[-1]
print(d) #prints 0.001937599061578668
如果我没记错的话越小那个值越相似的记录。请注意,这是对比例不敏感的,即 5 边形,如果相同形状的 5 边形大 2 倍,将给出 0.0
(c.f。link 中的示例)。