好文档 - 专业文书写作范文服务资料分享网站

机器学习综合实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

基于LBPH方法实现人脸识别

1 实验分组

2 程序设计语言简介

本次设计利用Python语言完成。Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。本次实验所用的库介绍如下:

2.1 OpenCv库

OpenCv是模块化的,其包含用于处理线性或者非线性图像过滤器、图象转换、颜色空间转换、直方图等的imgproc模块、用于视频分析的video模块等。OpenCV所有的类和函数都是在cv的命名空间下定义的,所以当我们在引用OpenCV的代码的时候,需要加上cv命名空间。Opencv能够自动的释放空间,也能够为输出函数的参数分配空间,当一个函数有一个或者多个输入数组的时候和一些输出数组,输出数组会自动的分配和释放,输出数组的类型和大小取决与输入数组或者其他额外参数。

2.2 Numpy库

Numpy是Python数据分析的基础,其支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库。Numpy比Python列表更具优势,其中一个优势便是速度。在对大型数组执行操作时,Numpy比Python列表具有更高的效率,其原因为Numpy数组本身能节省内存,并且Numpy在执行算术、统计和线性代数运算时采用了优化算法。

Numpy的另一个强大功能是具有可以表示向量和矩阵的多维数组数据结构。Numpy对矩阵运算进行了优化,使我们能够高效地执行线性代数运算,使其非常适合解决机器学习问题。 与Python列表相比,Numpy具有的另一个强大优势是具有大量优化的内置数学函数。这些函数使你能够非常快速地进行各种复杂的数学计算,并且用到很少代码(无需使用复杂的循环),使程序更容易读懂和理解。

2.3 wxPython库

wxpython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的、功能键全的GUI用户界面。wxPython是以优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够支持在32/64位windows、绝大多数的Unix或类Unix系统、Macintosh OS X下运行。

2.4 OS库

OS库是Python的标准库,其包含几百个函数,分为路径操作、进程管理、环境参数等几类。例如,os.path子库以path为入口,用于操作和处理文件路径;os.clock()可以返回一个程序使用一个CPU时间的近似值;os.date([format[,time]])可以返回一个按format格式化日期、时间的字串或表。

1

3 实验数据集简介

乔治亚理工学院的人脸数据库包含了在1999年1月6日至1999年11月15日期间在乔治亚学院信号和图像处理中心拍摄的50个人的照片技术。全部数据库中的人由15幅彩色JPEG图像表示,背景杂乱,分辨率为640x480像素。这些图像中人脸的平均大小为150x150像素。这些照片显示了不同面部表情、光照条件和比例的前额和/或倾斜的脸。数据集中50个人的照片被分别放入50个文件夹中,标签是整数,例如名为1的子文件夹意味着它包含人1的图像。在整数标签和人员之间定义一个映射subjects,用于后续人脸识别中标签的添加。

我们对人脸识别的数据进行一定的准备工作,具体如下。 (1)阅读文件夹训练数据中提供的所有子文件夹名称;

(2)提取标签号,读取所有人的所有图像,对每个人进行面部检测; (3)将每个人脸矢量与对应的人的标签相加。

4 机器学习方法介绍

4.1 数据预训练原理及重要公式

4.1.1 Haar分类器

Haar分类器算法使用Haar-like特征做检测,使用积分图(integral image)对Haar-like特征值进行加速,使用AdaBoost算法训练区分人脸和非人脸的强分类器,使用筛选式级联把强分类器级联到一起,提高准确率。 4.1.1.1 使用Haar-like特征做检测

从每个图像中提取Haar特征。Haar(哈尔)特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。例如,脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。

对于下图中的A, B和D这类特征,特征数值计算公式为:v=Σ白-Σ黑,而对于C来说,计算公式如下:v=Σ白-2*Σ黑;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。

图1 特征模型示意图

2

通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。图1的特征模板称为“特征原型”,特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”,矩形特征的值称为“特征值”。

图2中两个矩形特征,表示出人脸的某些特征。比如中间一幅表示眼睛区域的颜色比脸颊区域的颜色深,右边一幅表示鼻梁两侧比鼻梁的颜色要深。同样,其他目标,如眼睛等,也可以用一些矩形特征来表示。使用特征比单纯地使用像素点具有很大的优越性,并且速度更快。

图2 矩阵特征图

4.1.1.2 Haar-like特征的计算-积分图

积分图就是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。

积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。

积分图是一种能够描述全局信息的矩阵表示方法。积分图的构造方式是位置(i,j)处的值ii(i,j)是原图像(i,j)左上角方向所有像素f(k,l)的和:

ii(i,j)=∑k≤i,l≤jf(k,l)

积分图构建算法如下所示。

(1)用s(i,j)表示行方向的累加和,初始化s(i,?1)=0; (2)使用ii(i,j)表示一个积分图像,初始化ii(?1,i)=0;

(3)逐行扫描图像,递归计算每个像素(i,j)行方向的累加和s(i,j)和积分图像ii(i,j)的值:

s(i,j)=s(i,j?1)+f(i,j) ii(i,j)=ii(i?1,j)+s(i,j)

(4)扫描图像一遍,当到达图像右下角像素时,积分图像ii就构建好了。积分图构造好之后,图像中任何矩阵区域像素累加和都可以通过简单运算得到如图所示:

3

机器学习综合实验报告

基于LBPH方法实现人脸识别1实验分组2程序设计语言简介本次设计利用Python语言完成。Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。本次实验
推荐度:
点击下载文档文档为doc格式
255ck8ipym9pg7z7hdvh6c4rp7oyx100snb
领取福利

微信扫码领取福利

微信扫码分享