自1月20日鍾南山院士確定這次新型肺炎存在着人傳人的現象起,到今日的武漢封城,咱們人民羣衆也須要提升對這次疫情的重視程度,作好自身的防範工做,平平安安,過個好年。json
儘可能少去人羣密集的場所,若是非要出門必定要戴上口罩,勤用肥皂和清水或含有酒精的洗手液洗手也是很是有必要的。segmentfault
在網絡世界中,咱們能夠經過給頭像戴口罩,來呼籲廣大羣衆積極保護自身安全。在這裏,咱們運用Python簡單的幾十行代碼來實如今社交網絡中也給本身的頭像自動戴上口罩。api
大體的效果以下:安全
用到的技術主要有人臉識別(固然,調用了接口)、openCV圖像處理這兩項。網絡
曠視提供了人臉識別的API,輸入圖片即可以獲得人臉的各個稠密關鍵點的所在位置,通俗來說,就是勾畫出五官。app
咱們經過使用其嘴巴的位置數據,能夠定位口罩的佩戴位置。並經過計算人臉嘴巴的大小,自動調整口罩的大小進行適配。less
def get_mouth(dst_pic): with open(dst_pic, 'rb') as f: base64_data = base64.b64encode(f.read()) url='https://api-cn.faceplusplus.com/facepp/v1/face/thousandlandmark' headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'} data={ # api_key,api_secret需本身申請 'api_key':'', 'api_secret':'', 'return_landmark': 'mouth', 'image_base64': base64_data } r=requests.post(url,headers=headers,data=data) mouth=r.json()['face']['landmark']['mouth'] x,y=[],[] for i in mouth.values(): y.append(i['y']) x.append(i['x']) y_max=max(y) y_min=min(y) x_max=max(x) x_min=min(x) middle_x=int((x_max+x_min)/2) middle_y=int((y_max+y_min)/2) size=(int(3*(x_max-x_min)),int(5*(y_max-y_min))) return (middle_x,middle_y),size
有了口罩的估計大小,能夠自動更改口罩的圖像大小,根據計算獲得的口罩的中心位置來擺放口罩,並經過簡單的掩膜處理,利用seamlessClone函數將口罩照片添加到頭像圖片上。函數
def add_mask(img_path,img_outPath): src_pic="/root/Documents/abc.jpg" center,size=get_mouth(img_path) src=cv2.imread(src_pic) src=cv2.resize(src,size) dst=cv2.imread(img_path) # 掩膜mask mask=255*np.ones(src.shape, src.dtype) output=cv2.seamlessClone(src, dst, mask, center, cv2.NORMAL_CLONE) cv2.imwrite(img_outPath, output)
固然,這只是一個小demo, 有許多地方能夠改進,例如咱們能夠根據鼻樑的傾斜程度判斷人臉的傾斜程度,從而對口罩作相應的旋轉操做,更加適配人臉。post