博客wordpress模版8.0外包seo服務(wù)口碑好
文章目錄
- FisherFaces算法
- 一、算法原理
- 二、算法優(yōu)勢與局限
- 三、算法實(shí)現(xiàn)
- 1. 圖像預(yù)處理
- 2. 創(chuàng)建FisherFace人臉特征識(shí)別器
- 3. 訓(xùn)練模型
- 4. 測試圖像
- 總結(jié)
FisherFaces算法
PCA方法是EigenFaces人臉識(shí)別的核心,但是其具有明顯的缺點(diǎn),在操作過程中會(huì)損失許多人臉的特征信息。因此在某些特殊的情況下,如果損失的信息剛好是用于分類的關(guān)鍵信息,必然導(dǎo)致結(jié)果預(yù)測錯(cuò)誤。于是我們推出來新的方法:
FisherFaces算法,也稱為線性判別分析(LDA)在人臉識(shí)別領(lǐng)域的應(yīng)用,是一種經(jīng)典且有效的人臉識(shí)別方法。
一、算法原理
FisherFaces算法基于LDA技術(shù),其核心思想是將高維的人臉圖像數(shù)據(jù)投影到低維的最佳矢量空間。
- 基本原理:在低維表示下,首先將訓(xùn)練集樣本集投影到一條直線A上,讓投影后的點(diǎn)滿足:同類間的點(diǎn)盡可能地靠近、異類間的點(diǎn)盡可能地遠(yuǎn)離,以達(dá)到抽取重要分類信息和壓縮特征空間維度的效果。投影后的模式樣本在新的子空間中具有最大的類間距離和最小的類內(nèi)距離,即模式在該空間中有最佳的可分離性。
-
具體來說:算法首先提取人臉圖像的特征,這些特征可以包括人臉的形狀、眼睛、嘴巴、鼻子等部位的幾何特征,以及紋理、顏色等特征。然后,利用這些特征構(gòu)建類內(nèi)散度矩陣和類間散度矩陣。類內(nèi)散度矩陣反映的是同一類人臉特征的相似性,而類間散度矩陣反映的是不同類人臉特征的差異性。通過求解這兩個(gè)矩陣的廣義特征問題,可以得到投影系數(shù),這些投影系數(shù)可以將原始的人臉特征投影到低維空間中。
-
實(shí)際應(yīng)用中:FisherFaces算法已經(jīng)廣泛應(yīng)用于人臉認(rèn)證、人臉追蹤、人臉合成等領(lǐng)域。
二、算法優(yōu)勢與局限
- 優(yōu)勢:
- 能夠有效降低計(jì)算復(fù)雜度,提高識(shí)別速度。
- 保持較高的識(shí)別準(zhǔn)確率。
- 對(duì)光照和表情變化具有一定的魯棒性。
- 局限:
- 在處理大規(guī)模數(shù)據(jù)集時(shí),可能需要較長的訓(xùn)練時(shí)間和較高的計(jì)算資源。
- 對(duì)于極端姿態(tài)或遮擋情況下的人臉識(shí)別,效果可能不佳。
三、算法實(shí)現(xiàn)
1. 圖像預(yù)處理
準(zhǔn)備好訓(xùn)練圖像以及對(duì)應(yīng)的標(biāo)簽,還有待識(shí)別圖像:
注意!!!:在使用FisherFaces算法進(jìn)行人臉識(shí)別時(shí),傳入圖像的大小(即尺寸)需要保持一致。
因?yàn)镕isherFaces算法基于線性判別分析(LDA)技術(shù),它需要將人臉圖像投影到低維空間以提取重要分類信息。在這個(gè)過程中,如果圖像的大小不一致,那么轉(zhuǎn)換后的矩陣或向量的維度也會(huì)不同,這將導(dǎo)致算法無法正確處理這些數(shù)據(jù)。此外,算法在計(jì)算類內(nèi)散度矩陣和類間散度矩陣時(shí),也需要所有輸入圖像的維度保持一致。
import cv2
import numpy as np
def image_re(image):a = cv2.imread(image,0)a = cv2.resize(a,(75,100))return aimages = []
a = image_re('f1.jpg')
b = image_re('f2.jpg')
c = image_re('z1.jpg')
d = image_re('z2.jpg')images.append(a)
images.append(b)
images.append(c)
images.append(d)labels = [0,0,1,1]
pre_image = image_re('f_test.jpg')
2. 創(chuàng)建FisherFace人臉特征識(shí)別器
recognizer = cv2.face.FisherFaceRecognizer_create()
3. 訓(xùn)練模型
recognizer.train(images,np.array(labels))
4. 測試圖像
置信度需要低于五千才有說服力,越小越準(zhǔn)確。
label,confidence = recognizer.predict(pre_image)
dic = {0:'yifei',1:"zrn"}
print('這人是',dic[label])
print('置信度',confidence)
aa = cv2.putText(cv2.imread('f_test.jpg').copy(),dic[label],(10,30),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,0,255),2)
cv2.imshow('xx',aa)
cv2.waitKey(0)
-------------------
這人是 yifei
置信度 1806.3739273411293
總結(jié)
本篇介紹了,如何通過FisherFaces算法來實(shí)現(xiàn)人臉識(shí)別,其中需要注意的是:
- 在使用EigenFaces算法進(jìn)行人臉識(shí)別時(shí),傳入圖像的大小(即尺寸)需要保持一致。
- 訓(xùn)練以及測試圖像最好使用大頭照,減少身體的部分。
- 置信度需要低于五千才有說服力,越小越準(zhǔn)確。