当前位置: 首页 > 后端技术 > Python

三十行代码自动戴口罩

时间:2023-03-26 15:34:28 Python

既然1月20日钟南山院士就肯定了新型肺炎会人传人,而今天武汉封城了,我们老百姓也需要多加注意了这次疫情一定程度上要做好自我防护,注意安全,过个好年。尽量少去人多的地方。如果必须外出,必须戴口罩。经常用肥皂和水或含酒精的洗手液洗手也是非常必要的。在网络世界中,我们可以通过给自己的头像戴上口罩来呼吁大众积极保护自身安全。在这里,我们使用Python中的几十行简单代码自动为我们在社交网络中的头像戴上面具。大体效果如下:用到的技术主要是人脸识别(当然是接口调用),openCV图像处理。人脸识别旷视提供人脸识别API。通过输入一张图片,可以得到人脸各个密集关键点的位置。一般来说,就是勾勒出五官的轮廓。通过它嘴巴的位置数据,我们可以定位到口罩的佩戴位置。并通过计算人脸和嘴巴的大小,自动调整口罩大小进行适配。defget_mouth(dst_pic):withopen(dst_pic,'rb')作为f:base64_data=base64.b64encode(f.read())url='https://api-cn.faceplusplus.com/facepp/v1/face/thousandlandmark'headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/76.0.3809.132Safari/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=[],[]foriinmouth.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图像处理有估计尺寸的mask,mask的图片大小可以自动改变,根据计算出来的mask将面具放在面具的中心位置,通过简单的面具处理,使用seamlessClone函数将面具照片添加到头像图片中defadd_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)#maskmaskmask=255*np.ones(src.shape,src.dtype)output=cv2.seamlessClone(src,dst,mask,center,cv2.NORMAL_CLONE)cv2.imwrite(img_outPath,output)当然这只是一个小demo,还有很多可以改进的地方,例如,我们可以根据鼻梁的倾斜度来判断面部的倾斜程度,从而可以相应地旋转口罩,以更好地贴合面部。