基于OpenCV的面部识别

来源:互联网 发布:淘宝访客消费层级调整 编辑:程序博客网 时间:2024/04/25 02:43

本文源地址:http://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_tutorial.html#local-binary-patterns-histograms

简介

OpenCV(Open Source Computer Version)是由Inter在1991年发起的一个广受欢迎的计算机视觉库。这个跨平台的代码库专注于实时图片处理,同时提供了最新的免许可机器视觉算法集的实现。自2008年Willow Garage公司接管对OpenCV的支持以来,OpenCV 2.3.1现在已经拥有了C/C++,Python,Android等编程接口。由于OpenCV是基于BSD协议释出的,所以它可以以免费的方式应用于研究项目和商业项目。

现在,OpenCV2.4现在拥有全新的用于面部识别的FaceRecognizer类,这样你可以立即开始面部识别的体验。当我从事于面部识别工作的时候,这份文档是我所渴望的指导。它将向你展示如何利用OpenCV里面的FaceRecognizer类(及其全部的源代码列表)进行面部识别,并且给你一个了解其背后算法的引导。应广大网友的要求,我也将展示怎样创建正如你在其他出版物种看到的那种可视化界面。

目前而言可以获取到的算法有:

Eigenface(参见createEigenFaceRecognizer())

Fisherface(参见createFisherFaceRecognizer())

Local Binary Patterns Histograms(参见 createLBPHFaceRecognizer())

你无需从本文复制粘贴这些源代码示例,因为在本文档的src文件夹中已经包含了它们。如果你已经建立了一个OpenCV示例并且打开了它,那么你很有可能已经编译了源码。也许实现细节对高阶用户来说是很有意思的,但是我已经决定先抛开他们,因为这个能让新用户搞不清楚。

本文的所有代码都是基于BSD协议释出的,所以你尽可以在你的工程里面使用它们。

面部识别

对人类来说,面部识别轻而易举。[Tu06]的实验显示,即使是1~3天的宝宝也能分辨熟知的脸。所以面部识别对于计算机来说能困难到哪里去?事实证明我们对人类的识别能力知之甚少。对于一次成功的面部识别来说,是内部特征(眼睛,鼻子,嘴)还是外部特征(头型,头发)在起作用?我们是怎样分析一张图片的?大脑是怎样编码图片信息的?David Hubel和Torsten Wiesel曾经这样解释道:我们的大脑有专门的神经细胞去应对特定场景的局部特征,如线条、边、角或者运动。由于我们不能以碎片的形式认识世界,所以我们的视觉皮层必须以某种方式将不同的信息源组织成有用的模式。自动脸部识别就是从一张图片中提取有用的特征,将他们表达出来,并进行某种分类。

基于人脸几何特征的人脸识别可能是最直观的人脸识别方法。[Kanada73]描述了第一个自动面部识别系统:用标定的点(眼睛、耳朵、鼻子的位置)来建立一个特征向量(点之间的距离、夹角)。通过计算取样的特征向量与目标图片的欧式距离来进行识别。这种方式能够很好地应对图片本身的光影变化,但是有一个巨大的缺陷:准确地标定这些标记点非常困难,即便是用最先进的算法。一些几何人脸识别的最新工作在[Bru92]开展。已经用到的多达22维的特征向量和基于大量数据的实验表明,单纯的几何特征可能无法携带足够的信息进行面部识别。





















0 0
原创粉丝点击