成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

人臉識別算法是指什么

人臉識別算法是指在檢測到人臉并定位面部關(guān)鍵特征點之后,主要的人臉區(qū)域就可以被裁剪出來,經(jīng)過預(yù)處理之后,饋入后端的識別算法。識別算法要完成人臉特征的提取,并與庫存的已知人臉進行比對,完成最終的分類。人臉識別算法的原理:系統(tǒng)輸入一張或者一系列含有未確定身份的人臉圖像,以及人臉數(shù)據(jù)庫中的若干已知身份的人臉圖象或者相應(yīng)的編碼,而其輸出則是一系列相似度得分,表明待識別的人臉的身份。

人臉識別算法是指什么

本教程操作環(huán)境:windows7系統(tǒng)、Dell G3電腦。

人臉識別(Facial Recognition),就是通過視頻采集設(shè)備獲取用戶的面部圖像,再利用核心的算法對其臉部的五官位置、臉型和角度進行計算分析,進而和自身數(shù)據(jù)庫里已有的范本進行比對,后判斷出用戶的真實身份。

人臉識別算法是指在檢測到人臉并定位面部關(guān)鍵特征點之后,主要的人臉區(qū)域就可以被裁剪出來,經(jīng)過預(yù)處理之后,饋入后端的識別算法。識別算法要完成人臉特征的提取,并與庫存的已知人臉進行比對,完成最終的分類。

人臉識別的算法有 4 種:基于人臉特征點的識別算法、基于整幅 人臉圖像的識別算法、基于模板的識別算法、利用神經(jīng)網(wǎng)絡(luò)進行識別的算法。

人臉識別算法的原理:

系統(tǒng)輸入一般是一張或者一系列含有未確定身份的人臉圖像,以及人臉數(shù)據(jù)庫中的若干已知身份的人臉圖象或者相應(yīng)的編碼,而其輸出則是一系列相似度得分,表明待識別的人臉的身份。

人臉識別的三個經(jīng)典算法

1、Eigenfaces(特征臉)算法

Eigenfaces是在人臉識別的計算機視覺問題中使用的一組特征向量的名稱,Eigenfaces是基于PCA(主成分分析)的,所以學(xué)習(xí)Eigenfaces需要我們了解PCA的原理。

基本思想

主成分分析(PCA)是一種矩陣的壓縮算法,在減少矩陣維數(shù)的同時盡可能的保留原矩陣的信息,簡單來說就是將 n×m的矩陣轉(zhuǎn)換成n×k的矩陣,僅保留矩陣中所存在的主要特性,從而可以大大節(jié)省空間和數(shù)據(jù)量。PCA的實現(xiàn)需要進行降維,也就是將矩陣進行變換,從更高的維度降到低的維度,然而PCA的降維離不開協(xié)方差矩陣。方差是描述一維數(shù)據(jù)樣本本身相對于均值的偏離程度,是一種用來度量兩個隨機變量關(guān)系的統(tǒng)計量,從角度來說,其夾角越小,值越大,方向越相近,也就是越正相關(guān)。協(xié)方差矩陣度量除了是兩個隨機變量的關(guān)系外,還是維度與維度之間的關(guān)系,而非樣本與樣本之間的關(guān)系。

學(xué)習(xí)一種新的東西,尤其是知識,我們需要了解知識中的思想。我在了解和學(xué)習(xí)Eigenface算法時它的思想是圖像識別首先要選擇一個合適的子空間,將所有的圖像集中到這個子空間中,然后在這個子空間中衡量相似性或者進行分類學(xué)習(xí),再講子空間變換到另一個空間中,這樣的作用一是同一個類別的圖像離得更近,二是不同的類別的圖像會離得比較遠(yuǎn);這樣經(jīng)過線性分類分開的圖像在新空間就能容易分開。同時特征臉技術(shù)會尋找人臉圖像分布的基本元素,即人臉圖像樣本集協(xié)方差矩陣的特征向量,以此來表征人臉圖像。人臉圖像的基本元素有很多,比如眼、面頰、唇等基本元素,這些特征向量在特征臉的圖像空間中對應(yīng)生成的子空間被稱為子臉空間
生成了子空間之后就要進行空間構(gòu)造,那么如何進行空間構(gòu)造呢?首先要尋找人臉的共性,其次是要尋找個體與共性的差異,還有就是要明白共性其實是空間,個體就是向量。利用協(xié)方差矩陣把目標(biāo)集中所有人臉圖像的特征值進行分解,得到對應(yīng)的特征向量,這些特征向量就是“特征臉”。尋找特征向量的特性,將其進行線性組合。在以每一個特征子臉為基的空間,每個人臉就是一個點,這個點的坐標(biāo)就是每一個人臉在每個特征基下的的投影坐標(biāo)。

Eigenfaces算法過程

  • 獲得人臉圖像數(shù)據(jù),將每一個人臉圖像矩陣按行串成一維,每個人臉就是一個向量;

  • 將M個人臉在對應(yīng)維度上加起來,然后求平均得到“平均臉”;

  • 將每個圖像都減去平均臉向量;

  • 計算協(xié)方差矩陣;

  • 運用Eigenfaces記性人臉識別;

算法實踐過程;

  • 訓(xùn)練圖像

  • 求出平均臉

  • 獲得特征子臉

  • 進行圖像重構(gòu)

  • 尋找相似度高的人臉圖像。

2、FisherFace算法

FisherFace是Fisher線性判別在人臉識別的應(yīng)用。線性判別分析(LDA)算法思想最早由英國統(tǒng)計與遺傳學(xué)家,現(xiàn)代統(tǒng)計科學(xué)的奠基人之一羅納德*費舍爾(Ronald)提出。LDA算法使用統(tǒng)計學(xué)方法,嘗試找到物體間特征的一個線性組合,在降維的同時考慮類別信息。通過該算法得到的線性組合可以用來作為一個線性分類器或者實現(xiàn)降維。

基本思想

線性判別分析基本思想是:將高維的模式樣本投影到低維最佳矢量空間,以達(dá)到抽取重要分類信息和壓縮特征空間維度的效果,投影后保證模式樣本在新的子空間有最大的類間距離、最小的類內(nèi)距離,即模式在該空間中有最佳的可分離性。理論和特征臉里用到的Eigenfaces有相似之處,都是對原有數(shù)據(jù)進行整體降維映射到低維空間的方法,fisherfaces和Eigenfaces都是從數(shù)據(jù)整體入手而不同于LBP提取局部紋理特征。

對降維后的樣本使用Fisher線性判別方法,確定一個最優(yōu)的投影方向,構(gòu)造一個一維的體征空間,將多維的人臉圖像投影到 fisherfaces特征空間,利用類內(nèi)樣本數(shù)據(jù)形成一組特征向量,這組特征向量就代表了人臉的特征。

我們知道,該算法是在樣本數(shù)據(jù)映射到另外一個特征空間后,將類內(nèi)距離最小化,類間距離最大化。LDA算法可以用作降維,該算法的原理和PCA算法很相似,因此LDA算法也同樣可以用在人臉識別領(lǐng)域。通過使用PCA算法來進行人臉識別的算法稱為特征臉法,而使用LDA算法進行人臉識別的算法稱為費舍爾臉法。

LDAPCA相比:

  • 相同:1、在降維的時候,兩者都使用了矩陣的特征分解思想;2、兩者都假設(shè)數(shù)據(jù)符合高斯分布。
  • 不同:1、LDA是有監(jiān)督的降維方法,而PCA是無監(jiān)督的。2、如果說數(shù)據(jù)是k維的,那么LDA只能降到(k-1)維度,而PCA不受此限制。3、從數(shù)學(xué)角度來看,LDA選擇分類性能最好的投影方向,而PCA選擇樣本投影點具有最大方差的方向。

Fisherfaces算法Eigenfaces算法相比:

  • 相同:兩者均可以對數(shù)據(jù)進行降維;兩者在降維時均使用了矩陣特征分解的思想。

  • 不同:Fisherfaces是有監(jiān)督的降維方法,而是Eigenfaces無監(jiān)督的降維方法;Fisherfaces除了可以用于降維,還可以用于分類。

值得一提的是,F(xiàn)isherFace算法識別的錯誤率低于哈佛和耶魯人臉數(shù)據(jù)庫測試的Eigenfaces識別結(jié)果。

Fisherface算法流程

  • 獲得人臉圖像數(shù)據(jù),然后求出人臉的均值。

  • 觀察各個人臉的特征值。

  • 進行人臉鑒定,觀察人臉特征,判斷是否是個人。

  • 最后進行人臉識別。

3、LBPH(Local Binary Patter Histogram)算法

Local Binary Patterns Histograms即LBP特征的統(tǒng)計直方圖,LBPHLBP(局部二值編碼)特征與圖像的空間信息結(jié)合在一起。如果直接使用LBP編碼圖像用于人臉識別。其實和不提取LBP特征區(qū)別不大,因此在實際的LBP應(yīng)用中,一般采用LBP編碼圖像的統(tǒng)計直方圖作為特征向量進行分類識別。

原始的LBP算子定義為在33的窗口內(nèi),以窗口中心像素為閾值,將相鄰的8個像素的灰度值與其進行比較,若周圍像素值大于或等于中心像素值,則該像素點的位置被標(biāo)記為1,否則為0。這樣,33鄰域內(nèi)的8個點經(jīng)比較可產(chǎn)生8位二進制數(shù)(通常轉(zhuǎn)換為十進制數(shù)即LBP碼,共256種),即得到該窗口中心像素點的LBP值,并用這個值來反映該區(qū)域的紋理特征。

LBPH的維度: 采樣點為8個,如果用的是原始的LBP或Extended LBP特征,其LBP特征值的模式為256種,則一幅圖像的LBP特征向量維度為:64256=16384維,而如果使用的UniformPatternLBP特征,其LBP值的模式為59種,其特征向量維度為:6459=3776維,可以看出,使用等價模式特征,其特征向量的維度大大減少,這意味著使用機器學(xué)習(xí)方法進行學(xué)習(xí)的時間將大大減少,而性能上沒有受到很大影響。

基本思想

建立在LBPH基礎(chǔ)上的人臉識別法基本思想如下:首先以每個像素為中心,判斷與周圍像素灰度值大小關(guān)系,對其進行二進制編碼,從而獲得整幅圖像的LBP編碼圖像;再將LBP圖像分為個區(qū)域,獲取每個區(qū)域的LBP編碼直方圖,繼而得到整幅圖像的LBP編碼直方圖,通過比較不同人臉圖像LBP編碼直方圖達(dá)到人臉識別的目的,其優(yōu)點是不會受到光照、縮放、旋轉(zhuǎn)和平移的影響。

LBPH算法“人”如其名,采用的識別方法是局部特征提取的方法,這是與前兩種方法的最大區(qū)別。

LBPH 算法流程

  • LBP特征提取:根據(jù)上述的均勻LBP算子處理原始圖像;

  • LBP特征匹配(計算直方圖):將圖像分為若干個的子區(qū)域,并在子區(qū)域內(nèi)根據(jù)LBP值統(tǒng)計其直方圖,以直方圖作為其判別特征。

4、算法的復(fù)現(xiàn)代碼

1)、EigenFaces算法

#encoding=utf-8 import numpy as np import cv2 import os   class EigenFace(object):     def __init__(self,threshold,dimNum,dsize):         self.threshold = threshold # 閾值暫未使用         self.dimNum = dimNum         self.dsize = dsize       def loadImg(self,fileName,dsize):         '''         載入圖像,灰度化處理,統(tǒng)一尺寸,直方圖均衡化         :param fileName: 圖像文件名         :param dsize: 統(tǒng)一尺寸大小。元組形式         :return: 圖像矩陣         '''         img = cv2.imread(fileName)         retImg = cv2.resize(img,dsize)         retImg = cv2.cvtColor(retImg,cv2.COLOR_RGB2GRAY)         retImg = cv2.equalizeHist(retImg)         # cv2.imshow('img',retImg)         # cv2.waitKey()         return retImg         def createImgMat(self,dirName):         '''         生成圖像樣本矩陣,組織形式為行為屬性,列為樣本         :param dirName: 包含訓(xùn)練數(shù)據(jù)集的圖像文件夾路徑         :return: 樣本矩陣,標(biāo)簽矩陣         '''         dataMat = np.zeros((10,1))         label = []         for parent,dirnames,filenames in os.walk(dirName):             # print parent             # print dirnames             # print filenames             index = 0             for dirname in dirnames:                 for subParent,subDirName,subFilenames in os.walk(parent+'/'+dirname):                     for filename in subFilenames:                         img = self.loadImg(subParent+'/'+filename,self.dsize)                         tempImg = np.reshape(img,(-1,1))                         if index == 0 :                             dataMat = tempImg                         else:                             dataMat = np.column_stack((dataMat,tempImg))                         label.append(subParent+'/'+filename)                         index += 1         return dataMat,label         def PCA(self,dataMat,dimNum):         '''         PCA函數(shù),用于數(shù)據(jù)降維         :param dataMat: 樣本矩陣         :param dimNum: 降維后的目標(biāo)維度         :return: 降維后的樣本矩陣和變換矩陣         '''         # 均值化矩陣         meanMat = np.mat(np.mean(dataMat,1)).T         print '平均值矩陣維度',meanMat.shape         diffMat = dataMat-meanMat         # 求協(xié)方差矩陣,由于樣本維度遠(yuǎn)遠(yuǎn)大于樣本數(shù)目,所以不直接求協(xié)方差矩陣,采用下面的方法         covMat = (diffMat.T*diffMat)/float(diffMat.shape[1]) # 歸一化         #covMat2 = np.cov(dataMat,bias=True)         #print '基本方法計算協(xié)方差矩陣為',covMat2         print '協(xié)方差矩陣維度',covMat.shape         eigVals, eigVects = np.linalg.eig(np.mat(covMat))         print '特征向量維度',eigVects.shape         print '特征值',eigVals         eigVects = diffMat*eigVects         eigValInd = np.argsort(eigVals)         eigValInd = eigValInd[::-1]         eigValInd = eigValInd[:dimNum] # 取出指定個數(shù)的前n大的特征值         print '選取的特征值',eigValInd         eigVects = eigVects/np.linalg.norm(eigVects,axis=0) #歸一化特征向量         redEigVects = eigVects[:,eigValInd]         print '選取的特征向量',redEigVects.shape         print '均值矩陣維度',diffMat.shape         lowMat = redEigVects.T*diffMat         print '低維矩陣維度',lowMat.shape         return lowMat,redEigVects       def compare(self,dataMat,testImg,label):         '''         比較函數(shù),這里只是用了最簡單的歐氏距離比較,還可以使用KNN等方法,如需修改修改此處即可         :param dataMat: 樣本矩陣         :param testImg: 測試圖像矩陣,最原始形式         :param label: 標(biāo)簽矩陣         :return: 與測試圖片最相近的圖像文件名         '''         testImg = cv2.resize(testImg,self.dsize)         testImg = cv2.cvtColor(testImg,cv2.COLOR_RGB2GRAY)         testImg = np.reshape(testImg,(-1,1))         lowMat,redVects = self.PCA(dataMat,self.dimNum)         testImg = redVects.T*testImg         print '檢測樣本變換后的維度',testImg.shape         disList = []         testVec = np.reshape(testImg,(1,-1))         for sample in lowMat.T:             disList.append(np.linalg.norm(testVec-sample))         print disList         sortIndex = np.argsort(disList)         return label[sortIndex[0]]         def predict(self,dirName,testFileName):         '''         預(yù)測函數(shù)         :param dirName: 包含訓(xùn)練數(shù)據(jù)集的文件夾路徑         :param testFileName: 測試圖像文件名         :return: 預(yù)測結(jié)果         '''         testImg = cv2.imread(testFileName)         dataMat,label = self.createImgMat(dirName)         print '加載圖片標(biāo)簽',label         ans = self.compare(dataMat,testImg,label)         return ans     if __name__ == '__main__':     eigenface = EigenFace(20,50,(50,50))     print eigenface.predict('d:/face','D:/face_test/1.bmp')

2)、FisherFaces算法

#encoding=utf-8 import numpy as np import cv2 import os   class FisherFace(object):     def __init__(self,threshold,k,dsize):         self.threshold = threshold # 閾值,暫未使用         self.k = k         # 指定投影w的個數(shù)         self.dsize = dsize # 統(tǒng)一尺寸大小       def loadImg(self,fileName,dsize):         '''         載入圖像,灰度化處理,統(tǒng)一尺寸,直方圖均衡化         :param fileName: 圖像文件名         :param dsize: 統(tǒng)一尺寸大小。元組形式         :return: 圖像矩陣         '''         img = cv2.imread(fileName)         retImg = cv2.resize(img,dsize)         retImg = cv2.cvtColor(retImg,cv2.COLOR_RGB2GRAY)         retImg = cv2.equalizeHist(retImg)         # cv2.imshow('img',retImg)         # cv2.waitKey()         return retImg       def createImgMat(self,dirName):         '''         生成圖像樣本矩陣,組織形式為行為屬性,列為樣本         :param dirName: 包含訓(xùn)練數(shù)據(jù)集的圖像文件夾路徑         :return: 包含樣本矩陣的列表,標(biāo)簽列表         '''         dataMat = np.zeros((10,1))         label = []         dataList = []         for parent,dirnames,filenames in os.walk(dirName):             # print parent             # print dirnames             # print filenames             #index = 0             for dirname in dirnames:                 for subParent,subDirName,subFilenames in os.walk(parent+'/'+dirname):                     for index,filename in enumerate(subFilenames):                         img = self.loadImg(subParent+'/'+filename,self.dsize)                         tempImg = np.reshape(img,(-1,1))                         if index == 0 :                             dataMat = tempImg                         else:                             dataMat = np.column_stack((dataMat,tempImg))                 dataList.append(dataMat)                 label.append(subParent)         return dataList,label       def LDA(self,dataList,k):         '''         多分類問題的線性判別分析算法         :param dataList: 樣本矩陣列表         :param k: 投影向量k的個數(shù)         :return: 變換后的矩陣列表和變換矩陣         '''         n = dataList[0].shape[0]         W = np.zeros((n,self.k))         Sw = np.zeros((n,n))         Sb = np.zeros((n,n))         u = np.zeros((n,1))         N = 0         meanList = []         sampleNum = []           for dataMat in dataList:             meanMat = np.mat(np.mean(dataMat,1)).T             meanList.append(meanMat)             sampleNum.append(dataMat.shape[1])               dataMat = dataMat-meanMat             sw = dataMat*dataMat.T             Sw += sw         print 'Sw的維度',Sw.shape           for index,meanMat in enumerate(meanList):             m = sampleNum[index]             u += m*meanMat             N += m         u = u/N         print 'u的維度',u.shape           for index,meanMat in enumerate(meanList):             m = sampleNum[index]             sb = m*(meanMat-u)*(meanMat-u).T             Sb += sb         print 'Sb的維度',Sb.shape           eigVals, eigVects = np.linalg.eig(np.mat(np.linalg.inv(Sw)*Sb))         eigValInd = np.argsort(eigVals)         eigValInd = eigValInd[::-1]         eigValInd = eigValInd[:k] # 取出指定個數(shù)的前k大的特征值         print '選取的特征值',eigValInd.shape         eigVects = eigVects/np.linalg.norm(eigVects,axis=0) #歸一化特征向量         redEigVects = eigVects[:,eigValInd]         print '變換矩陣維度',redEigVects.shape           transMatList = []         for dataMat in dataList:             transMatList.append(redEigVects.T*dataMat)         return transMatList,redEigVects       def compare(self,dataList,testImg,label):         '''         比較函數(shù),這里只是用了最簡單的歐氏距離比較,還可以使用KNN等方法,如需修改修改此處即可         :param dataList: 樣本矩陣列表         :param testImg: 測試圖像矩陣,最原始形式         :param label: 標(biāo)簽矩陣         :return: 與測試圖片最相近的圖像文件夾,也就是類別         '''         testImg = cv2.resize(testImg,self.dsize)         testImg = cv2.cvtColor(testImg,cv2.COLOR_RGB2GRAY)         testImg = np.reshape(testImg,(-1,1))         transMatList,redVects = fisherface.LDA(dataList,self.k)         testImg = redVects.T*testImg         print '檢測樣本變換后的維度',testImg.shape         disList = []         testVec = np.reshape(testImg,(1,-1))         sumVec = np.mat(np.zeros((self.dsize[0]*self.dsize[1],1)))         for transMat in transMatList:             for sample in transMat.T:                 disList.append( np.linalg.norm(testVec-sample))         print disList         sortIndex = np.argsort(disList)         return label[sortIndex[0]/9]       def predict(self,dirName,testFileName):         '''         預(yù)測函數(shù)         :param dirName: 包含訓(xùn)練數(shù)據(jù)集的文件夾路徑         :param testFileName: 測試圖像文件名         :return: 預(yù)測結(jié)果         '''         testImg = cv2.imread(testFileName)         dataMat,label = self.createImgMat(dirName)         print '加載圖片標(biāo)簽',label         ans = self.compare(dataMat,testImg,label)         return ans   if __name__=="__main__":         fisherface = FisherFace(10,20,(20,20))     ans = fisherface.predict('d:/face','d:/face_test/8.bmp')     print ans

3)、LBPH算法

#encoding=utf-8 import numpy as np import os import cv2   class LBP(object):     def __init__(self,threshold,dsize,blockNum):         self.dsize = dsize # 統(tǒng)一尺寸大小         self.blockNum = blockNum # 分割塊數(shù)目         self.threshold = threshold # 閾值,暫未使用       def loadImg(self,fileName,dsize):         '''         載入圖像,灰度化處理,統(tǒng)一尺寸,直方圖均衡化         :param fileName: 圖像文件名         :param dsize: 統(tǒng)一尺寸大小。元組形式         :return: 圖像矩陣         '''         img = cv2.imread(fileName)         retImg = cv2.resize(img,dsize)         retImg = cv2.cvtColor(retImg,cv2.COLOR_RGB2GRAY)         retImg = cv2.equalizeHist(retImg)         # cv2.imshow('img',retImg)         # cv2.waitKey()         return retImg       def loadImagesList(self,dirName):         '''         加載圖像矩陣列表         :param dirName:文件夾路徑         :return: 包含最原始的圖像矩陣的列表和標(biāo)簽矩陣         '''         imgList = []         label = []         for parent,dirnames,filenames in os.walk(dirName):             # print parent             # print dirnames             # print filenames             for dirname in dirnames:                 for subParent,subDirName,subFilenames in os.walk(parent+'/'+dirname):                     for filename in subFilenames:                         img = self.loadImg(subParent+'/'+filename,self.dsize)                         imgList.append(img) # 原始圖像矩陣不做任何處理,直接加入列表                         label.append(subParent+'/'+filename)         return imgList,label         def getHopCounter(self,num):         '''         計算二進制序列是否只變化兩次         :param num: 數(shù)字         :return: 01變化次數(shù)         '''         binNum = bin(num)         binStr = str(binNum)[2:]         n = len(binStr)         if n < 8:             binStr = "0"*(8-n)+binStr         n = len(binStr)         counter = 0         for i in range(n):             if i != n-1:                 if binStr[i+1] != binStr[i]:                     counter += 1             else:                 if binStr[0] != binStr[i]:                     counter += 1         return counter       def createTable(self):         '''         生成均勻?qū)?yīng)字典         :return: 均勻LBP特征對應(yīng)字典         '''         self.table = {}         temp = 1         print type(temp)         for i in range(256):             if self.getHopCounter(i) <= 2:                 self.table[i] = temp                 temp += 1             else:                 self.table[i] = 0         return self.table       def getLBPfeature(self,img):         '''         計算LBP特征         :param img:圖像矩陣         :return: LBP特征圖         '''         m = img.shape[0];n = img.shape[1]         neighbor = [0]*8         featureMap = np.mat(np.zeros((m,n)))         for y in xrange(1,m-1):             for x in xrange(1,n-1):                 neighbor[0] = img[y-1,x-1]                 neighbor[1] = img[y-1,x]                 neighbor[2] = img[y-1,x+1]                 neighbor[3] = img[y,x+1]                 neighbor[4] = img[y+1,x+1]                 neighbor[5] = img[y+1,x]                 neighbor[6] = img[y+1,x-1]                 neighbor[7] = img[y,x-1]                 center = img[y,x]                 temp = 0                 for k in range(8):                     temp += (neighbor[k] >= center)*(1<<k)                 featureMap[y,x] = self.table[temp]         featureMap = featureMap.astype('uint8') # 數(shù)據(jù)類型轉(zhuǎn)換為無符號8位型,如不轉(zhuǎn)換則默認(rèn)為float64位,影響最終效果         return featureMap       def calcHist(self,roi):         '''         計算直方圖         :param roi:圖像區(qū)域         :return: 直方圖矩陣         '''         hist = cv2.calcHist([roi],[0],None,[59],[0,256]) # 第四個參數(shù)是直方圖的橫坐標(biāo)數(shù)目,經(jīng)過均勻化降維后這里一共有59種像素         return hist       def compare(self,sampleImg,testImg):         '''         比較函數(shù),這里使用的是歐氏距離排序,也可以使用KNN,在此處更改         :param sampleImg: 樣本圖像矩陣         :param testImg: 測試圖像矩陣         :return: k2值         '''         testImg = cv2.resize(testImg,self.dsize)         testImg = cv2.cvtColor(testImg,cv2.COLOR_RGB2GRAY)         testFeatureMap = self.getLBPfeature(testImg)         sampleFeatureMap = self.getLBPfeature(sampleImg)         # 計算步長,分割整個圖像為小塊         ystep = self.dsize[0]/self.blockNum         xstep = self.dsize[1]/self.blockNum         k2 = 0         for y in xrange(0,self.dsize[0],ystep):             for x in xrange(0,self.dsize[1],xstep):                 testroi = testFeatureMap[y:y+ystep,x:x+xstep]                 sampleroi =sampleFeatureMap[y:y+ystep,x:x+xstep]                 testHist = self.calcHist(testroi)                 sampleHist = self.calcHist(sampleroi)                 k2 += np.sum((sampleHist-testHist)**2)/np.sum((sampleHist+testHist))         print 'k2的值為',k2         return k2       def predict(self,dirName,testImgName):         '''         預(yù)測函數(shù)         :param dirName:樣本圖像文件夾路徑         :param testImgName: 測試圖像文件名         :return: 最相近圖像名稱         '''         table = self.createTable()         testImg = cv2.imread(testImgName)         imgList,label = self.loadImagesList(dirName)         k2List = []         for img in imgList:             k2 = self.compare(img,testImg)             k2List.append(k2)         order = np.argsort(k2List)         return label[order[0]]   if __name__ == "__main__":       lbp = LBP(20,(50,50),5)     ans = lbp.predict('d:/face','d:/face_test/9.bmp')     print ans

擴展知識:人臉識別算法研究的難點

人臉識別算法研究已久,在背景簡單的情形下,大部分算法都能很好的處理。但是,人臉識別的應(yīng)用范圍頗廣,僅是簡單圖像測試,是遠(yuǎn)遠(yuǎn)不能滿足現(xiàn)實需求的。所以人臉識別算法還是存在很多的難點。

光照

光照問題是機器視覺中的老問題,在人臉識別中的表現(xiàn)尤為明顯,算法未能達(dá)到使用的程度。

姿態(tài)

與光照問題類似,姿態(tài)問題也是人臉識別研究中需要解決的一個技術(shù)難點。針對姿態(tài)的研究相對比較少,多數(shù)的人臉識別算法主要是針對正面,或接近正面的人臉圖像,當(dāng)發(fā)生俯仰或者左右側(cè)而比較厲害的情況下,人臉識別算法的識別率也將會急劇下降。

遮擋

對于非配合情況下的人臉圖像采集,遮擋問題是一個非常嚴(yán)重的問題,特別是在監(jiān)控環(huán)境下,往往被監(jiān)控對象都會帶著眼鏡﹑帽子等飾物,使得被采集出來的人臉圖像有可能不完整,從而影響了后面的特征提取與識別,甚至?xí)?dǎo)致人臉識別算法的失效。

年齡變化

隨著年齡的變化,面部外觀也在變化,特別是對于青少年,這種變化更加的明顯。對于不同的年齡段,人臉識別算法的識別率也不同。

圖像質(zhì)量

人臉圖像的來源可能多種多樣,由于采集設(shè)備的不同,得到的人臉圖像質(zhì)量也不同,特別是對于那些低分辨率﹑噪聲大﹑質(zhì)量差的人臉圖像如何進行有效的人臉識別是個需要關(guān)注的問題。同樣的,對于高分辨圖像,對人臉識別算法的影響也需要進一步研究。

樣本缺乏

基于統(tǒng)計學(xué)習(xí)的人臉識別算法是人臉識別領(lǐng)域中的主流算法,但是統(tǒng)計學(xué)習(xí)方法需要大量的培訓(xùn)。由于人臉圖像在高維空間中的分布是一個不規(guī)則的流行分布,能得到的樣本只是對人臉圖像空間中的一個極小部分的采樣,如何解決小樣本下的統(tǒng)計學(xué)習(xí)問題有待進一步的研究。

大量數(shù)據(jù)

傳統(tǒng)人臉識別算法如PCA、LDA等在小規(guī)模數(shù)據(jù)中可以很容易進行訓(xùn)練學(xué)習(xí)。但是對于大量數(shù)據(jù),這些方法其訓(xùn)練過程難以進行,甚至有可能崩潰。

大規(guī)模人臉識別

隨著人臉數(shù)據(jù)庫規(guī)模的增長,人臉?biāo)惴ǖ男阅軐⒊尸F(xiàn)下降。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
C她下嫩B视频内射国产| 在线精品国产一区二区三区| 亚洲成A人片77777KKKK| 亚洲色成人网站www观看入口| 艳妇臀荡乳欲伦69调教视频 | 国产精品亚洲污污网站入口 | 女被啪到深处喷水GIF动态视频 | 亚洲欧美国产成人综合不卡| 荫蒂添的好舒服小说短篇| 6080YY新视觉影院| 成人AV在线网站| 国产精品午睡沙发系列| 精品无码综合一区二区三区| 鲁丝一区二区三区免费| 琪琪电影网WWW888DVDC| 天堂√中文最新版在线| 亚洲精品无码午夜福利理论片| 真人新婚之夜破苞第一次视频| 宝贝腿开大点我添添公视频免费 | 天堂VA视频一区二区| 亚洲国产AV一区二区三区四区| 中国高清VIDEOSSEXO另| 成人精品视频一区二区三区不卡| 国产免费AV片在线无码免费看| 精品无码久久久久久午夜| 欧美大屁股妞性潮喷ⅩXX| 色欲AV无码一区二区人妻| 亚洲国产成人一区二区精品区| 在线无码免费网站永久| 俄罗斯IPHONE14PRO| 护士趴下光屁股翘臀被打的作文| 秘书在办公室被躁BD在线观看| 搡老女人熟妇老太HD| 亚洲国产精品久久久就秋霞| 9色国产深夜内射| 国产精品亚洲第一区焦香味| 老男人吃奶疯狂啃肿奶头| 日韩人妻中文无码一区二区 | 手在线播放波多野结衣| 亚洲日韩精品欧美一区二区 | AV无码中出一区二区三区| 国产精品久久久久久影视| 兰州熟妇高潮露脸| 熟妇的荡欲BD高清| 岳妇伦丰满69ⅩⅩ| 国产SM鞭打折磨调教视频| 久久久综合亚洲色一区二区三区| 色狠狠AV一区二区三区| 亚洲中文字幕无码一久久区| 大陆老太XXXXXHD| 久久久综合九色合综| 熟妇人妻AV中文字幕老熟妇| 伊人色综合久久天天人守人婷| 国产97在线 | 亚洲| 久久香港三级台湾三级播放| 四虎国产精品成人影院| 中文字幕人妻一区二区在线视频 | 美女高潮潮喷出白浆视频| 天天爽狠狠噜天天噜日日噜| 真实的国产乱XXXX在线| 国产精品沙发系列| 欧美成人影院亚洲综合图| 亚洲AV无码日韩AV无码导航| 被老外添嫩苞添高潮NP视频| 精品无人区无码乱码大片国产| 日韩精品无码中文字幕一区二区 | 亚洲精品午夜久久久伊人| 成人AV鲁丝片一区二区免费| 久久亚洲AV成人无码一区二区| 未满十八18禁止午夜免费网站| 18禁美女裸体爆乳无遮挡动图| 国产在线精品成人一区二区三区 | 国产成人久久综合第一区| 美女夫妻内射潮视频| 亚洲AV无码专区在线播放中文| 成人亚洲欧美在线观看| 麻豆人人妻人人妻人人片AV| 性欧美VIDEO高清| 大香伊蕉在人线国产69| 男生女生一起相差差差差| 亚洲乱码1卡2卡3乱码在线芒果| 国产AV鲁丝一区二区二区| 欧美日韩一区精品视频一区二区 | 久久五月丁香合缴情网| 小婷又软又嫩又紧水又多的视频 | 俄罗斯1317大但人文艺术| 免费看撕开奶罩揉吮奶头视频| 亚洲成AV人片在线观看无下载 | 草莓榴莲秋葵绿丝污免费版18| 久久婷婷五月综合色高清图片| 性色AV闺蜜一区二区三区| 顶级大但人文艺术巫| 欧美熟妇ⅤIDEOS| 中文曰本熟女久久| 久久国产精品久久久久久| 性饥渴XXXXXⅩHD| 乖我们换个姿态再来一遍吧的小说| 欧美性猛交XXXⅩ乱大交| 伊人依成久久人综合网| 精品无码AV一区二区三区少妇 | YW尤物无码点击进入| 麻豆极品JK丝袜自慰喷水久久| 亚洲精品国产成人AV蜜臀| 国产成人无码A在线观看不卡| 日本熟妇色丰满少妇wwwww色 | 欧美VA亚洲VA在线观看| 伊人久久大香线蕉AV色婷婷色| 加勒比久久综合久久鬼色88| 性XXXⅩ俄罗斯女人| 国产成人精品久久久久精品日日| 日本成熟…@视频| А√天堂资源最新版在线官网| 牛牛本精品99久久精品66| 与上司出轨的人妻| 久久人人爽人人爽AV片| 亚洲色无码国产精品网站可下载 | 日本人妻人人人澡人人爽 | 一边做一边喷17P| 久久精品国产99国产精偷| 亚洲精品国产精品乱码不卡√| 和朋友换娶妻野外夫妇3| 亚洲AV无码成人精品区明星换面| 国产美女裸体丝袜喷水视频| 无码纯肉视频在线观看喷水| 国产成人AV片无码免费| 深夜成人毛片天堂| 国产成人AV片无码免费| 无码人妻精品丰满熟妇区| 国产精品无码A∨精品影院APP| 天天躁日日躁狠狠躁午夜剧场| 国产嗷嗷叫高潮快点再用力| 天美传媒MV在线看免费| 国产精品久久久久7777按摩| 我和公发生了性关系公| 国产精品久久久久久影视不卡| 小12国产萝裸体视频福利| 国产又色又刺激高潮视频| 亚洲国产AV高清无码| 久别的草原在线看电视剧| 夜里18款禁用B站入口探APP| 美丽女邻居交换5完整版| 69美女ⅩXXXXXXX19| 欧洲人妻丰满AV无码久久不卡| 被黑人扒开双腿猛进夏科骨科 | 成人年无码AV片在线观看 | 国产免费AV片在线播放| 亚洲AV无码乱码国产精品| 精品国产乱码久久久久久蜜桃 | 小宝贝荡货啊用力水湿AⅤ视频 | 亚洲麻豆AV成本人无码网站| 久久久精品久久久久久96| 中文字幕一区二区三区久久网站| 欧洲精品码一区二区三区| 俄罗斯ZOOM与人性ZOOM| 午夜精品久久久久久久久| 娇妻强被迫伦姧惨叫 在线| 一区二区三区在线 | 欧| 欧美黑人一区二区| 东北往事之黑道风云20年第二部| 无码中文字幕日韩专区视频| 精品日产卡一卡二卡927| 中国亚州女人69内射少妇| 漂亮人妻被黑人久久精品| 丰满熟女高潮毛茸茸欧洲视频| 西西人体大胆午夜啪啪| 九九精品99久久久香蕉| 中文字幕在线播放| 日本熟妇色丰满少妇wwwww色 | 免费观看18禁无遮挡真人网站| А√天堂中文最新版在线种子| 丝袜足控一区二区三区| 国内精品人妻无码久久久影院导航| 亚洲综合无码一区二区| 全免费A敌肛交毛片免费| 国产成人亚洲综合A∨婷婷图片| 亚洲国产AV无码专区亚洲AVL| 免费稀缺拗女一区二区| 大色综合色综合网站| 亚洲国产成人久久综合下载| 内射到高潮的H小说| 国产AV无码专区亚洲AV中文| 亚洲国产精品一区二区久久HS| 免费国产成人AⅤ观看| 公交车上拨开她湿润的内裤| 亚洲精品国产精品乱码不99| 欧美一区二区在线视频| 国产美女被遭强高潮开双腿网站 | 女人18毛片A级毛片| 国产L精品国产亚洲区久久| 亚洲中文字幕精品久久久久久动漫| 欧美性色黄大片手机版| 国产清纯白嫩大学生正在播放| 幼儿HIPHOP仙踪林的功能| 乳欲人妻办公室奶水| 精品亚洲国产成AV人片传媒| 凹凸国产熟女精品视频APP| 亚洲产国偷v产偷v自拍浪潮AV| 欧美粗大无套GAY| 好紧好深好大乳无码中文字幕| 99久久免费精品高清特色大片|