人脸识别系统如何区分真人脸和人脸照片?
Posted
技术标签:
【中文标题】人脸识别系统如何区分真人脸和人脸照片?【英文标题】:How do face recognition systems differentiate between a real face and a photo of a face? 【发布时间】:2020-06-03 10:39:00 【问题描述】:我正在使用 python 和 OpenCV 进行人脸识别项目我检测到人脸但我遇到了这个问题 我不知道如何让系统用 2D 图像区分真假面孔 如果有人有任何想法,请帮助我。 谢谢。
【问题讨论】:
我首先想到的是使用 3D 立体相机。 这不是编程问题,更多的是理论问题, 问题太宽泛/模糊,我们只能帮助您解决具体的编程问题,而不是一般的机器学习问题。这本身就是一个研究项目。在任何情况下,一方面问题是不恰当的,例如照片的扫描在某种意义上是“照片的照片”,但您很可能无法将其与数码照片区分开来.如果您有 RGB-D 数据或立体/多视角图像,那么您可以尝试确定面部是否“平坦”,但在一般情况下,您必须依赖并尝试检测眩光、框架、等 谢谢,所以我需要一台 3D 立体相机 如果您可以将图像的眼睛状态分类为睁眼或闭眼,则应遵循视频中的这种模式:睁眼、闭眼、睁眼。这会处理网络摄像头捕获中的活动检测,但如果您向网络摄像头显示视频,它仍然会失败。 【参考方案1】:来自 pyimagesearch 的 Adrian 提供了一个非常好的 article(包含代码),它解决了与活体检测器相同的问题。 以下是那篇文章的摘录
活体检测有多种方法,包括:
纹理分析,包括计算人脸区域的局部二进制模式 (LBP) 并使用 SVM 将人脸分类为真实人脸或欺骗人脸。 频率分析,例如检查人脸的傅里叶域。 变量聚焦分析,例如检查两个连续帧之间像素值的变化。 基于启发式的算法,包括眼球运动、嘴唇运动和眨眼检测。这组算法试图跟踪眼球运动和眨眼,以确保用户没有举起另一个人的照片(因为照片不会眨眼或移动嘴唇)。 光流算法,即检查从 3D 对象和 2D 平面生成的光流的差异和属性。 -3D 人脸形状,类似于 Apple 的 iPhone 人脸识别系统中使用的人脸识别系统,使人脸识别系统能够区分真实人脸和其他人的打印输出/照片/图像。 以上的组合,使人脸识别系统工程师能够挑选适合其特定应用的活体检测模型。【讨论】:
【参考方案2】:你可以用多种方法解决这个问题,我在这里列出了一些,你可以参考一些研究论文找到更多。
运动方法:您可以让用户眨眼或移动,从而让人相信他们是真实的(最有可能在视频数据集或连续图像上工作) 特征方法:从图像中提取有用的特征,并使用它们来做出二元分类决定,以判断真实与否。 频率分析:检查人脸的傅里叶域。 光流算法:即检查从 3D 对象和 2D 平面生成的光流的差异和属性。 纹理分析:您还可以使用 OpenCV 进行局部二进制模式来对图像进行分类,了解此方法的详细信息,请参阅 link。【讨论】:
以上是关于人脸识别系统如何区分真人脸和人脸照片?的主要内容,如果未能解决你的问题,请参考以下文章