使用 OpenCV 和 Python 模糊和匿名化人臉

方法

首先,我們使用內建的人臉檢測演算法,從實時影片或影象中檢測人臉。在這裡,我們將使用級聯分類器方法從實時影片(使用網路攝像頭)中檢測人臉。

然後,讀取來自實時影片的幀。儲存最新的幀並轉換為灰度,以更好地理解特徵。

現在,為了使輸出美觀,我們將在檢測到的人臉周圍製作一個彩色邊框矩形。但是,我們希望檢測到的人臉是模糊的,所以我們使用中值模糊函式來做同樣的事情,並提到應該模糊人臉的區域。

而且,現在我們想要顯示模糊的臉,使用 imshow 函式讀取的幀,我們希望它被顯示,直到我們按下一個鍵。

分步實施:

步驟 1:

匯入人臉檢測演算法,稱為級聯分類器。

import cv2# 檢測人臉cascade = cv2。CascadeClassifier(“haarcascade_frontalface_default。xml”)複製程式碼

步驟 2:

從影片中捕獲幀,以便從幀中檢測人臉

video_capture = cv2。VideoCapture(0)while True: # 從影片中捕獲最新的幀 check, frame = video_capture。read()複製程式碼

步驟 3:

將捕獲的幀更改為灰度。

# 將幀轉換為灰度(黑白陰影)gray_image = cv2。cvtColor(frame, cv2。COLOR_BGR2GRAY)face = cascade。detectMultiScale(gray_image, scaleFactor=2。0, minNeighbors=4)複製程式碼

步驟 4:

在檢測到的人臉周圍繪製一個彩色矩形。

for x, y, w, h in face: # 在檢測到的人臉周圍繪製邊框 # (此處邊框顏色為綠色,粗細為3) image = cv2。rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 3)複製程式碼

步驟 5:

模糊矩形內的部分(包含檢測到的人臉)。

# 模糊矩形中的人臉image[y:y+h, x:x+w] = cv2。medianBlur(image[y:y+h, x:x+w], 35)複製程式碼

步驟 6:

顯示最終輸出,即檢測到的人臉(矩形內)是模糊的。

# 在影片中顯示模糊的臉cv2。imshow(‘face blurred’, frame)key = cv2。waitKey(1)複製程式碼

下面是完整地實現:

import cv2# 檢測人臉cascade = cv2。CascadeClassifier(“haarcascade_frontalface_default。xml”)# VideoCapture 是一個函式,用於捕獲來自連線到系統的攝像頭的影片# 你可以傳遞 0 或 1# 0 用於膝上型電腦網路攝像頭# 1 用於外部網路攝像頭video_capture = cv2。VideoCapture(0)# 一個while迴圈執行無限次,為影片捕獲無限數量的幀,因為影片是幀的組合while True: # 從影片中捕獲最新的幀 check, frame = video_capture。read() # 將幀轉換為灰度(黑白陰影) gray_image = cv2。cvtColor(frame, cv2。COLOR_BGR2GRAY) # 在捕獲的幀中檢測多個人臉 # scaleFactor:引數指定在每個影象比例下影象尺寸減小多少。 # minNeighbors: 引數指定每個矩形應該有多少個鄰居來保留它。 # 矩形包含檢測物件。 # 這裡的物件是人臉。 face = cascade。detectMultiScale( gray_image, scaleFactor=2。0, minNeighbors=4) for x, y, w, h in face: # 在檢測到的人臉周圍繪製邊框。 #(這裡邊框顏色為綠色,粗細為3) image = cv2。rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 3) # 模糊矩形中的人臉 image[y:y+h, x:x+w] = cv2。medianBlur(image[y:y+h, x:x+w], 35) # 在影片中顯示模糊的臉 cv2。imshow(‘face blurred’, frame) key = cv2。waitKey(1) # 該語句每幀僅執行一次。 # 基本上,如果我們得到一個金鑰,而那個金鑰是一個 q if key == ord(‘q’): break# 我們將暫停退出 while 迴圈,# 然後執行:video_capture。release()cv2。destroyAllWindows()複製程式碼

輸出:

使用 OpenCV 和 Python 模糊和匿名化人臉

寫在最後的

我已經寫了很長一段時間的技術部落格,並且主要發表,這是我的一篇使用 OpenCV 和 Python 模糊和匿名化人臉。我喜歡透過文章分享技術與快樂。