我是opencv和一般神经网络的新手,但我对这个主题有一个小背景。
我试图构建一个可以检测照片中某个人脸部的系统。
实际上,我使用opencv训练模型,并且大约有20张照片,我使用Elvis Presley的照片作为例子。首先,我运行一个算法,从所有照片中检测并提取猫王的脸部,并将脸部存储在一个文件夹中。然后我用这些面孔训练模型。之后,我将一些不同个体的图像发送到程序中,并使用haar和模型我尝试检测猫王。
事情是我有大量的误报。
当然,当我用Elvis的脸训练模型时 - >标记为0,而且让我们面对Frank Sinatra(就在与Frank进行相同的面部提取过程之后)我得到了一个很好的分类,然后该模型可以在Elvis和Frank之间进行分类。
但如果我只是在寻找猫王,只用Elvis照片训练网络,那么该模型并不起作用......
如何在许多其他不同的人之间的照片中识别出一个人的脸?唯一的解决方案是用大量的猫王面孔训练我的网络吗?
我正在使用python和opencv,numpy
你能指点我一些更好学习的例子吗?
谢谢!
答案 0 :(得分:0)
我建议你尝试OpenFace,这是一个基于dlib构建的流行的开源人脸识别系统。它使用Haar分类器和CNN等技术对面部进行分类。训练神经网络为每个面部创建面部嵌入,然后给出测试图像,它可以计算距离(误差)以匹配最接近的已知嵌入。
OpenFace对我来说效果非常好,它可以达到目的,但是你必须确保为清晰可见的面部生成面嵌入。 您可以使用许多适用于Python的OpenFace包装器。我最近开发了一个使用它的项目,你可以克隆它。链接在这里: Face Recognition 我在测试时上传了一些截图,它可以清楚地区分同一图像中的多个面孔。
还有另一种实现这一目标的方法,(实验性的)。神经网络可以识别同一图像(视频帧)中的多个对象,有技术和标准模型,如Yolo和SSD,它们专为单次多次目标检测而设计。 Yolo v2 Paper。但识别面部比识别面部要复杂得多,因为大多数时间面看起来都很相似,但与对象的情况不同。您可以研究和开发自己的基于Yolo的神经网络,用于单次多人脸检测。但我认为Dlib和OpenFace可以提供更好的解决方案。