【笔记】特征脸(PCA在人脸识别领域的应用)
人脸识别与特征脸(简单介绍)
什么是特征脸
特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量,该方法被认为是第一种有效的人脸识别方法。
PCA的具体实现思想见
【笔记】主成分分析法PCA的原理及计算
(在notebook中)
我们需要加载相应的方法fetch_lfw_people,其为一个人脸识别数据库,加载以后,就可以直接调用了,头一次使用要下载,具体情况见另一篇博客使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法,其中有说明
from sklearn.datasets import fetch_lfw_people
faces = fetch_lfw_people()
我们可以看到其中相应的内容
faces.keys()
结果为

其中faces.data.shape
结果为

对应的faces.images.shape
结果为(第一个为样本总数,对于每个样本都是62*47的图像)

然后我们随机出36张脸,首先对样本进行一个随机的排列,然后将随机的排列放入X中,然后取出X中前36张脸,然后看一下对应的数据
random_indexes = np.random.permutation(len(faces.data))
X = faces.data[random_indexes]
example_faces = X[:36,:]
example_faces.shape
结果为

绘制函数:
def plot_faces(faces):
fig,axes = plt.subplots(6,6,figsize=(10,10),
subplot_kw={'xticks':[],'yticks':[]},
gridspec_kw=dict(hspace=0.1,wspace=0.1))
for i,ax in enumerate(axes.flat):
ax.imshow(faces[i].reshape(62,47),cmap='bone')
plt.show()
plot_faces(example_faces)
图像为

可以使用faces.target_names来查看包含的人名
结果为

具体的实现特征脸
这里使用PCA的另一种构建方式svd_solver参数,让其等于randomized,希望使用随机的方式求解PCA(对所有的数据),这样来实例化pca,然后进行fit
%%time
from sklearn.decomposition import PCA
pca = PCA(svd_solver='randomized')
pca.fit(X)
结果为

使用pca.components_.shape来看一下有多少个维度及主成分
结果为

绘制图像,注意,图像越靠前,越能反映整个样本的总特征
plot_faces(pca.components_[:36,:])
图像为(这些就被称为特征脸)

因为有很多的图片是一个人一张,而有一些是一个人有很多张,这样出来的数据有的时候是不靠谱的,那么我们就可以获得样本数比较多的人的图片来增加准确度,我们可以
faces2 = fetch_lfw_people(min_faces_per_person=60)
通过faces2.data.shape,可以发现这样就会少很多

使用len(faces2.target_names)来看一下一共多少人名
结果为

这样faces2中就只有8个人,每个人不少于60张图片,这样的数据库就比较靠谱了

【笔记】特征脸(PCA在人脸识别领域的应用)的更多相关文章
- 基于PCA的人脸识别步骤
代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...
- 机器学习:PCA(人脸识别中的应用——特征脸)
一.思维理解 X:原始数据集: Wk:原始数据集 X 的前 K 个主成分: Xk:n 维的原始数据降维到 k 维后的数据集: 将原始数据集降维,就是将数据集中的每一个样本降维:X(i) . WkT = ...
- OpenCV人脸识别的原理 .
OpenCV人脸识别的原理 . 在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: void GetImageRect(IplImage* orgImage, ...
- 【计算机视觉】特征脸EigenFace与PCA
[计算机视觉]特征脸EigenFace与PCA 标签(空格分隔): [图像处理] 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/. 说 ...
- opencv基于PCA降维算法的人脸识别
opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...
- 使用OpenCV进行人脸识别
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
- 机器学习: 特征脸算法 EigenFaces
人脸识别是机器学习和机器视觉领域非常重要的一个研究方向,而特征脸算法是人脸识别里非常经典的一个算法,EigenFaces 是基于PCA (principal component analysis) 即 ...
- opencv人脸识别提取手机相册内人物充当数据集,身份识别学习(草稿)
未写完 采用C++,opencv+opencv contrib 4.1.0 对手机相册内人物opencv人脸识别,身份识别学习 最近事情多,介绍就先不介绍了 photocut.c #include & ...
- opencv学习之路(41)、人脸识别
一.人脸检测并采集个人图像 //take_photo.cpp #include<opencv2/opencv.hpp> using namespace cv; using namespac ...
随机推荐
- Hibernate框架(五)面向对象查询语言和锁
Hibernate做了数据库中表和我们实体类的映射,使我们不必再编写sql语言了.但是有时候查询的特殊性,还是需要我们手动来写查询语句呢,Hibernate框架为了解决这个问题给我们提供了HQL(Hi ...
- Netty实现对Websocket的支持
一.WebSocket的简介及优势 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准.WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的 ...
- coretext简单使用
相对于UIKit,使用coretext绘制文本效率高,具有更高的自由度,可随时插入图片,增加文本点击事件等. 1.增加文本的点击事件 思路:定义UILabel子类,设置可点击的富文本range及其他属 ...
- 永恒之蓝ms17_010漏洞复现
1.什么是永恒之蓝 永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机. 2.SMB协议 SM ...
- Python单元测试框架unittest之单用例管理(二)
概述 利用python进行测试时,测试用例的加载方式有2种: 一种是通过unittest.main()来启动所需测试的测试模块,上篇文章就是使用的这种方式: 一种是添加到testsuite集合中再加载 ...
- Min25 筛学习笔记
仅仅是 \(min25\) 筛最基本的方法,没有任何推式子的例题.(想了想还是加两道吧qwq) 这里解决的是 \(Luogu\) 那道模板题. min25 基本方法: 最基础的是两个式子: \[G(n ...
- 「AGC034E」 Complete Compress
「AGC034E」 Complete Compress 显然可以枚举根. 然后把某两棵棋子同时往深度浅的方向提,即对不存在祖先关系的两个棋子进行操作. 如果能到达那么就更新答案. 问题转化为如何判定能 ...
- C语言:宏参数的字符串化和宏参数的连接
在宏定义中,有时还会用到#和##两个符号,它们能够对宏参数进行操作. # 的用法 #用来将宏参数转换为字符串,也就是在宏参数的开头和末尾添加引号.例如有如下宏定义: #define STR(s) #s ...
- 『与善仁』Appium基础 — 3、ADB命令介绍
目录 1.ADB命令简介 2.ADB命令运行原理 3.通过ADB命令连接安卓模拟器 (1)安装安卓模拟器 (2)ADB命令连接安卓模拟器 (3)常用Android模拟器端口号 1.ADB命令简介 AD ...
- R绘图(7): 把散点图的点换成扇形
前几天分析了一批单细胞TCR的数据,需要画这样一个图: 行是不同的样本,列是不同的T细胞类型,每一个位置点的大小表示T细胞的数目多少,并且还需要根据T细胞所属的克隆型类型涂色.这个图用来描述TCR是我 ...