大數據文摘出品
作者:牛婉楊
我們現在經常用到的馬賽克其實起源於建築上的圖案裝飾,如今馬賽克常用於圖像或視頻的模糊處理。隨著技術的進步,打碼與去碼變成了一種常見的技術研究方向,同時也掀起了一場技術與道德的“戰爭”。
那麼為什麼要打馬賽克?其實是出於一種隱私保護,例如新聞上出現犯罪嫌疑人的畫面時是需要打碼的,因為尚未定罪時需要維護嫌疑人的肖像權。
現如今,大部分打馬賽克的工作都需要我們手動來打,比如在圖像/視頻製作軟件裡添加馬賽克。那麼這種工作能不能交給AI呢?如果AI可以自動對圖像/視頻進行實時處理,無疑會幫人類減輕很大的工作量。
答案是可以!Adrian Rosebrock博士在博客中分享了通過OpenCV實現“人臉自動馬賽克”這一教程,而這個項目是受到了他的一位博客讀者的啟發。事實上,這個項目有很大的現實意義。
那麼,AI究竟是如何做到自動實時打碼的?說到這裡,首先需要介紹一下什麼是人臉模糊。
什麼是人臉模糊?
Adrian Rosebrock博士在博客中詳細的分享了技術實現方法,從介紹人臉檢測器,人臉模糊的簡單步驟,到分別用OpenCV對人臉進行高斯模糊和像素化模糊的詳細操作。
Adrian Rosebrock博士的詳細教程:
https://www.pyimagesearch.com/2020/04/06/blur-and-anonymize-faces-with-opencv-and-python/
簡單來說,實現人臉模糊可以分為以下4步:
第一步:人臉檢測
在這一步可以使用任何的人臉檢測器,只要它能在圖像或視頻中生成人臉的邊界框座標就行。
有一些常見的人臉檢測工具可以供你參考:
- Haar cascades
- HOG + Linear SVM
- Deep learning-based face detectors
一旦識別到人臉,就可以進入到第二步了。
第二步:圖像/視頻的ROI提取
臉探測器會給出一個邊界框,也就是圖像中人臉的座標(x, y)。
這些座標通常表示:
- 人臉邊界框的起始座標x
- 面部截止的座標x
- 人臉位置的起始座標y
- 面部截止的座標y
然後就可以用這些信息來提取人臉ROI(感興趣區域),如下圖所示:
接下來就開始進行人臉模糊啦。
第三步:人臉模糊
說到打碼這件事,有兩種常用的模糊方式,一個是高斯模糊,一個是像素化模糊。高斯模糊的效果比較“溫柔”,但很可能面臨著模糊不徹底的問題,而像素化模糊就相當簡單粗暴,是我們最常見的馬賽克樣式。
這兩個模糊方式都可以實現人臉自動模糊這個項目,練習時可以憑你的個人喜好選擇。
在進行人臉模糊之後,最後一步就是將模糊後的人臉放回原始圖像中。
第四步:將模糊後的照片整合到原始圖像中
使用來自人臉檢測的原始(x, y)座標(步驟二中提到的),我們可以得到模糊/匿名化的人臉,然後將其存儲到原始圖像中(如果使用OpenCV和Python,則此步驟使用NumPy數組切片)。
至此,人臉模糊的部分就完成了。
如何在實時視頻中通過AI實現人臉自動模糊?
文摘菌在這裡簡單展示一下如何使用OpenCV識別人臉,然後再將人臉模糊應用到實時視頻流中。
首先需要從Adrian Rosebrock博士的這篇博文中獲取源代碼,然後打開OpenCV人臉檢測器,使用以下命令啟動blur_face_video.py:
<code>$ python blur_face_video.py --face face_detector --method simple [INFO] loading face detector model... [INFO] starting video stream.../<code>
以可以通過method pixelated來進行像素化的人臉模糊:
<code>$ python blur_face_video.py --face face_detector --method pixelated [INFO] loading face detector model... [INFO] starting video stream.../<code>
以上應用的人臉模糊方法,是假設輸入視頻流的每一幀中都可以檢測到人臉。
那麼,如果檢測器中途未能檢測到人臉會怎樣?顯然,在漏掉的幀中無法進行打碼,也就破壞了人臉模糊的目的。
在這種情況下我們該怎麼做呢?
通常,在人臉移動的比較慢的情況下,有一個簡單的方法是取最後一個已知的面部位置,然後模糊該區域。
還有一種高級的方法是使用專門的對象跟蹤器,如果人臉檢測器沒有識別到,則對象追蹤器可以補充提供面部位置,這個方法會複雜很多,因為要在人臉的多個角度建立跟蹤,但是這個方法也更加完善。
微軟曾提出一種可在視頻中通過AI實現人臉模糊的方法
早在2017年,微軟研究院就提出了一套基於AI算法的視頻人臉模糊解決方案。雖然該算法能夠對視頻進行自動處理,但是需要用戶點擊想要打碼的人才能打上馬賽克。
這套算法能夠將源視頻中的人物提取出來,並返回給用戶,然後用戶可以自由選擇給誰打碼。
要想打碼,首先需要找出所有人臉的出現位置,並把同一個人所有幀中的人臉連接起來。為此,需要有三個算法:人臉檢測、跟蹤、識別。
下圖更為詳細的展示了關於這套人臉模糊系統具體是如何工作的:
在時間複雜度方面,微軟研究院稱該系統在Azure的CPU服務器上能夠實時處理720p的視頻,並且能夠以2倍時長處理1080p的高清視頻。
技術始終在進步,3年前就可以做到在視頻中通過AI進行人臉模糊,3年後已經可以利用AI在實時視頻流中自動打碼了,我們相信,科技還能做到更多。
儘管,目前AI實時打碼這一技術還尚未成熟,但總有一天技術能夠“承擔”起更多的社會責任,保護更多的人。
相關報道:
https://www.pyimagesearch.com/2020/04/06/blur-and-anonymize-faces-with-opencv-and-python/
https://www.zhihu.com/question/21672713