如何構(gòu)建自己的臉部模糊工具
如何使用OpenCV自定義去識別面
去身份是指將數(shù)據(jù)匿名化的過程。隨著歐洲聯(lián)盟的GDPR和其他國家的類似措施的實施,保護PII(個人身份信息)成為準(zhǔn)備數(shù)據(jù)集或任何個人信息處理的必要步驟。當(dāng)然,一個人(™)的臉是一個人(™)身份最突出的特征之一,因此有很多解決方案可以檢測和匿名化面孔。但是,它們很難定制和自動化。這是一份DIY指南,面向那些想要使用開放源碼自己做這件事的人。整個代碼示例可以在Colab中運行,并可在此處獲得。 GDPR here:https://github.com/changsin/DL/blob/main/notebooks/deidentify_faces_opencv.ipynb
自動匿名化人臉?biāo)婕暗牟襟E包括:
1.人臉檢測
由于人臉檢測是對象檢測的一種類型,因此我們可以使用深度學(xué)習(xí)網(wǎng)絡(luò)來實現(xiàn)這一目的。OpenCV包含一個深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)經(jīng)過預(yù)先訓(xùn)練,可以使用公開可用的數(shù)據(jù)集檢測人臉。它使用Caffe深度學(xué)習(xí)框架,您可以下載模型定義和預(yù)先訓(xùn)練的權(quán)重文件。下載后,加載它們以創(chuàng)建深度神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)現(xiàn)在可以檢測圖像中的人臉。 Caffe Deep Learning framework
現(xiàn)在,我們只需要加載圖像并將其傳遞給DNN以檢測人臉,如以下代碼片段所示:
每個預(yù)測結(jié)果包含類別ID(索引=1)、置信度(索引=2)和檢測到的面部坐標(biāo)。
- # a sample prediction output from DNN
- array([0. , 1. , 0.8745881 , 0.68375957, 0.47576728, 0.75310016, 0.62532324], dtype=float32)
因為我們只對人臉檢測感興趣,所以我們可以只關(guān)注置信概率,并使用它來接受或拒絕預(yù)測。
現(xiàn)在讓?euro™處理一個示例圖像。我之所以選擇這張公開發(fā)布的圖片,是因為它有不同角度和膚色的People-uro™的面孔。
當(dāng)置信度閾值設(shè)置為0.5(即50%確信這是一張臉)時,它只檢測到一張臉:面向前面的人。
這是可以理解的,也是所有人臉檢測算法的共同問題。解決這個問題的正確方法是添加更多種類的包含側(cè)面輪廓和其他角度的圖像。一種簡單而廉價的方法就是簡單地降低信心。例如,當(dāng)置信度設(shè)置為0.12時,結(jié)果會好得多。
然而,引入了一個新的問題。在如此低的置信閾值下,預(yù)計會有更多的假陽性和假陰性。你可以在左邊看到三個標(biāo)有標(biāo)簽的盒子。好消息是,您可以在一定程度上控制模型預(yù)測。
2.人臉匿名化
一旦檢測到人臉,下一步就是如何對其進行匿名化/去身份識別。存在不同的技術(shù)。我將展示三種方法:即兩種模糊技術(shù)和一種像素化方法。
a.矩形中的模糊處理
最簡單的方法是使用OpenCVâuro™的模糊方法,該方法通過對卷積內(nèi)核內(nèi)的像素值進行平均來實現(xiàn)。換句話說,卷積的作用相當(dāng)于平滑的過濾。通過調(diào)整內(nèi)核大小,可以獲得或多或少的粗粒度模糊效果。由于圖像是作為多維整數(shù)數(shù)組處理的,因此您只需在一行代碼中將感興趣區(qū)域替換為模糊像素即可: OpenCV’s blur
- image[startY:endY, startX:endX] = cv2.blur(image[startY:endY, startX:endX], kernel_size)
以下是使用kernel_size(20,20)時的結(jié)果:
b.省略號中的模糊處理
雖然在矩形中進行模糊可以實現(xiàn)所需的匿名化,但生成的圖像看起來相當(dāng)不和諧。使用較小的核大小,可以平滑不一致的模糊,但另一種方法是在橢圓中進行模糊,因為People?uro™的臉是橢圓形的。要做到這一點,需要通過創(chuàng)建掩碼和執(zhí)行一些按位操作來完成一些工作。以下是(10,10)內(nèi)核大小的結(jié)果:
c.像素化
另一種流行的去識別人臉的方法是使用œ像素化。在像素化中,感興趣的區(qū)域被分成幾個小塊。-euro�在像素化中,感興趣的區(qū)域被分成幾個小塊。對于每個擋路,將計算平均RGB值并將其應(yīng)用于整個擋路。如您所見,生成的圖像看起來非常自然:
結(jié)論
取消人臉識別是保護隱私的第一步。雖然有許多現(xiàn)成的解決方案可用,但本文展示了使用OpenCV進行自定義和自動化的簡單DIY步驟。整個源代碼都在Jupyter筆記本上,可以在這里找到。https://github.com/changsin/DL/blob/main/notebooks/deidentify_faces_opencv.ipynb
參考文獻
- 使用OpenCV和Python模糊和匿名化人臉
- 基于OpenCV和深度學(xué)習(xí)的人臉檢測