不用等微信官方!微信圣誕帽,我用Python就能搞定!
轉(zhuǎn)眼之間,一年一度的圣誕節(jié)又要來(lái)了,今年的圣誕節(jié)比以往年來(lái)的更冷一些,北京氣溫直接跌破零下十度。

劇烈的降溫之下,想出門(mén)慶祝圣誕是不可能了,菜鳥(niǎo)哥只想在被子里,默默的慶祝。

雖然不能出門(mén),但是咱們可以通過(guò)其他的方式來(lái)感受圣誕節(jié)的節(jié)日氛圍。小伙伴們還記得前幾年,每逢圣誕節(jié)時(shí),大家都會(huì)通過(guò)@微信官方的形式,來(lái)希望微信官方能夠給自己的人物頭像上添加一頂紅色的圣誕帽。

今年,菜鳥(niǎo)哥昨天平安夜就寫(xiě)了這個(gè)程序,來(lái)給微信人物頭像添加圣誕帽。感興趣的小伙伴,抓緊準(zhǔn)備好擼起代碼,接下來(lái),我們就進(jìn)入主題。
01.環(huán)境準(zhǔn)備
俗話說(shuō),工欲善其事必先利其器。首先,我們要搭建好我們的程序環(huán)境。程序中使用到的python庫(kù)包括:
opencv-python ? ? ? ? ? ? 4.5.3.56
dlib ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 19.6.1
python的版本為python3.6,而編輯器則是用的pycharm2021.1.3版本。
大家可以針對(duì)上面的程序環(huán)境來(lái)安裝對(duì)應(yīng)的python庫(kù)。對(duì)于python庫(kù)的安裝,可以利用 pip install opencv-python 的命令來(lái)進(jìn)行安裝。
02.正式程序
在正式的程序中,我們的程序原理可以利用下圖進(jìn)行解釋?zhuān)?/p>

上圖中,可以很好的解釋我們的程序:
a).傳入人臉圖片,進(jìn)行正臉識(shí)別(只有識(shí)別到正臉才能佩戴帽子),提取人臉的5個(gè)關(guān)鍵點(diǎn),。
b).根據(jù)人臉大小調(diào)整帽子大小。
c).根據(jù)人臉確定放帽子的位置,并提取除帽子以外的區(qū)域。
d).提取出來(lái)帽子的圖片,并和第3步的結(jié)果相加
f).將第四步的結(jié)果圖片覆蓋到原圖中對(duì)應(yīng)的位置上去。
1.人臉識(shí)別
對(duì)于人臉識(shí)別,利用的是dlib庫(kù)進(jìn)行完成,dlib中已經(jīng)訓(xùn)練好對(duì)于人臉的提取和人臉關(guān)鍵點(diǎn)檢測(cè):

程序中,利用dlib檢測(cè)到的人臉存放在faces變量中,如果檢測(cè)到人臉,則通過(guò)for循環(huán)來(lái)進(jìn)一步檢測(cè)人臉當(dāng)中的關(guān)鍵點(diǎn),并提取人臉中左右眼角的位置坐標(biāo)信息。
2.調(diào)整帽子大小

在得到人臉的大小后,就需要針對(duì)人臉的大小來(lái)調(diào)節(jié)帽子的大小,使得人臉和帽子的大小比例協(xié)調(diào)。resized_hat變量中保存的是調(diào)整好的帽子圖片。
3.根據(jù)人臉確定放帽子的位置,并提取除帽子以外的區(qū)域。

程序中,根據(jù)人臉的位置來(lái)確定帽子適合防止的位置,從原圖中提取出相應(yīng)的位置backROI,mask_inv為提取到的帽子的形狀。通過(guò)cv2.multiply函數(shù),將backROI區(qū)域中,除帽子之外的區(qū)域保留下來(lái),保存到bg變量中。結(jié)果如下圖所示。


上圖的程序中,通過(guò)cv2.bitwise_and函數(shù),來(lái)僅保留帽子的圖像,hat變量的結(jié)果如下圖所示。

通過(guò)函數(shù)cv2.add,來(lái)將上面的兩張圖進(jìn)行合并。

最后,將合并的結(jié)果圖放回到原圖中對(duì)應(yīng)的位置即可。這樣,就可以得到一張漂亮的圣誕帽圖片了。

03.批量處理
為了方便大家批量的處理圖片,菜鳥(niǎo)哥也為大家貼心的寫(xiě)了批量化處理的函數(shù)。

大家可以通過(guò)以傳入文件夾的形式,來(lái)批量的為頭像添加圣誕帽。最后,菜鳥(niǎo)哥為大家展示幾張完成的照片效果。

總結(jié)
整個(gè)程序不是很難,關(guān)鍵是dlib這個(gè)環(huán)境不太好安裝(需要安裝gcc然后編譯),非常麻煩。需要圖片加圣誕帽子,也可以找小助手幫忙。公眾號(hào)后臺(tái)輸入:小助手,暗號(hào):圣誕
圣誕節(jié)來(lái)臨了,今年的冬天是真的冷哦,不說(shuō)了,取暖基本靠抖,我要去吃火鍋了!
推薦閱讀:
入門(mén):?最全的零基礎(chǔ)學(xué)Python的問(wèn)題? |?零基礎(chǔ)學(xué)了8個(gè)月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑
干貨:爬取豆瓣短評(píng),電影《后來(lái)的我們》?|?38年NBA最佳球員分析?|? ?從萬(wàn)眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個(gè)海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!
AI:?會(huì)做詩(shī)的機(jī)器人?|?給圖片上色?|?預(yù)測(cè)收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水印!?|?一鍵把html網(wǎng)頁(yè)保存為pdf!|??再見(jiàn)PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r(jià)機(jī)票提示器!?|60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!|
年度爆款文案
點(diǎn)閱讀原文,看200個(gè)Python案例!

