在大多数人脸识别SDK中,它只提供两个主要功能
>检测面部并从照片中提取模板,这称为检测.
>比较两个模板并返回相似的分数,这称为识别.
然而,除了这两个功能之外,我正在寻找的是用于将具有相似面部的照片分组在一起的算法或SDK,例如,基于相似的分数.
谢谢
最佳答案 首先,执行步骤1以提取模板,然后通过对所有可能的对应用第二步,将每个模板与所有其他模板进行比较,获得它们的相似性得分.
根据此相似性得分对匹配进行排序,确定阈值并将超过它的模板组合在一起.
举例来说,以下案例:
十个模板:A,B,C,D,E,F,G,H,I,J.
得分在0到100之间.
相似度阈值:80.
相似表:
A B C D E F G H I J
A 100 85 8 0 1 50 55 88 90 10
B 85 100 5 30 99 60 15 23 8 2
C 8 5 100 60 16 80 29 33 5 8
D 0 30 60 100 50 50 34 18 2 66
E 1 99 16 50 100 8 3 2 19 6
F 50 60 80 50 8 100 20 55 13 90
G 55 15 29 34 3 20 100 51 57 16
H 88 23 33 18 2 55 51 100 8 0
I 90 8 5 2 19 13 57 8 100 3
J 10 2 8 66 6 90 16 0 3 100
排序匹配列表:
AI 90
FJ 90
是99
AH 88
AB 85
CF 80
——-< – 阈值截止线
DJ 66
…….
遍历列表直到阈值截止点(其中值不再超过它),为每个模板维护完整的模板集和关联集,从而获得最终的组:
// Empty initial full templates set
fullSet = {};
// Iterate through the pairs list
foreach (templatePair : pairList)
{
// If the full set contains the first template from the pair
if (fullSet.contains(templatePair.first))
{
// Add the second template to its group
templatePair.first.addTemplateToGroup(templatePair.second);
// If the full set also contains the second template
if (fullSet.contains(templatePair.second))
{
// The second template is removed from the full set
fullSet.remove(templatePair.second);
// The second template's group is added to the first template's group
templatePair.first.addGroupToGroup(templatePair.second.group);
}
}
else
{
// If the full set contains only the second template from the pair
if (fullSet.contains(templatePair.second))
{
// Add the first template to its group
templatePair.second.addTemplateToGroup(templatePair.first);
}
}
else
{
// If none of the templates are present in the full set, add the first one
// to the full set and the second one to the first one's group
fullSet.add(templatePair.first);
templatePair.first.addTemplateToGroup(templatePair.second);
}
}
列表中的执行详细信息:
AI: fullSet.add(A); A.addTemplateToGroup(I);
FJ: fullSet.add(F); F.addTemplateToGroup(J);
BE: fullSet.add(B); B.addTemplateToGroup(E);
AH: A.addTemplateToGroup(H);
AB: A.addTemplateToGroup(B); fullSet.remove(B); A.addGroupToGroup(B.group);
CF: C.addTemplateToGroup(F);
最后,您最终得到以下相似性组:
A - I, H, B, E
C - F, J