有没有简单的方法来判断给定的图像是否是人脸还是其他东西(希望不需要训练)?
我的想法是构建每张图像的特征向量,然后应用一些聚类方法(例如k-means,k=2)。但即使得到了好的聚类结果,我也不确定区分人脸/非人脸的最佳标准是什么?
回答:
特征分解通过在数据空间中寻找高方差的方向来降低连续域的维度。K-means在点密度高的空间中寻找聚类。你似乎把它们混在一起了,完全忽略了你如何首先获得人脸特征(你如何缩放、旋转和裁剪你想要检查的任何东西)。
你不需要训练Haar检测器,因为它们已经为人脸训练好了。它们检测人脸,而不是识别其身份。你只需要像@人名上面建议的那样,将代码与训练后获得的参数文件一起移植即可(这些训练已经完成)。
不过,毫无思考地复制粘贴代码并没有多大意义。阅读一些关于Haar的内容。试着理解
- 它们为什么有效 – 人脸在中间空间尺度上具有最明显的特征,如眼睛、鼻子、眉毛。太小(瞳孔大小)或太大(整个脸的大小)的特征不太有用。
- 为什么Haar优于小波或Gabor – Haar只是Gabor的原始(方形)近似,但由于它们可以用积分图像快速计算,因此优于更精确但速度较慢的对应物;
- 有什么限制 – Haar有自己的空间尺度和方向,但可以快速重新计算为另一个尺度。
- 如何训练Haar分类器(你试图避免的最激动人心的主题)。AdaBoost是训练由多个Haar组成的更复杂分类器的一种方法。最后,为了加速处理,你可以问一个稍微不同的问题,而不是找到一张脸。即,你可以尝试快速排除图像中不可能是人脸的区域。这被称为级联分类。系统地研究这些方面,你将比从代码粘贴中学到更多关于人脸检测的知识。