人脸识别|【人脸识别系列】| 实现自动化妆


文章目录

    • 化妆
      • 人脸特征提取函数——face_landmarks
      • ImageDraw.polygon
    • 具体代码
      • 结果展示

化妆 今天的项目就比较有意思了,给图片中的人脸进行化妆[坏笑],你们想想当你的女朋友说今天拍照忘记涂口红了忘记修眉毛了,这时你说你来,给他夸夸一顿操作结果P的更丑了,这不厕所里打灯笼–找屎吗,不过不要慌今天就由我来拯救你们,咳咳进入正题。
首先,我们还是得先知道一下需要用到的函数都有哪些,主要就是运用了这两个face_landmarks(上一篇已经讲过了,但是为了大家更好的体验和更快的了解我还是给大家弄过来吧),ImageDraw.polygon。
人脸特征提取函数——face_landmarks
face_landmarks( face_image , face_locations=None, model=“large” ) 给定一个图像,提取图像中每个人脸的脸部特征位置 参数: face_image :输入的人脸图片 face_locations=None : 可选参数,默认值为None,代表默认解码图片中的每一个人脸。 若输入face_locations()[i]可指定人脸进行解码 model=“large” :输出的特征模型,默认为“large”,可选“small”。 当选择为"small"时,只提取左眼left_eye、右眼right_eye、鼻尖nose_tip这三种脸部特征。
ImageDraw.polygon
构建一个ImageDraw对象: polygon() 方法用于绘制多边形:第一个参数是多边形的几 个顶点位置组成的list,第二个参数fill是填充该多边形的颜 色。 line() 方法是用来画多个点之间构成的线段,第一个参数是 点位置组成的list,第二个参数fill是线段的颜色,第三个参 数width是线段的宽度。
通过使用face_landmarks来定位到人脸的特征面貌之后,给其使用Image.polygon绘制多边形,接下来详细的代码解释啦
具体代码
import face_recognition from PIL import Image, ImageDraw def demoFunc2(pic_path):# 将图片加载为numpy数组 image = face_recognition.load_image_file(pic_path) face_landmarks_list = face_recognition.face_landmarks(image) print(f"I found {len(face_landmarks_list)} face in this photograph.")) pil_image = Image.fromarray(image) # 遍历人脸, 绘制 for face_landmarks in face_landmarks_list: demo = ImageDraw.Draw(pil_image, 'RGBA') demo.polygon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128)) demo.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128)) # demo.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=2) # demo.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=2) demo.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128)) # demo.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128)) demo.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128)) # demo.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=2) # demo.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=2) demo.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30)) demo.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30))# pil_image.save("1_.jpg")#可以使用save方法进行保存 pil_image.show() demoFunc2("6.png")

我发现使用line方法进行描边后有点奇怪,所以我在这里进行了删减,你们也可以自行尝试,颜色也可以按照RGBA自行尝试更改,我这里继续使用彭于晏给大家展示哈哈
结果展示
【人脸识别|【人脸识别系列】| 实现自动化妆】
同时我也将其打包到我的github里了,如果大家想玩的话也可以直接去下载来玩。

    推荐阅读