【笔记】特征脸(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 ...
随机推荐
- Mybatis逆向工程生成类文件
首先,我们需要建好相关文件夹目录: 然后,编写执行脚本 generator.xml : 1 <?xml version="1.0" encoding="UTF-8& ...
- XCTF csaw2013reversing2
题目描述:听说运行就能拿到Flag,不过菜鸡运行的结果不知道为什么是乱码 一.先运行看看. 果然乱码. 二.查壳 三.是pe文件,可以拖入od和ida进行动态和静态分析. 1.对主函数进行反编译一下. ...
- 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅
摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...
- Go nuts
含义: to behave in a crazy, enthusiastic, or violent way. 发起狂来 详细讲解 go 在这里也不是"去"的意思,而是和 get. ...
- C语言:sizeof判断数据类型长度
#include <stdio.h> int main() { short a = 10; int b = 100; long c=100; int short_length = size ...
- Kubernetes部署-RKE自动化部署
一.简介 RKE:Rancher Kubernetes Engine 一个极其简单,闪电般快速的Kubernetes安装程序,可在任何地方使用. 二.准备工作 I.配置系统 系统:CentOS 7 / ...
- Solon 1.5.16 发布,多项细节优化
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- 每天五分钟Go - 变量
变量的声明 1.使用关键词 var 定义,声明后若不赋值,则使用默认值 var 变量名 [变量类型] [=初始值] var a,b,c string var e,f int = 0,1 声明时,如果省 ...
- 通过http将yum仓库发布
说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独构建http和发布yum仓库到内网的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需要 ...
- jmeter测试流程整理
背景 整理jmeter脚本编写流程,注意事项,常用组件,常见问题. 参看链接:https://www.cnblogs.com/pwj2lgx/p/10282422.html 参看:processOn思 ...