资源简介
本人在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个文件信息
相关资源
- MATLAB版本的2Dpca和欧式距离算法
- python是个什么东西---python---pyqt做的一
- 简明python教程中文高清PDF
- 学习python爬虫看一篇就足够了之爬取
- 《常用数据挖掘算法总结及Python实现
- pycharm编写的用户信息管理系统
- Python in a Nutshell 3rd Edition
- NeMo_脉冲神经网络工具_spiking neural n
- python3学习路线+思维导图
- OpenCV-Python 中文教程278991
- Think DSP python
- 《Python入门指南》PDF
- 《Python练习集100题》PDF
- Learn python3 the hard way
- xgboost-0.80-cp37-cp37m-win_amd64.whl
-
Python第三方库lxm
l最新3.7版本64位系 - 小甲鱼python课后题及答案整理.docx
- time_series_forecasting_with_python.zip
- selenium webdriver (python)第三版.pdf
- Python爬取淘宝上所有耐克鞋商品并进
- python教程python教程
- 笨办法学python 3 第四版 英文
- Python不可见水印隐形水印
- 百度图片器,批量百度图片,输入要
- python3爬虫
- Python Data Analysis Cookbook by Ivan Idris
- Python 3.7.3 中文文档
- wxPython学习手册
- python 实现KML转换为Excel的工具
- 逻辑回归训练测试的完整代码和数据
评论
共有 条评论