这几天看了看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 == 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 == yTest).mean()*100) if __name__ =='__main__':
main()

  

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

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

    大家都说gabor做人脸识别是传统方法中效果最好的,这几天就折腾实现了下,网上的python实现实在太少,github上的某个版本还误导了我好几天,后来采用将C++代码封装成dll供python调用的 ...

  2. LBP人脸识别的python实现

    这几天看了看LBP及其人脸识别的流程,并在网络上搜相应的python代码,有,但代码质量不好,于是自己就重新写了下,对于att_faces数据集的识别率能达到95.0%~99.0%(40种类型,每种随 ...

  3. iOS活体人脸识别的Demo和一些思路

    代码地址如下:http://www.demodashi.com/demo/12011.html 之前公司项目需要,研究了一下人脸识别和活体识别,并运用免费的讯飞人脸识别,在其基础上做了二次开发,添加了 ...

  4. PCA人脸识别学习笔记---原理篇

     前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...

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

    大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效 ...

  6. PCA人脸识别

    人脸数据来自http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html 实现代码和效果如下.由于图片数量有限(40*10),将原 ...

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

    "Dlib 是一个现代化的 C ++ 工具包,包含用于创建复杂软件的机器学习算法和工具 " .它使您能够直接在 Python 中运行许多任务,其中一个例子就是人脸检测. 安装 dl ...

  8. 百度Aip人脸识别之python代码

    用python来做人脸识别代码量少 思路清晰, 在使用之前我们需要在我们的配置的编译器中通过pip install baidu-aip  即可 from aip import AipFace 就可以开 ...

  9. Eigenface与PCA人脸识别算法实验

    简单的特征脸识别实验 实现特征脸的过程其实就是主成分分析(Principal Component Analysis,PCA)的一个过程.关于PCA的原理问题,它是一种数学降维的方法.是为了简化问题.在 ...

随机推荐

  1. (1)String类 (2)StringBuilder类和StringBuffer类 (3)日期相关的类

    1.String类(重中之重)1.1 常用的方法(练熟.记住)(1)常用的构造方法 String() - 使用无参的方式构造空字符串对象. String(byte[] bytes) - 根据参数指定的 ...

  2. Programming Assignment 2: Deques and Randomized Queues

    编程作业二 作业链接:Deques and Randomized Queues & Checklist 我的代码:Deque.java & RandomizedQueue.java & ...

  3. 张高兴的 Windows 10 IoT 开发笔记:无线收发芯片 nRF24L01

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  4. 【websocket-sharp】使用

    一 介绍 WebSocket# 提供了实现WebSocket协议客户端和服务器. WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允 ...

  5. python第十四课--排序及自定义函数之案例一:选择排序

    案例一:选择排序使用选择排序的思想实现列表数据的升序排序 lt=[45,12,56,-32,-3,44,75,-22,100] length=len(lt) # print('排序前:'+str(lt ...

  6. python第十三课——嵌套循环

    2.嵌套循环: 概念:循环中再定义循环,称为嵌套循环: [注意]嵌套循环可能有多层,但是一般我们实际开发最多两层就可以搞定了(99%的情况) 格式: 1).while中套while常用 2).whil ...

  7. [luogu1600] 天天爱跑步

    题面 ​ 直接写正解吧, 不想再写部分分了, 对于\(u\)和\(v\), 我们可以将它拆成两条路径, \(u\)到\(lca(u, v)\)和\(lca(u, v)\)到v, 在这里只分析从\(u\ ...

  8. Linux服务器之间免密同步文件、重启R服务

    机器:ML-01/ML-02/ML-03 需求: 1.在ML-01上自动将文件同步至ML-02/ML-03 2.在ML-01上通过脚本重启ML-02/ML-03上的R服务 说明:以下示例中,ML-02 ...

  9. find 的一些用法

    find的一些用法 例1:find . -type f -exec chmod -R 644 {} \ ;   #{}代表签名的输出,\;代表结束命令操作结束 例2: find -print0 |xa ...

  10. 使用CSS3的“transition ”属性控制长宽度的缓慢变化

    有时候我们可能会想要改变某个资源信息的长宽度,比如改变某个div的宽度,而且需要让这个宽度缓慢改变,而不是突然就改变了.这时候你可能会想到使用jquery的animate()函数,不过这个方法既得引用 ...