JibJab喜欢Face Replacement

时间:2018-05-22 15:56:42

标签: opencv video face

我正在尝试使用面部检测和替换的样本,但我想像jibjab.com一样顺利地做一些事情。

当我考虑到这一点时,视频应该已经过预处理,并且必须标记面部坐标。

我使用OpenCv尝试使用给定图像自动替换检测到的面部。

while(cap.isOpened()):
  ret, frame = cap.read()
  if frame is None:
    break
  result_image = frame.copy()

  faces = faceCascade.detectMultiScale(frame, 1.1, 2, 0|cv2.CASCADE_SCALE_IMAGE, (30, 30))

  if len(faces) != 0:

    for f in faces:
      x, y, w, h = [ v for v in f ]
      #resize image to the face size in the video
      img = cv2.resize(replace_face, (w, h))
      cv2.rectangle(frame, (x,y), (x+w,y+h), (255,255,0), 5)
      sub_face = frame[y:y+h, x:x+w]
      result_image[y:y+sub_face.shape[0], x:x+sub_face.shape[1]] = img

但是图像替换并不像JibJab那样平滑,显然它是逐帧替换的。

我该怎么做呢?如果我需要手动处理每个视频以捕获面部坐标,然后用图像替换我应该使用哪些技术或工具?

1 个答案:

答案 0 :(得分:0)

我不会像你使用它那样使用基于haar的人脸检测器。您可以做的是使用dlib's face landmark detector来检测眼睛和嘴巴,然后找到在视频中将给定脸部转换为脸部的单应性。您可能还需要应用平滑滤镜,例如alpha beta filter,因此脸部不会显得紧张。