Python基于Numpy和PIL库的PCA人脸识别

来源:互联网 发布:穿越火线fps软件 编辑:程序博客网 时间:2024/06/05 09:24

主要应用主成分分析方法降低训练样本的维度,再利用计算欧式距离的方法判定,与训练样本中最接近的人脸。代码如下。

#-*- coding:utf-8 -*-from numpy import *from scipy.linalg import *from pylab import *import testeig1import osfrom PIL import Imagepath='./faces94/'A=zeros([1,36000])A=uint8(A)fjpg=[]for filename in os.listdir(path):    if filename.endswith('.jpg'):        fjpg.append(filename)for i in range(len(fjpg)):    fjpg[i]=path+fjpg[i]    B=array(Image.open(fjpg[i]).convert('L'))    B=B.flatten()    A=append(A,B)A=A.reshape(len(fjpg)+1,36000)A1=delete(A,0,0)A2=A1.TB=array(Image.open('./faces94/test/9338454.1.jpg').convert('L'))B1=B.flatten()test=B1feature=4#特征选择数I1,lowD,percent1,Q,n,t=testeig1.testeig(A2,feature)Ous=zeros(n)pj_train=dot(lowD.T,I1)#影像投影坐标t*n,每一列为对应图像在子空间的坐标pj_test=dot(lowD.T,test)#计算测试影像在子空间的坐标for j in range(0,n):#计算欧式距离    for i in range(0,t):        Ous[j]+=(pj_train[i,j]-pj_test[i])**2a=argmin(Ous)+1lowD1=lowD[:,0]lowD2=lowD1.reshape(200,180)pl=Image.fromarray(lowD2)pl.show()print '图',fjpg[a-1],'与测试图像最接近\n',Ous,'\n','使用前',feature,'特征的信息完整度',percent1,'%'#Ous越小越接近,

训练和测试的头像如下:



输出结果如下:

图 ./faces94/cwang.1.jpg 与测试图像最接近
[  5.41676578e+15   7.81703951e+15   3.80191725e+15   4.10364707e+16
   1.61495155e+16   8.77888351e+15   3.53679326e+15   6.17202650e+15] 
使用前 4 特征的信息完整度 77.468618641 %

0 0
原创粉丝点击