AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!

AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!

大數據文摘出品

作者:牛婉楊


我們現在經常用到的馬賽克其實起源於建築上的圖案裝飾,如今馬賽克常用於圖像或視頻的模糊處理。隨著技術的進步,打碼與去碼變成了一種常見的技術研究方向,同時也掀起了一場技術與道德的“戰爭”。


那麼為什麼要打馬賽克?其實是出於一種隱私保護,例如新聞上出現犯罪嫌疑人的畫面時是需要打碼的,因為尚未定罪時需要維護嫌疑人的肖像權。


現如今,大部分打馬賽克的工作都需要我們手動來打,比如在圖像/視頻製作軟件裡添加馬賽克。那麼這種工作能不能交給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步:


AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!


第一步:人臉檢測


在這一步可以使用任何的人臉檢測器,只要它能在圖像或視頻中生成人臉的邊界框座標就行。

AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!


有一些常見的人臉檢測工具可以供你參考:

  • Haar cascades
  • HOG + Linear SVM
  • Deep learning-based face detectors


一旦識別到人臉,就可以進入到第二步了。


第二步:圖像/視頻的ROI提取


臉探測器會給出一個邊界框,也就是圖像中人臉的座標(x, y)。


這些座標通常表示:


  • 人臉邊界框的起始座標x
  • 面部截止的座標x
  • 人臉位置的起始座標y
  • 面部截止的座標y


然後就可以用這些信息來提取人臉ROI(感興趣區域),如下圖所示:

AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!


接下來就開始進行人臉模糊啦。


第三步:人臉模糊


說到打碼這件事,有兩種常用的模糊方式,一個是高斯模糊,一個是像素化模糊。高斯模糊的效果比較“溫柔”,但很可能面臨著模糊不徹底的問題,而像素化模糊就相當簡單粗暴,是我們最常見的馬賽克樣式。


AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!

高斯模糊下的面部圖像


這兩個模糊方式都可以實現人臉自動模糊這個項目,練習時可以憑你的個人喜好選擇。


在進行人臉模糊之後,最後一步就是將模糊後的人臉放回原始圖像中。


第四步:將模糊後的照片整合到原始圖像中

AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!


使用來自人臉檢測的原始(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> 


AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!

高斯模糊實時視頻流


以可以通過method pixelated來進行像素化的人臉模糊:


<code>$ python blur_face_video.py --face face_detector --method pixelated
[INFO] loading face detector model...
[INFO] starting video stream.../<code>


AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!

像素化模糊實時視頻流


以上應用的人臉模糊方法,是假設輸入視頻流的每一幀中都可以檢測到人臉。


那麼,如果檢測器中途未能檢測到人臉會怎樣?顯然,在漏掉的幀中無法進行打碼,也就破壞了人臉模糊的目的。


在這種情況下我們該怎麼做呢?


通常,在人臉移動的比較慢的情況下,有一個簡單的方法是取最後一個已知的面部位置,然後模糊該區域。


還有一種高級的方法是使用專門的對象跟蹤器,如果人臉檢測器沒有識別到,則對象追蹤器可以補充提供面部位置,這個方法會複雜很多,因為要在人臉的多個角度建立跟蹤,但是這個方法也更加完善。


微軟曾提出一種可在視頻中通過AI實現人臉模糊的方法


早在2017年,微軟研究院就提出了一套基於AI算法的視頻人臉模糊解決方案。雖然該算法能夠對視頻進行自動處理,但是需要用戶點擊想要打碼的人才能打上馬賽克。


這套算法能夠將源視頻中的人物提取出來,並返回給用戶,然後用戶可以自由選擇給誰打碼。

AI能實時檢測視頻流中人臉並打馬賽克,視頻後期福音!


要想打碼,首先需要找出所有人臉的出現位置,並把同一個人所有幀中的人臉連接起來。為此,需要有三個算法:人臉檢測、跟蹤、識別


下圖更為詳細的展示了關於這套人臉模糊系統具體是如何工作的:


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


分享到:


相關文章: