PCA人脸识别的python实现

这几天看了看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()

  

时间: 2024-10-05 05:07:03

PCA人脸识别的python实现的相关文章

gabor变换人脸识别的python实现,att_faces数据集平均识别率99%

大家都说gabor做人脸识别是传统方法中效果最好的,这几天就折腾实现了下,网上的python实现实在太少,github上的某个版本还误导了我好几天,后来采用将C++代码封装成dll供python调用的方式,成功解决. 图像经多尺度多方向的gabor变换后,gabor系数的数目成倍上升,所以对gabor系数必须进行降维才能送至后续的SVM分类器.测试图像使用att_faces数据集(40种类型,每种随机选5张训练,5张识别),降维方式我测试了DCT.PCA两种变换方式,说实话,dct不怎么靠谱,居

人脸识別终端日常维护

人脸识別终端日常维护 日常保养目的: 隨著人臉識別成功導入之后,經歷了一段時間之后,有的當初推行人員和維護人員可能已經離職,人臉識別系統和人臉設備可能由當初高層管理高度重視而漸漸來再關注,從而導致導入之初相關制度得不到真正落實,執行力大打折扣.人臉設注無人保養.于是機器日常維護又成為管理課題.好的設備需要有一整套保養制度,并透過HR系統反應出實際設備管理狀況.按ITSM理論,將被動救火變為主動保養. 日常保养项目: 電源.網絡.機器清潔管理.相關標志(SOP.責任書.排隊標志)定期更換.機器資料

浅析人脸识别的3种模式

人脸识别的三种应用模式:1:1 身份验证模式本质上是计算机对当前人脸与人像数据库进行快速比对并得出是否匹配的过程,可以简单理解为证明你就是你.1:N 则是在海量的人像数据库中找出当前用户的人脸数据并进行匹配.M:N 是通过计算机对场景内所有人进行面部识别并与人像数据库进行比对的过程.M:N作为一种动态人脸比对,其使用率非常高,能充分应用于多种场景,例如公共安防,迎宾,机器人应用等. 人脸识别的主要商业应用场景包括安防.门禁.新零售以及人证合一等领域:安防领域,随着智能安防概念的深入逐渐产生前端摄

机器学习笔记----四大降维方法之PCA(内带python及matlab实现)

大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效果,看到球员扣篮的动作就可以了,比如下图: 如果我们直接对篮球照片进行几百万像素的处理,会有几千维甚至几万维的数据要计算,计算量很大.而往往我们只需要大概勾勒出篮球的大概形状就可以描述问题,所以必须对此类数据降维,这样会使处理数据更加轻松.这个在人脸识别中必须要降维,因为我们在做特征提取的时候几万维

PCA人脸识别

PCA方法由于其在降维和特征提取方面的有效性,在人脸识别领域得到了广泛的应用. 其基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别. 进行人脸识别的过程,主要由训练阶段和识别阶段组成: 训练阶段 第一步:写出训练样本矩阵,其中向量xi为由第i个图像的每一列向量堆叠成一列的MN维列向量,即把矩阵向量化.假设训练集有200个样本,,由灰度图组成,每个样本大小为M*N. 第二步:计算平均脸 Ψ=1200∑i=1

人脸检测? 对Python来说太简单, 调用dlib包就可以完成

"Dlib 是一个现代化的 C ++ 工具包,包含用于创建复杂软件的机器学习算法和工具 " .它使您能够直接在 Python 中运行许多任务,其中一个例子就是人脸检测. 安装 dlib 并不像只做一个 "pip install dlib" 那么简单,因为要正确配置和编译 dlib ,您首先需要安装其他系统依赖项.如果你按照这里描述的步骤,它应该很容易让 dlib 启动并运行.(在本文中,我将介绍如何在 Mac 上安装 dlib ,但如果您使用的是 Ubuntu ,请

Sklearn -PCA 人脸识别 百度网盘sklearn学习API

PCA脸部识别现在让我们用PCA来解决一个脸部识别问题.脸部识别是一个监督分类任务,用于从照片中认出某个人.本例中,我们用剑桥大学AT&T实验室的Our Database of Faces数据集(http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html),这个数据集包含40个人每个人10张照片.这些照片是在不同的光照条件下拍摄的,每张照片的表情也不同.照片都是黑白的,尺寸为92 x 112像素.虽然这些图片都不大,但是每张

PCA主成分分析 原理讲解 python代码实现

本文参考自:https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/13.PCA/pca.py https://github.com/lawlite19/MachineLearning_Python#%E5%85%ADpca%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E9%99%8D%E7%BB%B4 1. 用途: 通俗来说: 考察一个人的智力情况,就直接看数学成绩就行(存在:

mac下安装face_recognition

安装依赖库: 1.安装cmake (是一个跨平台的安装工具) brew install cmake 2.安装boost.boost-python(C++的程序库) brew install boost brew install boost-python --with-python2.7 3.编译dlib git clone https://github.com/davisking/dlib.git cd dlib mkdir build cd build cmake .. //以默认方式(SSE