在本章中,我们将展示两个独立的例子,一个用于人脸检测,另一个用于动态检测,以及如何快速地将这些功能添加到应用程序中。
在这一章中,我们将讨论:
- 面部检测
- 动态检测
- 将检测添加到应用程序中
面部检测
人脸检测,是人脸识别的第一部分。如果你不能从屏幕上的所有东西中识别出一个或多个人脸,那么你将永远无法识别那是谁的脸。
首先让我们看一张我们的应用程序截图:
上图中,通过摄像头我们已经捕获到一张图像,接下来启用面部跟踪,看看会发生什么:
物体面部特征正在被追踪。我们在物体周围看到的是面部追踪器(白色线框),它告诉我们我们这里有一张脸;以及我们的角度探测器(红线),它提供了一些关于我们脸所处水平方向的参考。
当我们移动物体时,面部追踪器和角度探测器会追踪他。这一切都很好,但是如果我们在真实的人脸上启用面部跟踪会发生什么呢?
如下图,面部追踪器和角度探测器正在追踪人的面部。
当我们把头从一边移到另一边时,面部追踪器会跟踪这个动作,可以看到角度探测器会根据它所识别的面部水平角度进行调整。
可以看到,在这里我们的颜色是黑白的,而不是彩色的。因为这是一个直方图的反向投影,而且它是一个可以更改的选项。
即使我们远离摄像机,让其他物体也进入视野中,面部追踪器也能在诸多噪音中跟踪我们的脸,如下图所示。这正是我们在电影中看到的面部识别系统的工作原理,尽管它更为先进。
现在让我们深入程序内部,看看它到底是如何工作的。
首先,我们需要问自己一个问题,我们想要解决的问题到底是什么。到底是人脸识别还是人脸检测。这里不得不提到Viola-Jones算法,因为,首先它有很高的检出率和很低的误报率,然后它非常擅长对数据的实时处理,最终要的一点是,它非常善于从非人脸中分别出人脸。
要永远记住,人脸检测只是人脸识别的第一步!
这个算法要求输入一个完整的正面,垂直的脸。脸部需要直接指向采集设备,头部尽量不要歪,不要昂头或低头。
这里有必要在强调一次,我们要做的只是在图像中检测出人脸即可。
我们的算法需要经过四个步骤来完成这件事:
- Haar 特征选择
- 创建一个完整的图像
- AdaBoost算法(通过迭代弱分类器而产生最终的强分类器的算法) 训练分类器
- 级联分类器
在正式开始之前,让我们先捋一捋面部检测到底是如果工作的。所有的脸,无论是人的,动物的还是其他的,都有一些相似的