如何使用Python實時模糊人臉
譯文?譯者 | 布加迪
審校 | 重樓
出于幾個原因,您可能使用人臉模糊來隱藏視頻或圖像中的人臉。隱私和安全問題是最主要的原因。大多數視頻分享平臺和視頻編輯軟件都內置了人臉模糊功能。
您可以使用Python、OpenCV和NumPy庫從頭創(chuàng)建自己的人臉模糊程序。
1、建立環(huán)境
要完成本文的學習,您需要熟悉Python的基礎知識,并對NumPy庫的使用有一番基本的了解。
打開任何您熟悉的Python IDE。創(chuàng)建一個虛擬環(huán)境,用來安裝所需的庫。創(chuàng)建一個新的Python文件。進入到終端,運行以下命令來安裝所需的庫。將庫作為以空格分隔的列表來傳遞。
您將使用OpenCV獲取并預處理視頻輸入,使用NumPy處理數組。
一旦您安裝了庫,等待IDE更新項目骨干部分。更新完成、環(huán)境準備就緒后,您就可以開始編碼了。
注意:完整的源代碼可以在GitHub代碼庫中找到(https://github.com/makeuseofcode/Face-Blurring)。
2、導入所需的庫
首先,導入OpenCV庫和NumPy庫。這將使您能夠調用和使用它們支持的任何函數。導入OpenCV-python作為cv2。
OpenCV-python模塊使用名稱cv2作為OpenCV社區(qū)建立的約定。OpenCV- Python是OpenCV庫的Python包裝器,用C++編寫。
3、獲取輸入
創(chuàng)建一個變量,并初始化VideoCapture對象。如果您想使用計算機的主攝像頭作為輸入源,應傳遞0作為參數。要使用連接到計算機上的外部攝像頭,請傳遞1。要對預先錄制的視頻執(zhí)行人臉模糊處理,請改而傳遞視頻的路徑。若要使用遠程攝像頭,傳遞攝像頭的URL,其中含有IP地址和端口號。
要對輸入執(zhí)行人臉模糊,您需要這三個函數:
- 對輸入進行預處理的函數。
- 將模糊輸入中的人臉的函數。
- 將控制程序流程并顯示輸出的main函數。
4、視頻輸入預處理
創(chuàng)建一個輸入預處理函數,將輸入視頻的每一幀作為其輸入。初始化CascadeClassifier類,您將用這個類檢測人臉。將幀大小調整為640 * 640像素。將調整大小的幀轉換成灰度以便處理,最后檢測輸入中的人臉,并將其與矩形綁定。
該函數返回一個元組,含有調整大小的圖像和表示檢測到的人臉的矩形列表。
5、模糊人臉
創(chuàng)建一個模糊函數,將模糊輸入中的人臉。該函數將調整大小的幀和預處理函數返回的包圍人臉的矩形列表作為輸入。循環(huán)處理人臉矩形。計算每個矩形的中心和模糊圓的半徑。通過將所有像素初始化為0,創(chuàng)建一個與調整大小的幀具有相同尺寸的黑色圖像。使用計算出的半徑,在中心位于人臉矩形的黑色圖像上繪制白圓。最后,它模糊白圓上的圖像。
該函數使用NumPy where()函數在模糊過程中重建幀。
6、控制程序流程
創(chuàng)建一個主函數,充當程序的入口點。然后它將控制程序流程。該函數將開始一個無限循環(huán),不斷捕獲視頻輸入的幀。調用cap對象的讀取方法,從攝像頭讀取幀。
然后,該函數將幀傳遞給預處理函數,并將返回值傳遞給另一個函數face_blur,以獲得模糊后的圖像。然后,它調整模糊函數返回的幀的大小,并顯示輸出。
該函數還在用戶按下q鍵時終止輸出顯示。
7、運行程序
確保在運行腳本時先運行main函數。如果將腳本作為另一個程序中的模塊導入,該條件將為假。
這允許您將腳本作為模塊來使用或作為獨立程序來運行。當程序運行時,您應該看到類似這樣的輸出:
人臉已經過模糊處理,辨認不出來。
8、人臉模糊的實際應用
您可以在許多類型的應用環(huán)境中運用人臉模糊來保護隱私。街景和地圖服務使用模糊技術來模糊圖像中人物的臉部。執(zhí)法部門使用人臉模糊技術來保護證人的身份。
許多視頻分享平臺也為用戶整合了人臉模糊功能。比較人臉模糊在這些領域的使用可以幫助您觀察其他平臺如何整合這項技術。
原文鏈接:https://www.makeuseof.com/python-blur-human-faces-real-time/