使用FaceRecognizer OpenCV训练脸部以获得最佳效果的最佳方法是什么?

时间:2017-06-26 02:13:26

标签: c++ opencv image-processing face-recognition

在这里我说我已经尝试了许多tutorials来通过在face模块中使用FaceRecognizer类在OpenCV 3.2中实现面部识别。但我没有按照自己的意愿得到公认的结果。

在这里,我想问一下,我想知道,在培训和识别过程中,最好的方法是什么或者需要注意的条件是什么?

我为提高准确度所做的工作:

  • 创建(至少)10张面孔,用于训练每个人的最佳质量,大小和角度。
  • 尝试将脸部贴合在图像中。
  • 均衡图像的HIST
然后我尝试了所有三个人脸识别器(EigenFaceRecognizer,FisherFaceRecognizer,LBPHFaceRecognizer),结果都一样,但识别率真的很低,我只培养了三个人,但也认不出来好吧(第一个人被认为是第二个等问题)。

问题:

  • 训练和识别图像必须是相同的 相机?
  • 手动裁剪训练图像(photoshop - >读取图像然后训练)或此任务 必须以编程方式完成(检测 - > crop->调整大小然后训练)?
  • 每个面部识别器(int num_components, double threshold)
  • 的最佳参数是什么
  • 如何将训练算法设置为在未知时返回-1 人。

1 个答案:

答案 0 :(得分:2)

扩展我的评论,掌握OpenCV的第8章为预处理面孔提供了非常有用的提示,以帮助识别过程,例如:

  • 仅在检测到双眼时采集样本(通过haar级联)
  •   

    几何变换和裁剪:此过程包括缩放,旋转和平移图像,使眼睛对齐,然后从脸部图像中去除前额,下巴,耳朵和背景。

  •   

    左右两侧的直方图均衡:此过程独立地标准化脸部左侧和右侧的亮度和对比度。

  •   

    平滑:此过程使用双边滤镜降低图像噪点。

  •   

    椭圆蒙版:椭圆蒙版从脸部图像中删除一些剩余的头发和背景。

我添加了一个hacky加载/保存到my fork of the example code,随意尝试/根据需要调整它。目前它非常有限,但它是一个开始。

此外,您还应该检查OpenFace and it's DNN face recognizer。 我还没玩过,所以不能提供细节,但看起来很酷。