使用 Python 和 OpenCV 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別功能
概述
人臉識(shí)別是一項(xiàng)重要的計(jì)算機(jī)視覺任務(wù),廣泛應(yīng)用于安全監(jiān)控、身份驗(yàn)證等領(lǐng)域。本文將詳細(xì)介紹如何使用 Python 和 OpenCV 庫實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并通過具體的代碼示例來展示整個(gè)過程。
環(huán)境準(zhǔn)備
在開始編寫代碼之前,確保已經(jīng)安裝了 OpenCV 庫。可以使用以下命令安裝:
pip install opencv-python
代碼詳解
1. 導(dǎo)入必要的模塊
import cv2
import cv2:導(dǎo)入 OpenCV 庫,用于圖像處理和人臉識(shí)別。
2. 定義主函數(shù)
def main():
# 加載Haar級(jí)聯(lián)分類器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
'''
加載 Haar 級(jí)聯(lián)分類器:
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cv2.CascadeClassifier():這是 OpenCV 中的一個(gè)類,用于加載預(yù)先訓(xùn)練好的 Haar 級(jí)聯(lián)分類器。
cv2.data.haarcascades + 'haarcascade_frontalface_default.xml':這是 OpenCV 自帶的預(yù)訓(xùn)練 Haar 級(jí)聯(lián)分類器文件路徑,用于檢測(cè)正面人臉。
'''
# 打開默認(rèn)攝像頭
cap = cv2.VideoCapture(0)
'''
打開默認(rèn)攝像頭:
cap = cv2.VideoCapture(0)
cv2.VideoCapture():這是 OpenCV 中的一個(gè)類,用于捕獲視頻。參數(shù) 0 表示打開默認(rèn)攝像頭。
'''
while True:
# 讀取視頻流中的一幀
ret, frame = cap.read()
'''
讀取視頻流中的一幀:
ret, frame = cap.read()
cap.read():從攝像頭讀取一幀圖像。返回兩個(gè)值:
ret:布爾值,表示讀取是否成功。如果讀取成功,ret 為 True;否則為 False。
frame:讀取到的圖像幀。
'''
if not ret:
break
'''
檢查讀取是否成功:
if not ret:
break
如果讀取失?。ɡ鐢z像頭斷開連接),則退出循環(huán)。
'''
# 將幀轉(zhuǎn)換為灰度,因?yàn)?Haar 級(jí)聯(lián)分類器需要灰度圖像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
'''
將幀轉(zhuǎn)換為灰度:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.cvtColor():這是 OpenCV 中的一個(gè)函數(shù),用于顏色空間轉(zhuǎn)換。
frame:輸入圖像。
cv2.COLOR_BGR2GRAY:將 BGR 圖像轉(zhuǎn)換為灰度圖像。
'''
# 檢測(cè)人臉
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE)
'''
檢測(cè)人臉:
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE)
face_cascade.detectMultiScale():這是 Haar 級(jí)聯(lián)分類器的一個(gè)方法,用于檢測(cè)圖像中的人臉。
gray:輸入的灰度圖像。
scaleFactor=1.1:每次圖像尺寸減小的比例。
minNeighbors=5:每個(gè)候選矩形應(yīng)保留的鄰居數(shù)閾值。
minSize=(30, 30):最小檢測(cè)人臉的尺寸。
flags=cv2.CASCADE_SCALE_IMAGE:用于優(yōu)化檢測(cè)過程的標(biāo)志。
'''
# 在檢測(cè)到的人臉周圍繪制矩形
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
'''
在檢測(cè)到的人臉周圍繪制矩形:
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
for (x, y, w, h) in faces:遍歷檢測(cè)到的每個(gè)人臉。
cv2.rectangle():這是 OpenCV 中的一個(gè)函數(shù),用于在圖像上繪制矩形。
frame:輸入圖像。
(x, y):矩形左上角的坐標(biāo)。
(x + w, y + h):矩形右下角的坐標(biāo)。
(0, 255, 0):矩形的顏色(綠色)。
2:矩形線條的厚度。
'''
# 顯示結(jié)果幀
cv2.imshow('Face Detection', frame)
'''
顯示結(jié)果幀:
cv2.imshow('Face Detection', frame)
cv2.imshow():這是 OpenCV 中的一個(gè)函數(shù),用于顯示圖像。
'Face Detection':窗口標(biāo)題。
frame:要顯示的圖像。
'''
# 按'q'退出循環(huán)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
'''
按'q'退出循環(huán):
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.waitKey(1):等待 1 毫秒,等待用戶按鍵。
& 0xFF:將按鍵值轉(zhuǎn)換為 ASCII 碼。
ord('q'):獲取字符 'q' 的 ASCII 碼。
如果用戶按下 'q' 鍵,則退出循環(huán)。
'''
# 釋放攝像頭并關(guān)閉所有窗口
cap.release()
cv2.destroyAllWindows()
'''
釋放攝像頭并關(guān)閉所有窗口:
cap.release()
cv2.destroyAllWindows()
cap.release():釋放攝像頭資源。
cv2.destroyAllWindows():關(guān)閉所有 OpenCV 窗口。
'''
if __name__ == "__main__":
main()def main()::定義主函數(shù)main。face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'):加載 Haar 級(jí)聯(lián)分類器,用于檢測(cè)正面人臉。cap = cv2.VideoCapture(0):打開默認(rèn)攝像頭。while True::進(jìn)入無限循環(huán),實(shí)時(shí)讀取攝像頭圖像。ret, frame = cap.read():從攝像頭讀取一幀圖像。if not ret::檢查讀取是否成功,如果失敗則退出循環(huán)。gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY):將圖像轉(zhuǎn)換為灰度圖像。faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE):檢測(cè)圖像中的人臉。for (x, y, w, h) in faces::遍歷檢測(cè)到的每個(gè)人臉,并在圖像上繪制矩形。cv2.imshow('Face Detection', frame):顯示帶有矩形標(biāo)記的圖像。if cv2.waitKey(1) & 0xFF == ord('q')::按 ‘q’ 鍵退出循環(huán)。cap.release():釋放攝像頭資源。cv2.destroyAllWindows():關(guān)閉所有 OpenCV 窗口。
測(cè)試
- 確保你的攝像頭正常工作。
- 運(yùn)行腳本:
python3 face_detection.py
- 打開攝像頭后,你會(huì)看到一個(gè)窗口顯示實(shí)時(shí)視頻流,并且在檢測(cè)到的人臉周圍繪制綠色矩形。
- 按 ‘q’ 鍵退出程序。
總結(jié)
本文詳細(xì)介紹了如何使用 Python 和 OpenCV 庫實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并通過具體的代碼示例展示了整個(gè)過程。通過使用 cv2.CascadeClassifier 加載預(yù)訓(xùn)練的 Haar 級(jí)聯(lián)分類器,cv2.VideoCapture 打開攝像頭,cv2.cvtColor 轉(zhuǎn)換圖像顏色空間,cv2.rectangle 繪制矩形,最終實(shí)現(xiàn)了在實(shí)時(shí)視頻流中檢測(cè)并標(biāo)記人臉的功能。
到此這篇關(guān)于使用 Python 和 OpenCV 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別的文章就介紹到這了,更多相關(guān)Python 和 OpenCV人臉識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python基于opencv實(shí)現(xiàn)的人臉識(shí)別(適合初學(xué)者)
- python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼
- python實(shí)現(xiàn)圖片,視頻人臉識(shí)別(opencv版)
- Python基于Opencv來快速實(shí)現(xiàn)人臉識(shí)別過程詳解(完整版)
- Python opencv實(shí)現(xiàn)人眼/人臉識(shí)別以及實(shí)時(shí)打碼處理
- Python基于OpenCV庫Adaboost實(shí)現(xiàn)人臉識(shí)別功能詳解
- python調(diào)用OpenCV實(shí)現(xiàn)人臉識(shí)別功能
- python opencv3實(shí)現(xiàn)人臉識(shí)別(windows)
- 基于python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別
相關(guān)文章
Python獲取本機(jī)IP/MAC多網(wǎng)卡方法示例
這篇文章主要為大家介紹了Python獲取本機(jī)IP/MAC多網(wǎng)卡方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
一文教你學(xué)會(huì)使用Python中的多處理模塊
Python?多處理模塊是一個(gè)強(qiáng)大的工具,用于實(shí)現(xiàn)并行處理,提高程序的性能和效率,本文將詳細(xì)介紹?Python?中多處理模塊的使用方法,希望對(duì)大家有所幫助2024-01-01
Pycharm創(chuàng)建Django項(xiàng)目示例實(shí)踐
本文主要介紹了Pycharm創(chuàng)建Django項(xiàng)目示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
python中import cv2遇到的錯(cuò)誤及安裝方式
這篇文章主要介紹了python中import cv2遇到的錯(cuò)誤及安裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解
人臉處理是人工智能中的一個(gè)熱門話題,人臉處理可以使用計(jì)算機(jī)視覺算法從人臉中自動(dòng)提取大量信息。本文將展示OpenCV Python實(shí)現(xiàn)人臉追蹤的示例代碼,需要的可以參考一下2021-11-11
python爬蟲之爬取百度音樂的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python爬蟲之爬取百度音樂的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Django rest framework基本介紹與代碼示例
這篇文章主要介紹了Django rest framework基本介紹與代碼示例,簡(jiǎn)單敘述了rest framework的一些用處,可選擇的相關(guān)軟件包,然后分享了一個(gè)簡(jiǎn)單的模型支持的API的例子,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Python光學(xué)仿真wxpython透鏡演示系統(tǒng)框架
這篇文章主要為大家介紹了Python光學(xué)仿真UI界面的wxpython透鏡演示系統(tǒng)框架基本講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
在Linux命令行中運(yùn)行Python腳本的流程步驟
Python是一種高級(jí)編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、Web 開發(fā)等領(lǐng)域,在Linux操作系統(tǒng)中,Python是一個(gè)默認(rèn)安裝的解釋器,用戶可以通過命令行界面(CLI)來運(yùn)行Python腳本,在本文中,我們將詳細(xì)介紹如何在Linux命令行中運(yùn)行Python腳本,需要的朋友可以參考下2023-11-11

