伊人久久大香线蕉综合BD高清,变态另类天堂无码,大又大又粗又硬又爽少妇毛片,中文字幕有码一区二区三区

  • 服務(wù)熱線(xiàn):13728883399
  • wangyp@shangeai.com

20行Python代碼給微信頭像戴帽子

時(shí)間:2019-01-18 10:41:46點(diǎn)擊:524次

朋友圈里@微信官方要求戴圣誕帽的活動(dòng)曾經(jīng)火爆一時(shí),有些會(huì)玩的小伙伴都悄咪咪地用美圖秀秀一類(lèi)的 app 給自己頭像 p 一頂,然后可高興地表示“哎呀好神奇hhhh”,呆萌的小伙伴當(dāng)然就一直等啊等... ...作為一名堅(jiān)信“用技術(shù)解決需求”的萌新,在一個(gè)無(wú)聊的周末嘗試用python來(lái)搞一波事情。

主要思路

準(zhǔn)備兩張圖:一張頭像,一張帽子。先用人臉識(shí)別定位頭像中的人臉,給出人臉像素坐標(biāo);再根據(jù)這個(gè)坐標(biāo)確定帽子放置的坐標(biāo);最后將兩張圖片拼接后輸出。(需要注意的是,帽子是不規(guī)則圖像,除了主體外背景應(yīng)該是透明的,因此必須是四通道png格式)。gakki 醬親自演示如下:

示意圖

問(wèn)題展開(kāi)

1. 人臉識(shí)別怎么搞定?(重新造輪子?不存在的,這輩子都不可能造輪子的)。Github上一個(gè)開(kāi)源的python人臉識(shí)別庫(kù)face_recognition雙手奉

https://github.com/ageitgey/face_recognition#face-recognition

據(jù)說(shuō)識(shí)別率99.38%(頂瓜瓜啊!)。通過(guò)安裝這個(gè)庫(kù)就可以調(diào)用人臉檢測(cè)器。

2. 確定了帽子的放置位置,怎么拼接圖層?這個(gè)屬于基本的圖像操作,python提供了PIL(Python Image Lib)這么一個(gè)庫(kù)來(lái)進(jìn)行圖像處理,具體操作請(qǐng)看后面的代碼。

庫(kù)的安裝

我的環(huán)境是Ubuntu 16.04+Python2.7.12。使用Window,Mac OS和Python3的同學(xué)也可以參考,都是類(lèi)似的。face_recognition這個(gè)庫(kù)比較事兒,安裝前需要依次安裝boost(boost_python),cmake,dlib這幾個(gè)依賴(lài)和庫(kù),中間出現(xiàn)任何問(wèn)題都可以通過(guò)Google解決(懶得寫(xiě) -.. -)。安裝完所有的依賴(lài)后,使用命令:

1pip install face_recognition2pip install pillow #PIL庫(kù)

完成后就可以在你的python腳本里import face_recognition和PIL了。

代碼分析

Talk is cheap, show me the code。直接上代碼:

1from PIL import Image 2import face_recognition 3img_path = raw_input("image path:") 4image = face_recognition.load_image_file(img_path) 5face_locations = face_recognition.face_locations(image) 6print("Found {} face(s) in this photograph.".format(len(face_locations)))

第1、2行導(dǎo)入PIL庫(kù)中的Image模塊和face_recognition庫(kù)。第3行,等待用戶(hù)輸入頭像圖片的路徑。第4行,把路徑所指的圖像數(shù)據(jù)讀入image中。第5行,調(diào)用face_locations處理image中的圖像數(shù)據(jù),對(duì)圖片中的人臉進(jìn)行識(shí)別定位,定位后的得到的像素坐標(biāo)數(shù)據(jù)放在face_locations里。第6行在shell里輸出圖片里識(shí)別到的人臉的個(gè)數(shù)。

7human_img = Image.open(img_path) 8human_img = human_img.convert("RGBA") 9hat_img = Image.open("./hat.png")10hat_img = hat_img.convert("RGBA")

第7、8行,把路徑所指的圖像數(shù)據(jù)讀入human_img中,并轉(zhuǎn)換為四通道RGBA模式。9、10行讀入帽子圖像并做相同處理。

11for face_location in face_locations:12 top, right, bottom, left = face_location13 top -= 1014 print("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))15 head_h = bottom-top#hight of head16 head_l = right-left#length of head17 hat_img = hat_img.resize( (head_l,head_h) )#convert size of hat18 hat_region = hat_img19 human_region = ( left, top-head_h, right, top )20 human_img.paste(hat_region, human_region,mask=hat_img)21human_img.show()

如果一張圖里有多張人臉,face_recognition.face_locations(image)會(huì)返回每張人臉的位置信息,存放在一個(gè)list里。因此第11行是遍歷face_locations里的每張人臉的數(shù)據(jù)。第12行解包一個(gè)人臉像素坐標(biāo)數(shù)據(jù),得到top,right,bottom,left分別為示意圖中的y1,x2,y2,x1。第13行,為啥y1要減10個(gè)像素?
因?yàn)槿四樧R(shí)別得到的y1最多到你額頭的位置,所以再把這個(gè)坐標(biāo)往上提一提帽子才戴得更自然。第14行輸出坐標(biāo)數(shù)據(jù)方便調(diào)試。第15、16行計(jì)算人臉的高度和寬度。第17行使用resize()根據(jù)人臉的大小調(diào)整帽子的大小,因?yàn)閳D像中的人臉有大有小,調(diào)整后看起來(lái)更和諧。第18行,將帽子圖像作為頂部圖層圖像。第19行,確定底部圖層(頭像圖片)被覆蓋的區(qū)域(就是帽子放置區(qū)域)。
第20行,把頂部圖層與底部圖層拼接(不太明白的看下圖)。然后一個(gè)循環(huán)結(jié)束,亦即完成圖片中一個(gè)人的戴帽操作,接著進(jìn)行下個(gè)人的戴帽,直到所有人都戴上了帽子。最后21行,完成輸出~

更新

更多人臉:

原文標(biāo)題:20行Python代碼給微信頭像戴帽子

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):AI科技大本營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

  • 標(biāo)簽: