用opencv做人脸识别 如何识别陌生人?

发布网友 发布时间:2022-04-22 10:11

我来回答

1个回答

热心网友 时间:2022-05-22 01:45

如果某个识别对象和训练库中的某一个很匹配,那么就会有很高的相似度。


如果识别对象不在训练库中,那么就算是返回了结果,相似度也不会很高,只不过是数值上的最优解。


所以,设置一个相似度的阀值(THREADHOLD), 最匹配误差(leastDistSq)大于这个阀值就可以判断为不在训练库中!


...

  if ( leastDistSq > THREADHOLD ) {
      return -1;
  }
  
  return iNearest;  
}

追问能否请教一下相似度的阀值(THREADHOLD)应该怎么样设定呢?依据什么来设定?

追答这个可以使用测试来得出,你用一些匹配的人脸去识别,再用一些不匹配的人脸去识别,分别将运行时最终的leastDistSq输出出来。这样就得到了两组数据,你的THREADHOLD只要能将两组数据很好的区分开就好了!

假如你得到两组leastDistSq数据:

匹配的: 0.2, 0.12, 0.15, 0.3, 0.21
不匹配的:0.5, 1.12, 3.15, 5.3, 3.21

那么,可以看到所有匹配的leastDistSq都小于0.4,反之亦然。所以如果我们来用0.4来做阀值,所有的均可以正确区分。

如果你的人脸识别算法本身精确度不高的话,匹配的数值和不匹配的可能有重叠的部分,只要找一个数字,能够尽可能多的正确区分就可以了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com