python实现视频ai换脸源代码,ai换脸视频生成

  python实现视频ai换脸源代码,ai换脸视频生成

  留胡子的绿茶/L

  head.jpgface.jpgoutput.jpg

  #-* -编码:utf-8-* -

  #版权2015年年伊格迪丘伯爵

  #

  #特此许可任何人免费获取副本

  # of thioftwareandassociateddocumentationfiles(软件),以交易

  # inthesoftwarewarewithouttrestriction,包括没有限制权利

  #使用、复制、修改、合并、发布、分发、再许可和/或销售

  #软件的副本,以及操作人员的家庭软件

  #按照以下条件3360提供

  #

  #包含上述版权通知和许可通知

  #软件得所有副本或实体部分。

  #

  #软件按"原样"提供,不含任何形式的明示担保

  #或隐含,包括包括但不限于其他担保

  #适销性,适合特定用途完美的未来e和不侵权。在…里

  # noeventshallauthorsorpyrightholders被认为是版权所有者,

  #损害赔偿或其他责任,无论是在合同、侵权或

  #否则,产生于、出于与软件相关联

  # useorotherdealingsinthesoftware。

  thisithecodehindtheswitchedsblogpost:

  马修earl.github.io/2015/07/28街3358号交换- eds-with-python /

  见下面代码的解释。

  torunthecriptyou llneedtoinstalldlib(http://dlib . net)包括其

  sourceforge:

  3358来源forge.net/projects/DC lib/files/dlib/v 18.10/shape _ predictor _ 68 _ face _ landmarks。dat。bz2

  用" bunzip2 "解压缩,并将"预测器_路径"更改为" torefertothisfile "

  脚本是这样运行的:/faceswap.py

  如果成功,一个文件" output.jpg "将与面部特征一起产生

  来自`

  从""中替换了。

  数组

  sys.argv=[faceswap.py , head.jpg , face.jpg]

  # PREDICTOR _ PATH=/home/matt/DLI b-18.16/shape _ PREDICTOR _ 68 _ face _ landmarks。“日期”

  PREDICTOR_PATH= ./dat/shape _ predictor _ 68 _ face _ landmarks。“日期”

  比例因子=1

  FEATHER_AMOUNT=11

  FACE_POINTS=list(范围(17,68))

  MOUTH_POINTS=list(range(48,61))

  RIGHT _ BROW _ POINTS=list(range(17,22))

  LEFT_BROW_POINTS=list(range(22,27))

  RIGHT_EYE_POINTS=list(range(36,42))

  LEFT_EYE_POINTS=list(范围(42,48))

  NOSE_POINTS=list(range(27,35))

  JAW_POINTS=list(范围(0,17))

  #用于排列图像的点数。

  ALIGN_POINTS=(左眉点右眼点左眼点

  右眉分鼻分口分)

  #第二幅图像中要叠加在第一幅图像上的点。每个的凸包

  #元素将被覆盖。

  OVERLAY_POINTS=[

  左_眼_点右_眼_点左_眉_点右_眉_点,

  鼻子_分嘴巴_分,

  #色彩校正期间使用的模糊量,作为的一部分

  #瞳孔距离。

  颜色_正确_模糊_FRAC=0.6

  检测器=dlib。get _ frontier _ face _ detector()

  预测值=dlib。形状预测器(预测器路径)

  类太多面(异常):

  及格

  类别无表情(例外):

  及格

  def get_landmarks(im):

  如果透镜(矩形)1:

  如果len(rects)==0:

  定义注释_地标(即时消息,地标):

  对于idx,指向枚举(地标):

  pos=(点[0,0],点[0,1])

  cv2.putText(im,str(idx),pos,

  fontFace=cv2 .FONT_HERSHEY_SCRIPT_SIMPLEX,

  fontScale=0.4,

  color=(0,0,255))

  cv2.circle(im,pos,3,color=(0,255,255))

  def draw_convex_hull(im,points,color):

  points=cv2 .凸包(点数)

  cv2。fillclunpoly(im,points,color=color)

  def get_face_mask(即时消息,地标):

  对于覆盖点中的组:

  draw_convex_hull(im,

  地标[群],

  color=1)

  定义转换点(点1,点2):

  返回仿射变换[s * R T],使得:

  总和s*R*p1,i T - p2,i^2

  被最小化。

  #通过减去形心来解决古代希腊的强盗问题

  #标准差,然后使用德拉贡诺夫狙击步枪(Snayperskaya Vinyovka Dragunov的缩写)来计算旋转。看见

  #以下为更多详情:

  # https://en.wikipedia.org/wiki/Orthogonal_Procrustes_problem

  点1=点1。as类型(numpy。浮动64)

  点2=点2。as类型(numpy。浮动64)

  c1=numpy .均值(点1,轴=0)

  c2=numpy .均值(点2,轴=0)

  点1 -=c1

  点2 -=c2

  s1=numpy.std(点s1)

  s2=numpy.std(点s2)

  点s1 /=s1

  点s2 /=s2

  u,S,Vt=numpy.linalg.svd(points1 .T *点2)

  #我们寻求的稀有实际上是U * Vt给出的稀有的转置。这

  #是因为上面的公式假设矩阵在右边

  #(带行向量)其中我们的解决方案要求矩阵位于

  #左(带列向量)。

  R=(U * Vt).T

  c2 .T - (s2/s1) * R * c1 .t)),

  numpy.matrix([0 . 0. 1.])])

  def read_im_and_landmarks(fname):

  s=获取地标(即时消息)

  def warp_im(im,M,dshape):

  output_im=numpy.zeros(dshape,dtype=im.dtype)

  cv2.warpAffine(im,

  M[:2],

  (dshape[1],dshape[0]),

  dst=output_im,

  borderMode=cv2 .边框透明,

  flags=cv2 .WARP_INVERSE_MAP)

  定义正确_颜色(im1、im2、地标1):

  模糊_数量=颜色_正确_模糊_ FRAC *数量。利纳格。lmd由(

  numpy。均值(界标S1[左眼点],轴=0) -

  numpy.mean(地标1[右眼点],轴=0))

  模糊数量=int(模糊数量)

  如果模糊数量% 2==0:

  模糊数量=1

  #避免被零除的错误。

  m=transformation _ from _ POINTS(landmark s 1[ALIGN _ POINTS]),

  地标2[对齐点])

  mask=get_face_mask(im2,landmarks2)

  扭曲_遮罩=扭曲_im(遮罩,M,im1.shape)

  combined _ mask=numpy。max([get _ face _ mask(im1,landmarks1),warped_mask),

  轴=0)

  warped_im2=warp_im(im2,M,im1.shape)

  warped _ corrected _ im2=correct _ colors(im1,warped_im2,landmarks1)

  output_im=im1 * (1.0 -组合_掩码)扭曲_校正_im2 *组合_掩码

  cv2.imwrite(output.jpg ,output_im)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: