如何在数据集中聚集每个人的图像?

时间:2018-03-26 03:24:33

标签: python opencv

我有一个目录,其中包含许多由网络摄像头捕获的不同面部图像。 每个人的脸部被捕获10-20次并持续一段时间(例如:personA图像:img_01,img02,img19,img20; personB图像:img_03,img13,img14等)

我想对每个人的所有图像进行聚类,并将它们组合为一个,这样我就可以与人数一样多的聚类。(例如:如果有10个人脸和50个图像在目录中然后我应该得到10个簇或计为10)。我可以使用什么方法对同一个人的图像进行分组。我正在研究Python。请帮助我。

这就是我的文件夹的样子 - >点击1查看屏幕截图1

1 个答案:

答案 0 :(得分:0)

您可以使用名为 k-means 的技术。这将采用数据集并将其聚类到$ k $不同的集群中。如果您知道有10个人,则可以将$ k $设置为10。

但是,您需要考虑图像的尺寸非常高。您需要找到一种通过特征提取来减少此集合的方法。这可以通过几种不同的方式完成。如果您正在使用openCV,那么您可以直接获取人鼻子和眼睛的距离,以及所有这些。这些可以是良好的标识符指标。否则,我建议您构建一种自动编码器,然后使用压缩集作为k-means算法的特征。

检测面部特征

OpenCV具有许多功能,可以完成一整套面部检测功能。我建议使用this tutorial中提供的以下技巧。这将检测鼻子,眼睛和脸部的形状。从这些点,您可以计算一些指标。我建议使用几种不同的比率

  1. 眼睛之间的距离:从鼻子到眼睛的距离。
  2. 眼角之间的距离:嘴角之间的距离
  3. 您可以继续发挥创意并获得更多指标。

    获取数据集

    然后,您将构建一个数据集,其中行是每个单独的图片。然后每列将代表一个功能。这将是您使用图像计算的这些比率。

    将k-means应用于数据集

    然后你可以使用k-means的sklearn包,它有一个示例代码here