一文教你使用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)建和比較。現(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)更多
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
精彩回顧立即查看>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
推薦專題
- 1 【一周車話】沒有方向盤和踏板的車,你敢坐嗎?
- 2 特斯拉發(fā)布無人駕駛車,還未迎來“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 6 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 7 神經(jīng)網(wǎng)絡(luò),誰是盈利最強(qiáng)企業(yè)?
- 8 比蘋果偉大100倍!真正改寫人類歷史的智能產(chǎn)品降臨
- 9 諾獎(jiǎng)進(jìn)入“AI時(shí)代”,人類何去何從?
- 10 Open AI融資后成萬億獨(dú)角獸,AI人才之爭(zhēng)開啟
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市