一文教你使用LBPH算法理解人臉識(shí)別
介紹**LBPH(Local Binary Pattern Histogram,局部二進(jìn)制模式直方圖)**是一種人臉識(shí)別算法,用于識(shí)別人臉。它以其性能以及如何能夠從正面和側(cè)面識(shí)別人臉而聞名。在開始了解 LBPH 算法之前,讓我們先了解一下圖像和像素的基礎(chǔ)知識(shí),以便在我們開始有關(guān)人臉識(shí)別的內(nèi)容之前,了解圖像是如何表示的。因此,讓我們開始了解圖像和像素。圖像和像素
所有圖像都以矩陣格式表示,如你在此處所見,由行和列組成。圖像的基本組成部分是像素。圖像由一組像素組成。每一個(gè)都是小方格。通過將它們并排放置,我們可以形成完整的圖像。單個(gè)像素被認(rèn)為是圖像中最少可能的信息。對(duì)于每張圖像,像素值的范圍在 0 到 255 之間。此圖像寬 32 像素,高 32 像素。而當(dāng)我們將 32 乘以 32 時(shí),結(jié)果是 1024,也就是圖像中的總像素?cái)?shù)。每個(gè)像素由三個(gè)值組成:R、G、B,分別是紅、綠、藍(lán)的基本顏色。這三種基本顏色的組合將在圖像中創(chuàng)建所有這些顏色,因此我們得出結(jié)論,單個(gè)像素具有三個(gè)通道,每個(gè)基本顏色一個(gè)通道。由于現(xiàn)在我們對(duì)圖像和像素有了一些了解,現(xiàn)在就更容易理解 LBPH 算法了。LBPH(局部二進(jìn)制模式直方圖)
讓我們從分析表示圖像片段的矩陣開始。正如你之前了解到的,圖像以這些格式表示。在這個(gè)例子中,我們有三行三列,像素總數(shù)為九。讓我們?cè)谶@里選擇中心像素,值為 8,并應(yīng)用一個(gè)條件。如果該值大于或等于 8,則結(jié)果為 '1',否則,如果該值小于 8,則結(jié)果為零。使用此條件后,矩陣現(xiàn)在看起來像這樣。
這個(gè)算法的基本計(jì)算就是應(yīng)用這個(gè)條件,選擇矩陣的中心元素,F(xiàn)在我們需要生成一個(gè)二進(jìn)制值。二進(jìn)制值 = 11100010 。算法將開始應(yīng)用從左上角元素到第 2 行的 1 元素的條件,就像它正在制作一個(gè)這樣的圓圈。
將二進(jìn)制值轉(zhuǎn)換為十進(jìn)制值后,我們得到**十進(jìn)制值 = 226。**它表示中心值周圍的所有這些像素等于 226。當(dāng)涉及到亮斑時(shí),該算法是穩(wěn)健的。如果將手電筒放在圖像上,像素值會(huì)增加。值越高,圖像越亮,值越低,圖像越暗。由于這個(gè)原因,該算法在明暗圖像上都有很好的效果,因?yàn)楫?dāng)圖像變亮或變暗時(shí),這里的鄰域內(nèi)的所有像素都會(huì)發(fā)生變化。將光放在圖像上后,矩陣將如下所示。應(yīng)用上述條件后,我們將得到與上述相同的二進(jìn)制值,即11100010
讓我們?cè)谶@里考慮另一個(gè)圖像。為了更好地理解算法將如何識(shí)別人臉。
我們這里有一張臉的圖像,算法將做的是創(chuàng)建幾個(gè)正方形。例如,這里的方格不只代表一個(gè)像素,而是設(shè)置了三行四列的多個(gè)像素。三乘四等于這些方格中總共十二個(gè)像素,每個(gè)方格都是十二個(gè)像素。然后我們將該條件應(yīng)用于每一個(gè)?紤]中心像素。下一步是創(chuàng)建直方圖,這是一個(gè)統(tǒng)計(jì)概念,將計(jì)算每種顏色在每個(gè)方格中出現(xiàn)的次數(shù)。這是直方圖的表示。
例如,如果值 110 出現(xiàn) 50 次,則將創(chuàng)建此大小等于 50 的條形,如果 201 出現(xiàn) 110 次,則將在此直方圖中創(chuàng)建此大小等于 100 的另一個(gè)條形。通過對(duì)直方圖的比較,算法將能夠識(shí)別圖像的邊緣和角。例如,在第一個(gè)方格中,我們沒有關(guān)于人臉的信息。因此直方圖將不同于另一個(gè)具有人臉邊緣的方格。總之,算法知道哪些直方圖代表邊界,哪些直方圖代表人的主要特征,比如眼睛的顏色、嘴巴的形狀等等。所以這就是這個(gè)算法的基本理論,它基于直方圖的創(chuàng)建和比較,F(xiàn)在讓我們開始編碼部分注意:如果你在導(dǎo)入 cv2 庫(kù)時(shí)遇到錯(cuò)誤,例如“No module named 'cv2.cv2”。然后你就可以在 google colab 中編寫代碼了。我已經(jīng)在 Google Colab 中編寫了這段代碼。我將使用 yaleface 數(shù)據(jù)集1. 導(dǎo)入庫(kù)import os
import cv2
import zipfile
import numpy as np
from google.colab.patches import cv2_imshow
2. 數(shù)據(jù)收集path = "/content/drive/MyDrive/Datasets/yalefaces.zip"
zip_obj = zipfile.ZipFile(file = path,mode='r')
zip_obj.extractall('./')
zip_obj.close()
3. 數(shù)據(jù)清洗在向模型提供數(shù)據(jù)之前,這些圖像是 .gif 格式,因此我們需要將它們轉(zhuǎn)換為 ndarray,因此我們需要使用以下代碼from PIL import Image
def get_image_data() :
paths = [os.path.join("/content/yalefaces/train",f)for f in os.listdir(path="/content/yalefaces/train")]
faces = []
ids = []
#faces will contain the px of the images
#path will contain the path of the images
for path in paths :
image = Image.open(path).convert('L')
image_np = np.a(chǎn)rray(image,'uint8')
id = int(os.path.split(path)[1].split(".")[0].replace("subject"," "))
ids.a(chǎn)ppend(id)
faces.a(chǎn)ppend(image_np)
return np.a(chǎn)rray(ids),faces
ids , faces = get_image_data()
4. 模型訓(xùn)練lbph_classifier = cv2.face.LBPHFaceRecognizer_create()
lbph_classifier.train(faces,ids)
#Below line will store the histograms for each one of the iamges
lbph_classifier.write('lbph_classifier.yml')
5. 識(shí)別人臉lbph_face_classifier = cv2.face.LBPHFaceRecognizer_create()
lbph_face_classifier.read("/content/lbph_classifier.yml")
#Now we will check the performance of model
test_image = "/content/yalefaces/test/subject03.leftlight.gif"
image = Image.open(test_image).convert('L')
image_np = np.a(chǎn)rray(image,'uint8')
#Before giving the image to the model lets check it first
cv2_imshow(image_np)
predictions = lbph_face_classifier.predict(image_np)
print(predictions)
expected_output = int(os.path.split(test_image)[1].split('.')[0].replace("subject"," "))
print(expected_output)
3<-That's our output
這是我們將要測(cè)試的圖像
第一個(gè)參數(shù)給出檢測(cè)到的人臉,第二個(gè)參數(shù)給出置信度。這是我們從 print(predictions) 得到的輸出cv2.putText(image_np, 'Pred.' +str(predictions[0]),(10,30),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(0,255,0))
cv2.putText(image_np, 'Expec.' +str(expected_output),(10,50),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(0,255,0)
)
cv2_imshow(image_np)
最后結(jié)果
結(jié)論在本文中,我們介紹了以下內(nèi)容:什么是LBPH算法LBPH算法如何識(shí)別人臉并進(jìn)行計(jì)算理解代碼如何使用LBPH算法識(shí)別人臉

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
即日-9.1立即下載>> 【限時(shí)下載】ADI中國(guó)三十周年感恩回饋助力企業(yè)升級(jí)!
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨(dú)角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 特朗普要求英特爾首位華人 CEO 辭職
- 6 踢館大廠和微軟,剖析WPS靈犀的AI實(shí)用主義
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 8 谷歌吹響AI沖鋒號(hào),AI還有哪些機(jī)會(huì)
- 9 蘋果把身家押在Siri上:一場(chǎng)輸不起的自我革命
- 10 共探合作新機(jī)遇!江門市新會(huì)區(qū)(深圳)“AI + 機(jī)器人” 產(chǎn)業(yè)對(duì)接會(huì)成功舉辦