MoviePy示例脚本:追踪人脸并模糊人脸

在MoviePy示例脚本中,追踪人脸与模糊人脸/给人脸打马赛克,官方展示的效果视频地址:https://youtube.com/FWCKYTRCrBI,由于在油管上,需要看客们科学上网,所以在此只提供来自ucsheep的gif动图为示:

MoviePy示例脚本:追踪人脸并模糊人脸_第1张图片

追踪与模糊人脸

实现逻辑:

(因为是示例展示,只是为了使用manual_tracking方法,所以是人工方式的实现追踪效果;autoTrack自动追踪,及AI人脸识别后,再模糊headblur,由各位自行研究。)

首先,为了实现人脸追踪与模糊的目的,我们需要对面部进行追踪。

例如,我们可以获得两个方法fx以及fy,这样的话(fx(t),fy(t))就表示了在时间t时刻,头部中心的位置。这个步骤可以很容易使用 manual_tracking 实现。

然后,接下来我们则需要对头部中心区域附近的视频进行模糊headblur。

实现代码如下:

from moviepy import *
from moviepy.video.tools.interpolators import Trajectory
from moviepy.video.tools.tracking import manual_tracking


# LOAD THE CLIP (subclip 6'51 - 7'01 of a chaplin movie)
# 已经剪辑好的素材视频,不再subclip
clip = VideoFileClip("media/chaplin.mp4")

# MANUAL TRACKING OF THE HEAD
# 手动跟踪标记头部
# the next line is for the manual tracking and its saving
# to a file, it must be commented once the tracking has been done
# (after the first run of the script for instance).
# Note that we save the list (ti, xi, yi), not the functions fx and fy

# 下面的代码,手动跟踪,然后把结果保存进文件trajectory.txt,应该在一次运行之后就完成跟踪标记
# 注意:我们保存的格式是一个(ti,xi,yi)list,不是函数fx和fy
# manual_tracking运行后,会弹出视频窗口,不断点击视频中卓别林的人脸位置,直至结束。

# manual_tracking(clip, fps=6, savefile="trajectory.txt")


# IF THE MANUAL TRACKING HAS BEEN PREVIOUSLY DONE,
# LOAD THE TRACKING DATA AND CONVERT IT TO TRAJECTORY INTERPOLATORS fx(t), fy(t)
# 加载追踪的数据,并转换到Trajectory插值fx(t), fy(t)
traj = Trajectory.from_file("trajectory.txt")


# BLUR CHAPLIN'S HEAD IN THE CLIP PASSING xi(t) and yi(t) FUNCTIONS
# 在视频剪辑中的时点位置,模糊卓别林的头部
clip_blurred = clip.fx(vfx.headblur, traj.xi, traj.yi, 25)


# -------------------- 这部分效果代码可以不用 --------------------

# Generate the text, put in on a grey background

txt = TextClip(
    "Hey you! \n You're blurry!",
    color="grey70",
    size=clip.size,
    bg_color="grey20",
    font="Century-Schoolbook-Italic",
    font_size=40,
)

# Concatenate the Chaplin clip with the text clip, add audio

final = concatenate_videoclips([clip_blurred, txt.with_duration(3)]).with_audio(clip.audio)

# --------------------------------------------------------------

# We write the result to a file. Here we raise the bitrate so that
# the final video is not too ugly.
# 将剪辑导出为mp4文件
final.write_videofile("blurred_chaplin.mp4")

注意:

1)示例用到的视频资料——chaplin.mp4,可在官方github上找到,但是已经剪辑好了,不需要再剪辑了。如果要找全时长的影片资料,自行网搜:卓别林《淘金记》。

2)本文示例代码是更新后的,亲测有效,使用了Trajectory对象,生成(to_file)/加载(from_file)视频中人脸的位置数据,而不是官方文档中的使用to_fxfy方法。

3)实际上,添加字幕的那部分代码可有可无,不影响学习使用manual_tracking及headblur。

你可能感兴趣的:(MoviePy,人脸识别,视频处理,python)