使用OpenCV和Python进行人脸识别

  人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果。在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别。那么什么是人脸识别呢?我肯定你猜对了。当你看着你的朋友走在街上或他的照片时,你会认出他是你的朋友保罗。有趣的是,当你看你的朋友或他的照片时,你首先要看他的脸,然后再看其他东西。你想过为什么要这么做吗?这是为了让你看他的脸就能认出他来。好吧,这是你的面部识别。

  但真正的问题是人脸识别是如何工作的?它非常简单和直观。举一个现实生活中的例子,当你在生活中第一次遇见一个人,你不认识他,对吧?当他和你说话或握手时,你看着他的脸、眼睛、鼻子、嘴巴、颜色和整体的表情。这是你通过收集面部数据来学习或训练那个人的面部识别。然后他告诉你他叫保罗。此时,你的大脑知道它刚刚学到的面部数据属于保罗。现在你的头脑已经训练好了,准备在保罗的脸上做面部识别。下次当你在照片中看到保罗或他的脸时,你会立刻认出他。这就是人脸识别的工作原理。你遇到保罗的次数越多,你的大脑就会收集到更多关于他的信息,尤其是他的脸,你就越能识别他。

  下一个问题是如何用OpenCV编码人脸识别,毕竟这是你阅读这篇文章的唯一原因,对吧?那么,好吧。你可能会说我们的大脑可以很容易地做这些事情,但是把它们编码到电脑里是很困难的吗?别担心,不是的。多亏了OpenCV,编码人脸识别变得越来越容易。人脸识别的编码步骤与我们在上面的实际示例中讨论的一样。

  ·训练数据收集:收集您想要识别的人的面部数据(本例中为面部图像)

  ·识别器的训练:将人脸数据(以及每个人脸的相应名称)输入人脸识别器,使其能够学习。

  ·识别:输入这些人的新面孔,看看你刚训练过的人脸识别器是否识别他们

OpenCV带有内置的人脸识别器,你所要做的就是给它输入人脸数据。这很简单,一旦我们完成了编码,它就会看起来很简单。

使用OpenCV和Python进行人脸识别

如果您需要这篇文章程序的话,请点击这段话,进行下载!

OpenCV面部识别器

  OpenCV有三个内置的人脸识别器,多亏了OpenCV干净的编码,你可以通过改变一行代码来使用它们中的任何一个。下面是这些人脸识别器的名称和它们的OpenCV调用

  1、EigenFaces人脸识别器识别器 - cv2.face.createEigenFaceRecognizer()

  2、FisherFaces人脸识别器识别器 - cv2.face.createFisherFaceRecognizer()

   3、局部二值模式直方图(LBPH)人脸识别器 - cv2.face.createLBPHFaceRecognizer()

  现在我们有三个人脸识别器,但是你知道该用哪一个吗?什么时候用吗?或者哪个更好?我猜你不知道。那么,接下来我们将深入研究每一个识别器。

 EigenFaces面部识别器

  这个算法考虑的事实是,并不是脸的所有部分都同样重要,或同样有用。当你看一个人的时候,你会通过他独特的特征认出他/她,比如眼睛、鼻子、脸颊、前额以及他们之间的差异。所以你实际上关注的是最大变化的区域(数学上说,这个变化是方差)。例如,从眼睛到鼻子有一个显著的变化,从鼻子到嘴也是如此。当你看多张脸的时候你可以通过看脸的这些部分来比较它们因为这些部分是脸最有用和最重要的组成部分。重要的是,它们捕捉到人脸之间的最大变化,这种变化可以帮助你区分不同的人脸,这就是特征人脸识别系统的工作原理。

  EignFaces人脸识别器将所有人的训练图像作为一个整体,并试图提取重要和有用的成分(捕捉最大方差/变化的成分),并丢弃其余的成分。这样,它不仅从训练数据中提取重要的组件,而且通过丢弃不重要的组件来节省内存。它提取的这些重要成分被称为主成分。

  我所用主成分,方差,高变化区域,可互换的有用特征等术语,它们的性质基本上是一样的东西。
  以下是显示从面部列表中提取的主要组件的图像。

主成分

source

使用OpenCV和Python进行人脸识别

  你可以看到,主分量实际上表示面的,这些面被称为特征面,也就是算法的名字。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2b40b8935044a95fe850af38d3b55ef9.html