SVM 人臉識別

2021-09-22 02:35:07 字數 3690 閱讀 4864

#fromfutureimport 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.8n_col,2.4n_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()

注意:觀察pca的使用,還有svm的使用

參考:

基於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...

基於SVM的人臉識別分類

from future import print function future 模組,把下乙個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性 我的python版本是3.6.4.所以不需要這個 from time import time 對程式執行時間計時用的 impor...

人臉識別 人臉庫

1.mit 影象集 美國,麻省理工學院 包括 16 人,每個人有不同光照 不同尺寸 不同角度的 27 張 2.feret 影象集 美 方 此影象集包含大量的人臉影象,並且每幅圖中均只有乙個人臉。該集中,同乙個人的 有不同表情,光照,姿態和年齡的變化。3.umist 影象集 英國,曼切斯特大學 20 ...