全平易近充电节 | 3月26日~30日 2000位IT行业拭魅战专家邀请你一路充电进修!
简介
get_face_mask()的定义是为一张图像和一个标记矩阵生成一个遮罩,它画出了两个白色的凸多边形:一个是眼睛四周的区域,一个是鼻子和嘴部四周的区域。之后它由11个像素向遮罩的边沿外部成仙扩大,可以赞助隐蔽任何不持续的区域。
在这篇文┞仿中我将介绍若何写一个简短(200行)的 Python 脚本,来主动地将一幅图片的脸调换为另一幅图片的脸。
这个过程分四步:
-
结不雅最小,个中R是个2×2正交矩阵,s是标量,T是二维向量,pi和qi是上面标记矩阵的行。
检测脸部标记。
-
扭转、缩放、平移和第二张图片,以合营第一步。
-
调剂第二张图片的色彩均衡,以适配第一张图片。
-
把第二张图像的特点混淆在第一张图像中。
1.应用 dlib 提取面部标记
该脚本应用 dlib 的 Python 绑定来提取面部标记:
Dlib 实现了 Vahid Kazemi 和 Josephine Sullivan 的《应用回归树一毫秒脸部对准》论文中的算法。算法本身异常复杂,但dlib接口应用起来异常简单:
- PREDICTOR_PATH = "/home/matt/dlib-18.16/shape_predictor_68_face_landmarks.dat"
- detector = dlib.get_frontal_face_detector()
- predictor = dlib.shape_predictor(PREDICTOR_PATH)
- def get_landmarks(im):
- rects = detector(im, 1)
- if len(rects) > 1:
- raise TooManyFaces
- if len(rects) == 0:
- raise NoFaces
- return numpy.matrix([[p.x, p.y] for p in predictor(im, rects[0]).parts()])
get_landmarks()函数将一个图像转化成numpy数组,并返回一个68×2元素矩阵,输入图像的每个特点点对应每行的一个x,y坐标。
推荐阅读
全平易近充电节 | 3月26日~30日 2000位IT行业拭魅战专家邀请你一路充电进修! 作为手机阵营的两大年夜巨擘,苹不雅和三星因为一部iPhone X走在了一路,两边都大年夜中获得了本身想要的器械>>>详细阅读
地址:http://www.17bianji.com/lsqh/40825.html
1/2 1