#from __future__ import print_function #__future__模組,把下乙個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性
#我的python版本是3.6.4.所以不需要這個
from time import time #對程式執行時間計時用的
import logging #列印程式進展日誌用的
import matplotlib.pyplot as plt #繪圖用的
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import gridsearchcv
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.decomposition import pca
from sklearn.svm import svc
logging.basicconfig(level=logging.info,format='%(asctime)s %(message)s')
lfw_people=fetch_lfw_people(min_faces_per_person=70,resize=0.4) #名人的人臉資料集、
n_samples,h,w=lfw_people.images.shape #多少個例項,h,w高度,寬度值
x=lfw_people.data #特徵向量矩陣
n_feature=x.shape[1]#每個人有多少個特徵值
y=lfw_people.target
target_names=lfw_people.target_names
n_classes=target_names.shape[0] #多少類
print("total dataset size")
print("n_samples:",n_samples)
print("n_feature:",n_feature)
print("n_classes:",n_classes)
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25) #選取0.25的測試集
#降維n_components=150 #pca演算法中所要保留的主成分個數n,也即保留下來的特徵個數n
print("extracting the top %d eigenfaces from %d faces" % (n_components,x_train.shape[0]))
t0=time()
pca=pca(svd_solver='randomized',n_components=n_components,whiten=true).fit(x_train)#訓練乙個pca模型
print("train pca in %0.3fs" % (time()-t0))
eigenfaces = pca.components_.reshape((n_components,h,w)) #提取出來特徵值之後的矩陣
print("prijecting the input data on the eigenfaces orthonarmal basis")
t0=time()
x_train_pca = pca.transform(x_train) #將訓練集與測試集降維
x_test_pca = pca.transform(x_test)
print("done pca in %0.3fs" % (time()-t0))
#終於到svm訓練了
print("fiting the classifier to the training set")
t0=time()
param_grid =#gamma核函式裡多少個特徵點會被使用}#對引數嘗試不同的值
clf = gridsearchcv(svc(kernel='rbf'),param_grid)
clf=clf.fit(x_train_pca,y_train)
print("done fiting in %0.3fs" % (time()-t0))
print("best estimotor found by grid search:")
print(clf.best_estimator_)
print("predicting people's names on the test set")
t0=time()
y_pred = clf.predict(x_test_pca)
print("done predicting in %0.3fs" % (time()-t0))
print(classification_report(y_test,y_pred,target_names=target_names)) #生成乙個小報告呀
print(confusion_matrix(y_test,y_pred,labels=range(n_classes)))#這個也是,生成的矩陣的意思是有多少個被分為此類。
#把分類完的圖畫出來12個。
#這個函式就是畫圖的
def plot_gallery(images,titles,h,w,n_row=3,n_col=4):
plt.figure(figsize=(1.8*n_col,2.4*n_row))
plt.subplots_adjust(bottom=0,left=.01,right=.99,top=.90,hspace=.35)
for i in range(n_row*n_col):
plt.subplot(n_row,n_col,i+1)
plt.imshow(images[i].reshape((h,w)),cmap=plt.cm.gray)
plt.title(titles[i],size=12)
plt.xticks(())
plt.yticks(())
#這個函式是生成乙個固定格式的字串的
def title(y_pred,y_test,target_names,i):
pred_name=target_names[y_pred[i]].rsplit(' ',1)[-1]
true_name = target_names[y_test[i]].rsplit(' ', 1)[-1]
return "predicted: %s\n true: %s" %(pred_name,true_name)
predicted_titles=[title(y_pred,y_test,target_names,i) for i in range(y_pred.shape[0])] #這個for迴圈的用法很簡介
plot_gallery(x_test,predicted_titles,h,w)
eigenfaces_titles=["eigenface %d " % i for i in range(eigenfaces.shape[0])]
plot_gallery(eigenfaces,eigenfaces_titles,h,w)
plt.show()
基於SVM的人臉識別
usr bin python coding utf 8 import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import fetch lfw people import seaborn as sns sns...
基於opencv的人臉識別
1前言參考的是 這篇用的是dlib的對齊還加了mask。本文方法 人臉檢測 shiqiyu libfacedetection opencv提取ptr類 2 facedetect.h include include include include include facedetect dll.h us...
基於Opencv的人臉識別
要進行人臉的識別的訓練,首先我們要對openv中人臉識別類facerecognizer要有乙個了解,可以參考這個部落格對facerecognizer 有乙個了解 這個部落格對人臉的訓練解釋的很好,具體怎麼訓練可以閱讀這個部落格。關於人臉識別 我們有一下兩個步驟 1.利用pca變換的人臉識別,對人臉進...