【问题标题】:How to cluster images of each person in a dataset? [closed]如何对数据集中每个人的图像进行聚类? [关闭]
【发布时间】:2018-03-26 03:24:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: python opencv


    【解决方案1】:

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

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


    检测面部特征

    OpenCV 有很多功能可以做大量的面部检测工作。我建议使用this tutorial 中介绍的以下技术。这将检测鼻子、眼睛和脸型。然后,您可以从这些点计算一些指标。我建议使用几个不同的比率

    1. 两眼之间的距离:鼻子到眼睛的距离。
    2. 眼角之间的距离:嘴角之间的距离

    您可以不断发挥创意并获得更多指标。

    获取数据集

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

    将 k-means 应用于数据集

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

    【讨论】:

    • 能否详细介绍一下自动编码器和压缩集的功能
    • 您的数据目前是什么样的?只是图片?
    • 我添加了我的数据截图的链接
    • 我进行了编辑,添加了更多信息。
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 2015-05-17
    • 1970-01-01
    • 2011-12-13
    • 2020-03-23
    • 1970-01-01
    • 2017-01-28
    • 2021-07-27
    相关资源
    最近更新 更多