使用 Python 和 OpenCV 實現(xiàn)實時人臉識別功能
概述
人臉識別是一項重要的計算機視覺任務,廣泛應用于安全監(jiān)控、身份驗證等領域。本文將詳細介紹如何使用 Python 和 OpenCV 庫實現(xiàn)實時人臉識別,并通過具體的代碼示例來展示整個過程。
環(huán)境準備
在開始編寫代碼之前,確保已經(jīng)安裝了 OpenCV 庫??梢允褂靡韵旅畎惭b:
pip install opencv-python
代碼詳解
1. 導入必要的模塊
import cv2
import cv2
:導入 OpenCV 庫,用于圖像處理和人臉識別。
2. 定義主函數(shù)
def main(): # 加載Haar級聯(lián)分類器 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') ''' 加載 Haar 級聯(lián)分類器: face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') cv2.CascadeClassifier():這是 OpenCV 中的一個類,用于加載預先訓練好的 Haar 級聯(lián)分類器。 cv2.data.haarcascades + 'haarcascade_frontalface_default.xml':這是 OpenCV 自帶的預訓練 Haar 級聯(lián)分類器文件路徑,用于檢測正面人臉。 ''' # 打開默認攝像頭 cap = cv2.VideoCapture(0) ''' 打開默認攝像頭: cap = cv2.VideoCapture(0) cv2.VideoCapture():這是 OpenCV 中的一個類,用于捕獲視頻。參數(shù) 0 表示打開默認攝像頭。 ''' while True: # 讀取視頻流中的一幀 ret, frame = cap.read() ''' 讀取視頻流中的一幀: ret, frame = cap.read() cap.read():從攝像頭讀取一幀圖像。返回兩個值: ret:布爾值,表示讀取是否成功。如果讀取成功,ret 為 True;否則為 False。 frame:讀取到的圖像幀。 ''' if not ret: break ''' 檢查讀取是否成功: if not ret: break 如果讀取失?。ɡ鐢z像頭斷開連接),則退出循環(huán)。 ''' # 將幀轉換為灰度,因為 Haar 級聯(lián)分類器需要灰度圖像 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ''' 將幀轉換為灰度: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.cvtColor():這是 OpenCV 中的一個函數(shù),用于顏色空間轉換。 frame:輸入圖像。 cv2.COLOR_BGR2GRAY:將 BGR 圖像轉換為灰度圖像。 ''' # 檢測人臉 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE) ''' 檢測人臉: faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE) face_cascade.detectMultiScale():這是 Haar 級聯(lián)分類器的一個方法,用于檢測圖像中的人臉。 gray:輸入的灰度圖像。 scaleFactor=1.1:每次圖像尺寸減小的比例。 minNeighbors=5:每個候選矩形應保留的鄰居數(shù)閾值。 minSize=(30, 30):最小檢測人臉的尺寸。 flags=cv2.CASCADE_SCALE_IMAGE:用于優(yōu)化檢測過程的標志。 ''' # 在檢測到的人臉周圍繪制矩形 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: cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) for (x, y, w, h) in faces:遍歷檢測到的每個人臉。 cv2.rectangle():這是 OpenCV 中的一個函數(shù),用于在圖像上繪制矩形。 frame:輸入圖像。 (x, y):矩形左上角的坐標。 (x + w, y + h):矩形右下角的坐標。 (0, 255, 0):矩形的顏色(綠色)。 2:矩形線條的厚度。 ''' # 顯示結果幀 cv2.imshow('Face Detection', frame) ''' 顯示結果幀: cv2.imshow('Face Detection', frame) cv2.imshow():這是 OpenCV 中的一個函數(shù),用于顯示圖像。 'Face Detection':窗口標題。 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:將按鍵值轉換為 ASCII 碼。 ord('q'):獲取字符 'q' 的 ASCII 碼。 如果用戶按下 'q' 鍵,則退出循環(huán)。 ''' # 釋放攝像頭并關閉所有窗口 cap.release() cv2.destroyAllWindows() ''' 釋放攝像頭并關閉所有窗口: cap.release() cv2.destroyAllWindows() cap.release():釋放攝像頭資源。 cv2.destroyAllWindows():關閉所有 OpenCV 窗口。 ''' if __name__ == "__main__": main()
def main():
:定義主函數(shù)main
。face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
:加載 Haar 級聯(lián)分類器,用于檢測正面人臉。cap = cv2.VideoCapture(0)
:打開默認攝像頭。while True:
:進入無限循環(huán),實時讀取攝像頭圖像。ret, frame = cap.read()
:從攝像頭讀取一幀圖像。if not ret:
:檢查讀取是否成功,如果失敗則退出循環(huán)。gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
:將圖像轉換為灰度圖像。faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
:檢測圖像中的人臉。for (x, y, w, h) in faces:
:遍歷檢測到的每個人臉,并在圖像上繪制矩形。cv2.imshow('Face Detection', frame)
:顯示帶有矩形標記的圖像。if cv2.waitKey(1) & 0xFF == ord('q'):
:按 ‘q’ 鍵退出循環(huán)。cap.release()
:釋放攝像頭資源。cv2.destroyAllWindows()
:關閉所有 OpenCV 窗口。
測試
- 確保你的攝像頭正常工作。
- 運行腳本:
python3 face_detection.py
- 打開攝像頭后,你會看到一個窗口顯示實時視頻流,并且在檢測到的人臉周圍繪制綠色矩形。
- 按 ‘q’ 鍵退出程序。
總結
本文詳細介紹了如何使用 Python 和 OpenCV 庫實現(xiàn)實時人臉識別,并通過具體的代碼示例展示了整個過程。通過使用 cv2.CascadeClassifier
加載預訓練的 Haar 級聯(lián)分類器,cv2.VideoCapture
打開攝像頭,cv2.cvtColor
轉換圖像顏色空間,cv2.rectangle
繪制矩形,最終實現(xiàn)了在實時視頻流中檢測并標記人臉的功能。
到此這篇關于使用 Python 和 OpenCV 實現(xiàn)實時人臉識別的文章就介紹到這了,更多相關Python 和 OpenCV人臉識別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Python基于opencv實現(xiàn)的人臉識別(適合初學者)
- python opencv人臉識別考勤系統(tǒng)的完整源碼
- python實現(xiàn)圖片,視頻人臉識別(opencv版)
- Python基于Opencv來快速實現(xiàn)人臉識別過程詳解(完整版)
- Python opencv實現(xiàn)人眼/人臉識別以及實時打碼處理
- Python基于OpenCV庫Adaboost實現(xiàn)人臉識別功能詳解
- python調用OpenCV實現(xiàn)人臉識別功能
- python opencv3實現(xiàn)人臉識別(windows)
- 基于python3 OpenCV3實現(xiàn)靜態(tài)圖片人臉識別
相關文章
Django rest framework基本介紹與代碼示例
這篇文章主要介紹了Django rest framework基本介紹與代碼示例,簡單敘述了rest framework的一些用處,可選擇的相關軟件包,然后分享了一個簡單的模型支持的API的例子,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Python光學仿真wxpython透鏡演示系統(tǒng)框架
這篇文章主要為大家介紹了Python光學仿真UI界面的wxpython透鏡演示系統(tǒng)框架基本講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10