PCA人脸识别的python实现
2016-12-10 14:11
711 查看
这几天看了看PCA及其人脸识别的流程,并在网络上搜相应的python代码,有,但代码质量不好,于是自己就重新写了下,对于att_faces数据集的识别率能达到92.5%~98.0%(40种类型,每种随机选5张训练,5张识别),全部代码如下,不到50行哦。
# -*- coding: utf-8 -*- import numpy as np import os, glob, random, cv2 def pca(data,k): data = np.float32(np.mat(data)) rows,cols = data.shape #取大小 data_mean = np.mean(data,0) #求均值 Z = data - np.tile(data_mean,(rows,1)) D,V = np.linalg.eig(Z*Z.T ) #特征值与特征向量 V1 = V[:, :k] #取前k个特征向量 V1 = Z.T*V1 for i in xrange(k): #特征向量归一化 V1[:,i] /= np.linalg.norm(V1[:,i]) return np.array(Z*V1),data_mean,V1 def loadImageSet(folder=u'E:/迅雷下载/faceProcess/att_faces', sampleCount=5): #加载图像集,随机选择sampleCount张图片用于训练 trainData = []; testData = []; yTrain=[]; yTest = []; for k in range(40): folder2 = os.path.join(folder, 's%d' % (k+1)) data = [cv2.imread(d.encode('gbk'),0) for d in glob.glob(os.path.join(folder2, '*.pgm'))] sample = random.sample(range(10), sampleCount) trainData.extend([data[i].ravel() for i in range(10) if i in sample]) testData.extend([data[i].ravel() for i in range(10) if i not in sample]) yTest.extend([k]* (10-sampleCount)) yTrain.extend([k]* sampleCount) return np.array(trainData), np.array(yTrain), np.array(testData), np.array(yTest) def main(): xTrain_, yTrain, xTest_, yTest = loadImageSet() num_train, num_test = xTrain_.shape[0], xTest_.shape[0] xTrain,data_mean,V = pca(xTrain_, 50) xTest = np.array((xTest_-np.tile(data_mean,(num_test,1))) * V) #得到测试脸在特征向量下的数据 yPredict =[yTrain[np.sum((xTrain-np.tile(d,(num_train,1)))**2, 1).argmin()] for d in xTest] print u'欧式距离法识别率: %.2f%%'% ((yPredict == np.array(yTest)).mean()*100) svm = cv2.SVM() #支持向量机方法 svm.train(np.float32(xTrain), np.float32(yTrain), params = {'kernel_type':cv2.SVM_LINEAR}) yPredict = [svm.predict(d) for d in np.float32(xTest)] #yPredict = svm.predict_all(xTest.astype(np.float64)) print u'支持向量机识别率: %.2f%%' % ((yPredict == np.array(yTest)).mean()*100) if __name__ =='__main__': main()
相关文章推荐
- 主成分分析 (PCA) 与其高维度下python实现(简单人脸识别)
- PCA人脸识别学习及C语言实现
- python下实现人脸识别(opencv2)
- 人脸检测及识别python实现系列(1)——配置、获取实时视频流
- Yale人脸数据库、PCA算法实现Matlab中特征脸生成和简单的人脸识别
- 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型
- PCA算法人脸识别小结--原理到实现
- 人脸检测及识别python实现系列(2)——识别出人脸
- gabor变换人脸识别的python实现,att_faces数据集平均识别率99%
- Python 40行代码实现人脸识别功能
- PCA人脸识别学习及C语言实现
- 基于PCA的人脸识别_Matlab实现(个人研读之后的一些总结)
- 【人脸识别】人脸验证算法Joint Bayesian详解及实现(Python版)
- 人脸检测及识别python实现系列(3)——为模型训练准备人脸数据
- PCA人脸识别学习及C语言实现
- python下PCA算法与人脸识别
- PCA人脸识别学习及C语言实现
- 从QR分解到PCA,再到人脸识别(c++实现)
- Python基于Numpy和PIL库的PCA人脸识别
- 人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门