日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

頭像識別 頭像識別


頭像識別 頭像識別


作者: 派森醬
來源:Python 技術(shù)
隨著圣誕節(jié)的到來,節(jié)日氣氛也越來越濃厚 。大街上隨處可見掛滿飾品的圣誕樹,好多小伙伴的頭上也多了一頂紅色牛角的圣誕帽 。
往年在這個時候,好多 P圖軟件 會推出給頭像加一頂圣誕帽的功能,甚至有一年大伙 @微信官方 就可以在自己的微信頭像上加一頂圣誕帽 。
作為一個學(xué)習(xí) Python 的技術(shù)人,自己可以寫程序?qū)崿F(xiàn)這個功能,做成一個軟件當(dāng)然是一件很酷的事情了 。
今天就給大家分享一下如何用 Python 制作一款自動給頭像添加圣誕帽的軟件 。
如果不想看實現(xiàn),可以直接跳到文末獲取軟件 。
思路
我們的 頭像添加圣誕帽軟件 制作的大致思路如下:
要實現(xiàn)一個軟件,我們需要制作一個 GUI 界面,供用戶操作 。要實現(xiàn)頭像戴圣誕帽功能,我們需要用戶上傳一張頭像,我們還需要準(zhǔn)備一頂圣誕帽子圖片 。要把圣誕帽戴在頭像上,我們需要識別頭像中的人臉和頭部特征,然后將帽子放在頭頂合成一張圖片 。
基于以上思路,我們制作這款軟件的關(guān)鍵詞有:
GUI 界面圣誕帽圖片頭像圖片人臉識別打包軟件實現(xiàn)
看了以上思路,相信大家腦海中已經(jīng)對這個軟件制作的過程有了一個大致的框架了 。我們的實現(xiàn)主要分為:圖像制作、GUI界面、打包三大塊內(nèi)容 。
準(zhǔn)備工作
首先列舉一下本次軟件制作過程中需要用的的一些包模塊:
cv2
pip install opencv-python
os
python 系統(tǒng)模塊
dlib
pip install dlib
【頭像識別 頭像識別】numpy
pip install pandas
PySimpleGUI
pip install PySimpleGui
溫馨提示:這其中安裝 dlib 會遇到很多坑以及很多困難,一般需要一邊安裝一邊上網(wǎng)搜索報錯,從而找到解決辦法 。保證安裝過一次之后不想嘗試第二次 。
圖像制作準(zhǔn)備圣誕帽
我們需要準(zhǔn)備一個圣誕帽的圖片,格式最好為 png,因為 png 圖片我們可以直接用 Alpha通道 作為掩膜使用 。如果是 jpg 圖片,需要先轉(zhuǎn)換成 png 格式圖片 。注意這里的轉(zhuǎn)換不是只改個后綴名,那樣是行不通的 。
我們用到的圣誕帽如下圖:
為了能夠與 RGB 通道的頭像圖片進(jìn)行運算,我們需要把圣誕帽圖像分離成 RGB 通道圖像和 alpha通道圖像:
r,g,b,a = cv2.split(hat_img)
rgb_hat = cv2.merge((r,g,b))
cv2.imwrite("hat_alpha.jpg",a)
分離之后,得到的 alpha通道圖像如下所示:
人臉識別
我從我的百寶箱中選擇了一張傻萌傻萌的圖片作為程序的測試圖片 。
大家注意,因為我們要做人臉識別,然后自動添加帽子,所以選擇的圖片一定要是真人的正面照片,不然識別不了人臉,也就不知道在哪添加圣誕帽 。
下面我們用 dlib 的正臉檢測器進(jìn)行人臉檢測,用 dlib 提供的模型提取人臉的五個關(guān)鍵點 。代碼如下:
# dlib人臉關(guān)鍵點檢測器
predictor_path = "shape_predictor_5_face_landmarks.dat"
predictor = dlib.shape_predictor(predictor_path)
# dlib正臉檢測器
detector = dlib.get_frontal_face_detector()
# 正臉檢測
dets = detector(img, 1)
# 如果檢測到人臉
if len(dets)>0:
for d in dets:
x,y,w,h = d.left(),d.top(), d.right()-d.left(), d.bottom()-d.top()
# x,y,w,h = faceRect
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2,8,0)
# 關(guān)鍵點檢測,5個關(guān)鍵點
shape = predictor(img, d)
for point in shape.parts():
cv2.circle(img,(point.x,point.y),3,color=(0,255,0))
cv2.imshow("image",img)

推薦閱讀