资源简介
本人在https://blog.csdn.net/u010006643/article/details/46417127博客上看到的,奈何数据库没有,本人结合网上流传的数据库yale,写下了可以运行得出结果的PCA降维,人脸识别程序,特别适合numpy和PCA学习。我第二次上传资源,感谢平台支持。谢谢大家支持。代码注释很详细,注意我把人脸图片在文件夹之内看成二维的数组。实验表明,PCA对于光照很敏感。

代码片段和文件信息
from numpy import *
from numpy import linalg as la
import cv2
import os
#导入文件 这里没有用到for 循环的步进
def loadImageSet():
FaceMat = mat(zeros((15 100 * 100))) # 先是15行的长矩阵
file = “G:\\ProgrameCode\\FaceDataLib\\yaleFaceDataset\\“
j=0
try:
for i in range(616111):
tmp=str(i)
img = cv2.imread(file + “s“ + tmp + “.bmp“ 0)
FaceMat[j :] = mat(img).flatten()
j+=1
i=int(tmp)
except:
print(“err“)
print(j) #代表读取多少照片 15
print(FaceMat.shape) # (15 10000)
return FaceMat
def ReconginitionVector(selecthr=0.8):
FaceMat = loadImageSet().T # 1000*15的矩阵
aveImg = mean(FaceMat 1) # (10000 1)
diffTrain = FaceMat - aveImg # 列元素都会去减去的 初始化的
tempDiffTrain = mat(diffTrain.T * diffTrain) # 15*1000 * 1000*15
# print(tempDiffTrain.shape)#(15 15)
# print(tempDiffTrain)#这个数值没法看懂
eigvals eigVects = linalg.eig(tempDiffTrain) #对角化矩阵
# print(eigvals.shape)#(15)
# print(eigvals)#应该是15*1
# print(eigVects.shape)
eigSortIndex = argsort(-eigvals)#排序
# 从中可以看出argsort函数返回的是数组值从大到小的索引值arr[eigSortIndex]才是其值
tempArrage = shape(FaceMat)[1] # 1000*15 为了返回矩阵的列数 只是要索引而已
# print(tempArrage) #15
# selecthr = 0.9 # 0.8得到7; 0.9得到[0 1 2 3 4 6 7 8 9]
for i in range(tempArrage):
tempArryI = eigSortIndex[:i] # 这是一维的索引,为了下面的相加
# print(tempArryI) #[0 1 2 3 4 6 7 8]
#代表矩阵的一行求和 eigvals.sum() 值是 273051023.0666671
#这是所谓的求得阈值
if (eigvals[tempArryI] / eigvals.sum()).sum() >= selecthr:
eigSortIndex = tempArryI
# print(eigSortIndex)
break
tempEigSortIndex = eigVects[: eigSortIndex] # 特征向量之中找到较大的特征值
# print(tempEigSortIndex.shape) #(15 9)
covVects = diffTrain * tempEigSortIndex
##1000*15 * 15*(0-9等等)
# 这样我们不仅减少了计算量,而且保留了主成分,减少了噪声的干扰。
print(covVects.shape) #(10000 9)
return aveImg covVects diffTrain #标准脸 主特征脸 差值
## (10000 1) #(10000 9) 1000*15
# (1 10000) (10000 9) (10000 1) 1000*15 # 待识别脸 主特征脸 标准脸 差值
def judgeFace(judgeImg FaceVector avgImg diffTrain):
diff = judgeImg.T - avgImg #(10000 1) #特征向量
weiVec = FaceVector.T * diff #(7*1)(9*1)这是权重
res = 0
resVal = inf #正无穷
for i in range(15):#行数 从0开始到14
TrainVec = FaceVector.T * diffTrain[: i]#9*(1-15)
tempVal=array(weiVec - TrainVec) ** 2 #下面代表近似无穷大
if tempVal.sum() < resVal: #求得与的欧式距离来判断未知人脸与第k张训练人脸之间的差距。
res = i
# 这里因为我假设我要识别的未知人肯定是训练集合里有的
# if i == 14: # 代表遍历所以的还小于;想法对,代码不对
# print(“查无此人“)
# res=-1 #但是不对
resVal = tempVal.sum()#求取元素的平方
tempRes=res+1
print(tempRes)
return tempRes #
if __name__ == ‘__main__‘:
avgImg FaceVector diffTrain = ReconginitionVector(selecthr=0.9)
## (10000 1) #(10000 9) 1000*15
fileArry
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-08-20 16:32 Py815\
目录 0 2018-08-20 15:27 Py815\.idea\
文件 534 2018-08-16 21:58 Py815\.idea\Py815.iml
目录 0 2018-08-15 22:38 Py815\.idea\inspectionProfiles\
文件 228 2018-08-15 22:38 Py815\.idea\inspectionProfiles\profiles_settings.xm
文件 227 2018-08-16 21:58 Py815\.idea\misc.xm
文件 262 2018-08-15 22:38 Py815\.idea\modules.xm
文件 51494 2018-08-20 15:27 Py815\.idea\workspace.xm
目录 0 2018-08-16 09:00 Py815\__pycache__\
文件 345 2018-08-16 09:00 Py815\__pycache__\const.cpython-35.pyc
文件 187 2018-08-16 08:57 Py815\__pycache__\test.cpython-35.pyc
文件 5335 2018-08-20 14:39 Py815\facePCA.py
目录 0 2018-08-20 16:32 Py815\yaleFaceDataset\
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s1.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s10.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s100.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s101.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s102.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s103.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s104.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s105.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s106.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s107.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s108.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s109.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s11.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s110.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s111.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s112.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s113.bmp
文件 11078 2003-02-06 23:09 Py815\yaleFaceDataset\s114.bmp
............此处省略147个文件信息
相关资源
- Python-BDD100K大规模多样化驾驶视频数据
- Instant Pygame for Python Game Development How
- Biopython Tutorial
- Think Python 2nd
- 一个小小的表白程序(python)
- Python课堂笔记(高淇400集第一季)
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
评论
共有 条评论