数据来源:英国剑桥大学的AT&T人脸数据
#导入模块
import cv2 #opencv 模块 用于图像处理
import numpy as np
from sklearn.model_selection import train_test_split #用于切分训练集和测试集
from sklearn.decomposition import PCA #PCA降维
from sklearn.svm import SVC #支持向量机
data=[]#存放图像数据
label=[]#存放标签
#将40*10的像素为112*92像素的图像处理为400*10302的数组
for i in range(1,41):
for j in range(1,11):
path='F:/Database of Faces/'+'s'+str(i)+'/'+str(j)+'.pgm'
img=cv2.imread(path,cv2.IMREAD_GRAYSCALE)
#print(path +'s'+str(i)+'/'+str(j)+'.pgm')
h,w=img.shape
img_col=img.reshape(h*w)
data.append(img_col)
label.append(i)
C_data=np.array(data)
C_label=np.array(label)
#print(C_data.shape)
#print(C_label)
#切分数据集
x_train,x_test,y_train,y_test=train_test_split(C_data,C_label,test_size=0.2,random_state=256)
pca=PCA(n_components=15,svd_solver='auto').fit(x_train)
#降维
x_train_pca=pca.transform(x_train)
x_test_pca=pca.transform(x_test)
svc=SVC(kernel='linear')
svc.fit(x_train_pca,y_train)
#测试识别准确度
print('%.5f'%svc.score(x_test_pca,y_test))
准确度:0.96250