當前位置:
首頁 > 最新 > dlib19.9+opencv3.4人臉檢測自動加墨鏡

dlib19.9+opencv3.4人臉檢測自動加墨鏡

今天我們來驗證一下dlib的人臉識別的5點特徵點提取效果,並利用這五個點給人臉加上一個墨鏡。


5個特徵點

dlib提供了人臉5個特徵點的提取模板,但在官網的目錄下已經打不開了,瀏覽器中點擊時出現一堆亂碼,不知是什麼原因。我在github上搜索,還好,找到一個利用這5個特徵點給人體自動加上一頂聖誕帽的項目,在那裡可以找到shape_predictor_5_face_landmarks.dat文件,當然,68個特徵點的模板文件也一樣無法打開,在csdn上搜索,或者在dlib原來託管的sourceforge網站上可以下載,感興趣的同學可以自行查找。

提取5個特徵點的python語句也非常簡單,首先建立一個探測器來檢測人臉:

detector = dlib.get_frontal_face_detector()

讀入圖片進行檢測:

faces = detector(img,1)

建立提取特徵點的函數:

landmark_predictor = dlib.shape_predictor("shape_predictor_5_face_landmarks.dat")

將檢測到的人臉方框輸入進行提取:

shape = landmark_predictor(img,d)

5個特徵點的坐標就包含在shape中,分別用shape.part(0-4)來表示。

5個特徵點分別為左右眼角和人中位置。

這裡給出實例如下:


人臉加墨鏡

5個特徵點只能大概標識出人臉的位置,可以用於在人臉上增加一些有趣的小飾件,比如墨鏡之類。

我在網路上進行搜索,奇怪的是,dlib發行了這麼久,網路上關於人臉加墨鏡的例子也很多,但可以自適應人臉傾斜角度的文章卻幾乎找不到,問這個問題的帖子倒是很多,本博文給出一個簡單的解決方案,供感興趣的同學參考。

墨鏡準備

首先我們要找到一個經過摳圖的墨鏡,這個墨鏡logo的尺寸大有講究,假如墨鏡本身的尺寸為w,h,那麼背景的尺寸應該為墨鏡尺寸對角線長度的正方形,即sqrt(w**2+h**2)。這樣才能根據人臉的角度來旋轉墨鏡。

墨鏡logo的樣板如下:

旋轉

然後我們根據5個特徵點中的第0點和第2點來計算人臉的角度。

根據計算出的角度對墨鏡logo進行旋轉,比如旋轉30°效果如下:


製作蒙版

分別製作兩個互反的正版和負版,分別對墨鏡和圖片人臉相應區域進行摳圖,蒙版的效果如下:


複合

將墨鏡和人臉的蒙版效果圖疊加,並將疊加後的圖片重新賦值給原圖片,就實現了自動給人臉加墨鏡的效果。

最終的效果如下:

圖片中墨鏡位置好像有一點點偏差,這是因為我在製作墨鏡logo時,墨鏡並未嚴格處於背景的中心,時間關係,就留著這一點瑕疵吧。

代碼可以在我的csdn上搜索同名博客即可。


動態驗證

我的電腦實在太過古老,速度太慢,勉強看吧。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 艾克思 的精彩文章:

TAG:艾克思 |