我有网络摄像头,可以检测人脸并将其存储在图像存储库中。在存储库中,只存储面(图像),其中我有多个复制面。有没有可以检测到重复面孔的选项?
我尝试通过计算图像的哈希值,但它只能检测到重复的图像而不是面部。请提出最佳解决方案。
我尝试使用链接https://www.tensorflow.org/api_docs/python/tf/contrib/learn/KMeansClustering,但我无法输入图像并执行。
由于 阿维纳什
答案 0 :(得分:2)
面部检测 =识别面部出现在图像中的位置,并找出它在图像中的位置。
面部识别 =将面部与已知人物的身份相匹配,或者根据他们是同一个人的图像,将多个面部图像相互匹配。
您说您的网络摄像头(至少)进行了人脸检测。您的问题表明您也想要表彰。
这两个过程都需要提取图像中的高级不变量。这些不变特征表示的计算几乎是现代计算机视觉的最前沿。简单地散列像素值与光年相距几年:只要一个像素的强度甚至在一个通道中甚至一个级别变化,图像的散列将以任意程度相差。当然,像这样的微小变化不会改变图像中脸部的身份。像素级别的更大,更大的变化不一定会改变身份 - 它们可能是由于头部的旋转,不同的光照条件,胡须/太阳镜/发型变化等等。
如果您说您的网络摄像头"检测到面孔",那是由于网络摄像头制造商提供的面部检测技术吗?如果是这样,请从他们的API文档开始。也许他们也支持面对识别?检查一下,然后google"面部识别库"比较其他软件方法来解决这个复杂问题。
您可能决定进一步探索的一个选项是OpenCV,它具有Python绑定,并包含用于检测(使用CascadeClassifier
对象)和识别(使用FaceRecognizer
)的工具。这是一个教程:http://docs.opencv.org/2.4/modules/contrib/doc/facerec/tutorial/facerec_video_recognition.html
大多数"认可"方法是监督,因为它们需要一套训练集"预先指定。也许你的应用程序允许这样做:也许你事先知道谁会在照片中并且已经有他们的照片,每个都与身份相关联。 (例如,Facebook的面部识别能够利用人们先前在照片中标记面部的事实,从而为与特定身份相关联的图像提供多个训练点。)如果不是,那么您可以使用。我们必须提出一些即时建立训练集的方案,并不断或定期更新训练。这种特定的人脸识别问题子类型可以描述为"无监督的人脸聚类" - 即,将面部图像分组在一起,而不事先知道它们中的任何一个的身份。 Facebook也在某种程度上这样做。这更接近最前沿的前沿,您可能需要深入研究计算机科学文献,以弄清楚它是如何完成的。请参阅此处,例如:http://bitsearch.blogspot.com/2013/02/unsupervised-face-clustering-with-opencv.html