Python实现基于支持向量机(SVM)和主成分分析(PCA)的人脸识别系统

这里写目录标题

    • 概述
    • 获取数据集
    • 代码
    • 识别精度

概述

PCA(主成分分析)可以在若干因素中解析出主成分因素,是一种有效的降维算法。我们用PCA结合SVM(支持向量机)实现人脸识别。

获取数据集

我们使用英国剑桥大学AT&T人脸数据集,该数据集图片数量为40*10(40人乘10张),都经过灰化处理。
Python实现基于支持向量机(SVM)和主成分分析(PCA)的人脸识别系统_第1张图片
Python实现基于支持向量机(SVM)和主成分分析(PCA)的人脸识别系统_第2张图片

代码

#导入模块
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='C:/Users/zxd/PycharmProjects/Test/venv1/facematerials/'+'s'+str(i)+'/'+str(j)+'.pgm'
        img=cv2.imread(path,cv2.IMREAD_GRAYSCALE)
        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))

识别精度

在这里插入图片描述
识别精度为约为96.3%。

你可能感兴趣的:(Python实现基于支持向量机(SVM)和主成分分析(PCA)的人脸识别系统)