作家
登录

小200行Python代码做了一个换脸程序

作者: 来源: 2018-03-22 17:06:36 阅读 我要评论

特点提取器(predictor)须要一个粗拙的界线框作为算法输入,由一个传统的能返回一个矩形列表的人脸检测器(detector)供给,其每个矩形列表在图像中对应一个脸。

2.用 Procrustes 分析调剂脸部

如今我们已经有了两个标记矩阵,每行有一组坐标对应一个特定的面部特点(如第30行的坐标对应于鼻头)。我们如今要解决若何扭转、翻译和缩放第一个向量,使它们尽可能适配第二个向量的点。一个设法主意是可以用雷同的变换在第一个图像上覆盖第二个图像。

将这个问题数学化,寻找T,s 和 R,使得下面这个表达式:

事实证实,这类问题可以用“惯例 Procrustes 分析法”解决:

  1. def transformation_from_points(points1, points2):  
  2.     points1 = points1.astype(numpy.float64)  
  3.     points2 = points2.astype(numpy.float64)   
  4.  
  5.     c1 = numpy.mean(points1, axis=0)  
  6.     c2 = numpy.mean(points2, axis=0)  
  7.     points1 -= c1  
  8.     points2 -= c2   
  9.  
  10.     s1 = numpy.std(points1)  
  11.     s2 = numpy.std(points2)  
  12.     points1 /= s1  
  13.     points2 /= s2   
  14.  
  15.     U, S, Vt = numpy.linalg.svd(points1.T * points2)  
  16.     R = (U * Vt).T   
  17.  
  18.     return numpy.vstack([numpy.hstack(((s2 / s1) * R,  
  19.                                        c2.T - (s2 / s1) * R * c1.T)),  
  20.                          numpy.matrix([0., 0., 1.])])  

代码实现了这几步:

用一个遮罩来选择图像2和图像1的哪些部分应当是最终显示的图像:

如许一个遮罩同时为这两个图像生成,应用与步调2中雷同的转换,可以使图像2的┞汾罩转化为图像1的坐标空间。

  • 1.将输入矩阵转换为浮点数。这是后续操作的基本。

    2.每一个点集减去它的矩心。一旦为点集找到了一个最佳的缩放和扭转办法,这两个矩心 c1 和 c2 就可以用来找到完全的解决筹划。

    3.同样,每一个点集除以它的标准误差。这会清除组件缩放误差的问题。


      推荐阅读

      蜜月期还没过完 苹果就要和三星分手了

    全平易近充电节 | 3月26日~30日 2000位IT行业拭魅战专家邀请你一路充电进修! 作为手机阵营的两大年夜巨擘,苹不雅和三星因为一部iPhone X走在了一路,两边都大年夜中获得了本身想要的器械>>>详细阅读


    本文标题:小200行Python代码做了一个换脸程序

    地址:http://www.17bianji.com/lsqh/40825.html

  • 关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)