學(xué)習(xí)使用計(jì)算機(jī)視覺(jué)進(jìn)行人臉檢測(cè)
概述
在本文中,我們將制作一個(gè)人臉檢測(cè)應(yīng)用程序,它將檢測(cè)圖像中的單個(gè)人臉并同時(shí)檢測(cè)多個(gè)人臉,因此,整篇文章將重點(diǎn)介紹使用計(jì)算機(jī)視覺(jué)進(jìn)行人臉檢測(cè)。在這里,我們將使用 HAAR 級(jí)聯(lián)分類器進(jìn)行檢測(cè);出于檢測(cè)目的,我們將學(xué)習(xí)檢測(cè)圖像中人臉?biāo)婕暗乃屑夹g(shù)和過(guò)程。
人臉檢測(cè)的應(yīng)用
1. 人臉識(shí)別:人臉識(shí)別是進(jìn)一步做的事情,即在人臉檢測(cè)之后,進(jìn)行人臉識(shí)別。
2. 濾鏡:如今,我們生活在社交媒體的世界里,我們可以看到全球市場(chǎng)上有各種各樣的濾鏡和有趣的應(yīng)用程序;要進(jìn)行此類應(yīng)用,我們還需要先檢測(cè)人臉,然后應(yīng)用濾鏡。
3. 人臉解鎖應(yīng)用程序:我們經(jīng)常在手機(jī)中使用此功能,但我們知道,這也需要檢測(cè)人臉。
所以讓我們開(kāi)始吧!
加載必要的庫(kù)
# Import the necessary libraries
import numpy as np
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
加載圖像
# Loading the image to be tested
test_image = cv2.imread('data/baby1.png')
# Here we are converting the colored image into gray image
if(test_image is not None):
test_image_gray = cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)
test_image_gray
# Displaying grayscale image
plt.imshow(test_image_gray, cmap='gray')
輸出:
我們很清楚 OpenCV 的檢測(cè)器功能默認(rèn)讀取 BGR 格式的現(xiàn)有圖像,但最終用戶通常不會(huì)考慮 BGR 格式;因此我們需要將 BGR 格式的圖像轉(zhuǎn)換為 RGB 格式,即彩色圖像,它具有負(fù)責(zé)創(chuàng)建彩色圖像的所有 3 個(gè)通道(R-Red、G-Green、B-Blue)。
因此,我們將創(chuàng)建一個(gè)函數(shù)來(lái)將 BGR 圖像轉(zhuǎn)換為 RGB 圖像。
def convertToRGB(image):
return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
HAAR 級(jí)聯(lián)文件
HAAR 級(jí)聯(lián)是計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)很好的術(shù)語(yǔ)。當(dāng)我們談?wù)?HAAR 級(jí)聯(lián)分類器時(shí),不僅僅是人臉預(yù)訓(xùn)練分類器,我們可以得到經(jīng)過(guò)訓(xùn)練來(lái)檢測(cè)微笑、汽車(chē)、公共汽車(chē)的分類器,這些級(jí)聯(lián)文件總是采用 XML 文件格式,通常我們使用現(xiàn)有的級(jí)聯(lián)文件,但事實(shí)上我們也可以在這里創(chuàng)建它們,為了簡(jiǎn)單起見(jiàn),我們將使用 HAAR 級(jí)聯(lián)正面人臉?lè)诸惼鱽?lái)檢測(cè)圖像中人臉的位置。
加載正面分類器
haar_cascade_face = cv2.CascadeClassifier('data/haarcascades/haarcascade_frontalface_alt2.xml')
人臉檢測(cè)
對(duì)于人臉檢測(cè),我們需要從坐標(biāo)中獲取人臉的坐標(biāo),我的意思是 X、Y 坐標(biāo)以及人臉的高度和寬度,然后我們可以在給定的坐標(biāo)下在圖像上繪制一個(gè)矩形,我們有detectMultiScale函數(shù),它將為我們提供所有需要的坐標(biāo)來(lái)規(guī)劃矩形。
face_coordinate = haar_cascade_face.detectMultiScale(test_image_gray, scaleFactor = 1.2, minNeighbors = 5);
# Let us print the no. of faces found
print('Faces found: ', len(face_coordinate))
輸出:
Faces found: 1
所以之前,在使用 detectMultiScale 函數(shù)時(shí),我們獲取了圖像的 x 坐標(biāo)和 y 坐標(biāo)以及高度和寬度,現(xiàn)在我們將使用這些點(diǎn)循環(huán)遍歷圖像的每個(gè)點(diǎn)并在臉部上繪制厚度為 2 個(gè)像素的矩形。
for (x_face,y_face,w_face,h_face) in face_coordinate:
cv2.rectangle(test_image, (x_face, y_face), (x_face+w_face, y_face+h_face), (0, 255, 0), 2)
由于現(xiàn)在已經(jīng)完成了完整的過(guò)程,是時(shí)候檢查我們到目前為止執(zhí)行的所有步驟是否正確,在Matplotlib 的 show 函數(shù)的幫助下,我們將看到處理后的圖像,看看它是否可以檢測(cè)到圖像中的人臉。
#convert image to RGB and show image
plt.imshow(convertToRGB(test_image))
輸出:
自動(dòng)人臉檢測(cè)過(guò)程的函數(shù)
def detect_faces(cascade, test_image, scaleFactor = 1.1):
# Here with the help of copy() function we will hold the copy of the original image
image_copy = test_image.copy()
# Here with the help of cvtColor function we are converting the image from BGR format to gray image
gray_image = cv2.cvtColor(image_copy, cv2.COLOR_BGR2GRAY)
# Finally we are using the haar cascade function with detectMultiscale to get the coordiates of the faces in the given image
faces_rect = cascade.detectMultiScale(gray_image, scaleFactor=scaleFactor, minNeighbors=1)
for (x_face, y_face, w_face, h_face) in faces_rect:
cv2.rectangle(image_copy, (x_face, y_face), (x_face+w_face, y_face+h_face), (0, 255, 0), 2)
return image_copy
代碼分解:在這里,我們構(gòu)建了檢測(cè)人臉的函數(shù);讓我們看看這里發(fā)生了什么:
1. 首先,我們使用copy函數(shù)來(lái)存儲(chǔ)原始圖像,這樣任何不需要的更改都不應(yīng)該存在于原始圖像中
2. 然后我們將BGR 格式的圖像轉(zhuǎn)換為灰度圖像,因?yàn)?cv2 以灰度格式讀取圖像只是為了更好的可讀性。
3. 然后,在 detectMultiScale 函數(shù)的幫助下, 評(píng)論中已經(jīng)提到了這一點(diǎn)。
4. 最后,利用 detectMultiScale 函數(shù)得到的坐標(biāo),繪制出 2 像素厚的綠色矩形
在新圖像上測(cè)試
#loading image
test_image2 = cv2.imread('data/baby2.png')
#call the function to detect faces
faces = detect_faces(haar_cascade_face, test_image2)
#convert to RGB and display image
plt.imshow(convertToRGB(faces))
輸出:
檢測(cè)多個(gè)人臉的測(cè)試
#loading image
test_image2 = cv2.imread('data/group.png')
#call the function to detect faces
faces = detect_faces(haar_cascade_face, test_image2)
#convert to RGB and display image
plt.imshow(convertToRGB(faces))
輸出:
保存圖像
cv2.imwrite('image1.png',faces)
輸出:
True
結(jié)論
1. 因此,在使用計(jì)算機(jī)視覺(jué)進(jìn)行人臉檢測(cè)時(shí),我們首先導(dǎo)入必要的庫(kù)并加載我們需要執(zhí)行人臉檢測(cè)的圖像。
2. 然后我們了解了 HAAR 級(jí)聯(lián)文件和正面分類器。除此之外,還學(xué)習(xí)了 detectMultiScale 函數(shù)的使用。
3. 當(dāng)我們意識(shí)到整個(gè)檢測(cè)過(guò)程非常耗時(shí)的時(shí)候,我們嘗試構(gòu)建一個(gè)函數(shù)來(lái)自動(dòng)化這個(gè)過(guò)程。
4. 然后使用函數(shù),我們可以檢測(cè)到圖像的多張人臉。
5. 最后,我們保存了檢測(cè)到的人臉圖像。
因此,以上是使用計(jì)算機(jī)視覺(jué)準(zhǔn)備人臉檢測(cè)應(yīng)用程序時(shí)必須遵循的步驟
原文標(biāo)題 : 學(xué)習(xí)使用計(jì)算機(jī)視覺(jué)進(jìn)行人臉檢測(cè)

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車(chē)研發(fā)中心重磅落地,寶馬家門(mén)口“搶人”
最新活動(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 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(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 宇樹(shù)機(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 蘋(píng)果把身家押在Siri上:一場(chǎng)輸不起的自我革命
- 10 共探合作新機(jī)遇!江門(mén)市新會(huì)區(qū)(深圳)“AI + 機(jī)器人” 產(chǎn)業(yè)對(duì)接會(huì)成功舉辦