上面讲到的整个流程是串行的,存在一个问题就是人脸跟踪之后的步骤特别是人脸特征提取是比较耗时,而我们的人脸跟踪对于运动是比较敏感的。如果2帧之间相差时间太久,跟踪就可能丢失了。因此实现上,我们必须让2次人脸检测之间的间隔尽量短,至少应达到15fps。为了达到这个目标,我们需要将上述的过程分为两个独立的部分:一个部分只负责人脸的检测和跟踪,另一个部分其他部分。简单的方式是分为2个线程,跟踪线程将抓拍到的人脸放入识别队列,识别线程则从这个识别队列中获取人脸进行识别。
由于底库照片和本人的差异以及现场适配的角度、光照等等影响,很容易出现识别失败。为了提高识别的成功率,可以对同一人进行多次识别,如设置一个人最多识别3次,3次都失败才认为不在库。当然这个功能依赖于较好的跟踪效果。
上面提到了多次识别,我们还可以结合质量,让识别队列按质量排序,对一个人的抓拍照永远保留质量最好的几张进行识别,当然这个依赖于较好的质量优选算法。
除了上文提到的,还有一些其他的逻辑,如将抓拍照放到底库等,都要根据实际来调整。
至此,这个系列中的算法部分就讲完了,后面再介绍一下这个系统的使用就算阶段性结束了。