導語
當前全球疫情形勢嚴峻復雜
疫情傳播風險進一步增大
提醒大家
即使在接種疫苗后
也要堅持戴口罩
加強個人防護
?
??
?
?
![]()
?2019年底開始蔓延的新肺炎疫情影響著人們的心臟,
作為一個個體,我們能做的就是盡量少呆在家里,
就算要出門每個人都開始戴口罩,所以涉及不同的口罩型別大小,
所以我花了一些時間撰寫了一個小程式,叫做可調節面罩,它可以很容易地為圖片中的肖像戴上面罩,而且面罩的方向和大小更適合面部~
正文
安裝環境
(1)python3版本即可,模塊直接安裝;
pip install face-mask
(2)直接指定要放在影像中的人像遮罩上的影像路徑,將生成新影像(附加-with-mask后綴):
face-mask /path/to/face/picture
(3)指定--show選項,還可以使用默認圖片查看器打開新生成的圖片:
face-mask /path/to/face/picture --show
效果:
給神仙小姐姐戴上面具,
?
??
給多人帶上面具,
?
??給動漫人物戴上面具,
?
思考
要想實作上面的影響,我們應該怎么做?不妨這么想:
-
第一步是識別鼻子(橋)和面部輪廓(下巴)
-
面的左點、底點和右點由面輪廓確定
-
從鼻子和臉的底部確定面具尺寸的高度和中心線
-
把面具平分為兩部分
-
調整左遮罩的大小,寬度是從面的左側點到中心線的距離
-
調整右遮罩的大小,寬度是從面的右點到中心線的距離
-
將左右遮罩合并為新遮罩
-
以中心線相對于Y軸的旋轉角度旋轉新遮罩
-
把新面具放在原圖上
關于人臉識別,可以使用face_recognition庫進行識別,
關于影像處理,可以使用Pillow庫進行處理,
人臉識別
?
??
在幫助下face_recognition圖書館可以很容易地辨認出肖像,最后face_landmarks這是一份名單,每個人face_landmark這意味著一個人就像資料,
face_landmark是一個字典,其中鍵表示縱向特征,值表示該特征的點串列,例如:
-
鑰匙nose_bridge鼻梁
-
鑰匙chin面頰
我們需要face_landmark,戴上相應頭像的面具,
得到鼻子和臉頰的特征點,
?
??
通過上面的代碼,我們得到:
-
代表鼻梁上部的點nose_point
-
表示面的左點chin_left_point
-
右面點chin_right_point
-
表示面的底部chin_bottom_point
拆分、縮放和合并遮罩
?
??
以上代碼主要如下:
-
把面具平分為兩部分
-
調整左遮罩的大小,寬度是從面的左側點到中心線的距離 * 寬度系數 1.2
-
調整右遮罩的大小,寬度是從面的右點到中心線的距離 * 寬度系數 1.2
-
將左右遮罩合并為新遮罩
get_distance_from_point_to_line它用來計算點到線的距離,具體的實作可以在源代碼中看到,
width_ratio寬度因子,用于正確展開遮罩,原因是我們根據臉頰的寬度來計算口罩的寬度,但是口罩在耳朵上,實際寬度應該更寬,
旋轉面罩并將其放置到位
?
??
以上代碼主要如下:
-
以中心線相對于Y軸的旋轉角度旋轉新遮罩
-
計算應該放置遮罩的坐標
-
把新的遮罩放在計算出的原始圖片坐標下
最后,新影像將保存到本地路徑,并且代碼將不會顯示,
總結
我們在幫助下face_recognition 庫可以輕松的識別出人像,然后根據臉頰的寬度和鼻梁位置計算出口罩的大小、方向和位置,并最終生成出戴上口罩的圖片,
整個程序并不復雜,但在坐標計算上要格外小心,如此,我們便打造了一個短小精悍的自動戴上口罩程式!很多小伙伴在學習Python的程序中往往因為沒有資料或者沒人指導從而導致自己不想學下去了....
因此我特意準備了大量的PDF書籍、視頻教程,都免費送給大家!不管你是零基礎還是有基礎都可以獲取到自己相對應的學習禮包!
加原始碼基地:【959755565】,包括Python軟體工具和2021最新入門到實戰教程!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295187.html
標籤:python
上一篇:PYcharm怎么用,一篇教會你
