摘要: 活体检测在各行各业应用比较广泛,如何实现一个活体检测系统呢?早期实现很困难,现在仅使用opencv即可实现,快来尝试一下吧。





什么是活体检测,为什么需要它?

随着时代的发展,人脸识别系统的应用也正变得比以往任何时候都更加普遍。从智能手机上的人脸识别解锁、到人脸识别打卡、门禁系统等,人脸识别系统正在各行各业得到应用。然而,人脸识别系统很容易被“非真实”的面孔所欺骗。比如将人的照片放在人脸识别相机,就可以骗过人脸识别系统,让其识别为人脸。

为了使人脸识别系统更安全,我们不仅要识别出人脸,还需要能够检测其是否为真实面部,这就要用到活体检测了。


opencv人脸 对比 opencv人脸识别准确率_opencv源码


图1:左边的是真实脸,右边是假脸

目前有许多活体检测方法,包括:

  • 纹理分析(Texture analysis),包括计算面部区域上的局部二进制模式(LBP)并使用SVM将面部分类为真脸或假脸;
  • 频率分析(Frequency analysis),例如检查面部的傅里叶域;
  • 可变聚焦分析(ariable focusing analysis),例如检查两个连续帧之间的像素值的变化。
  • 基于启发式的算法(Heuristic-based algorithms),包括眼球运动、嘴唇运动和眨眼检测;
  • 光流算法(Optical Flow algorithms),即检查从3D对象和2D平面生成的光流的差异和属性;
  • 3D脸部形状,类似于Apple的iPhone脸部识别系统所使用的脸部形状,使脸部识别系统能够区分真人脸部和其他人的打印输出的照片图像;

面部识别系统工程师可以组合上述方法挑选和选择适合于其特定应用的活体检测模型。但本教程将采用图像处理中常用方法——卷积神经网络(CNN)来构建一个能够区分真实面部和假面部的深度神经网络(称之为“LivenessNet”网络),将活体检测视为二元分类问题。

首先检查一下数据集。

活动检测视频


opencv人脸 对比 opencv人脸识别准确率_3d人脸识别算法opencv_02


图2:收集真实与虚假/欺骗面孔的示例

为了让例子更加简单明了,本文构建的活体检测器将侧重于区分真实面孔与屏幕上的欺骗面孔。且该算法可以很容易地扩展到其他类型的欺骗面孔,包括打印输出、高分辨率打印等。