邀请马斯克加入我的Zoom会议,一键实时换脸再也不怕安全漏洞!

简介: 最近,为应对Zoom的隐私泄漏问题,国外一名开发者在GitHub开源了自己的替身项目代码,让你在Zoom视频通话应用中使用替身变成可能,项目使用了NIPS2019一篇论文中的模型作为核心组件,实现了视频流中的动态图像迁移,让你实时切换替身。

微信图片_20220108175251.png


此前Zoom的安全漏洞引发了全球关注,15000个视频被公开到网上,造成视频中的个人信息泄漏,虽然Zoom采取了很多安全举措来修补漏洞,但由于产品本身的设计缺陷,修复所有问题远非一日之功。在此期间,如何通过自己的设置,来保障信息安全呢?


近日,一位开发者在GitHub开源了自己的解决方案avatarify,为Zoom、Skype这类视频通话应用添加自己的替身。


让马斯克加入你的Zoom会议


哇哦,马斯克加入了我们的群聊!

QQ图片20220108175418.png

查看原视频链接

7

当然这并不是真的马斯克。你可能会问这跟DeepFake有啥区别?我们知道DeepFake的训练和推理速度是非常慢的,满足不了视频通话的实时性要求,这个项目大大缩短了时间延迟,而且不需要大量的替身图片信息,一张就够!



项目核心组件:一阶运动模型


avatarify项目站在了巨人的肩膀上,项目中使用的一个核心模型first order model来源于下面这篇NIPS论文。


微信图片_20220108175254.png


这个模型可以根据驱动视频的运动,对源图像中的对象进行动画处理,以生成视频序列,而无需使用任何注释或有关特定对象的先验信息。


模型采用自监督的方法将外观和运动信息分离,使用了视频中对象的关键点及其局部仿射变换进行特征表示。生成器网络对目标运动期间出现的遮挡进行建模,并将源图像中提取的外观与从驱动视频获得的运动进行组合。


微信图片_20220108175256.png


可以看出模型由两个主要模块组成:运动估计模块和图像生成模块


运动估计模块的目的是预测密集的运动场。我们假设存在一个抽象的参考框架,然后独立地估计了两种转换:从参考到源以及从参考到驱动,这样的设计使模型能够独立处理源帧和驱动帧。


网络异常,图片无法展示
|


我们可以使用这个模型轻松地将特朗普的讲话迁移到权游中的人物,也可以让形态相似的静态马奔跑起来,还能一键完成模特的换装,对需要制作大量换装图片的美工来说简直是神器!


来,让Lecun模仿下Hinton。


微信图片_20220108175300.gif


对比下FaceSwap的效果,高下立判。


网络异常,图片无法展示
|


还有一个比较重要的操作就是人脸对齐,作者使用了另一个开源项目face_alignment来提取人脸关键点。


微信图片_20220108175304.gif


如何在Zoom会议中使用替身


有了这两个核心组件,我们就可以来实现视频中的替身制作了,来看下完成替身生成的几个关键操作。


加载训练好的模型


def load_checkpoints(config_path, checkpoint_path, device='cuda'):
    with open(config_path) as f:
        config = yaml.load(f)
    generator = OcclusionAwareGenerator(**config['model_params']['generator_params'],
                                        **config['model_params']['common_params'])
    generator.to(device)
    kp_detector = KPDetector(**config['model_params']['kp_detector_params'],
                             **config['model_params']['common_params'])
    kp_detector.to(device)
    checkpoint = torch.load(checkpoint_path, map_location=device)
    generator.load_state_dict(checkpoint['generator'])
    kp_detector.load_state_dict(checkpoint['kp_detector'])
    generator = DataParallelWithCallback(generator)
    kp_detector = DataParallelWithCallback(kp_detector)
    generator.eval()
    kp_detector.eval()
    return generator, kp_detector


关键点的归一化


def normalize_alignment_kp(kp):
    kp = kp - kp.mean(axis=0, keepdims=True)
    area = ConvexHull(kp[:, :2]).volume
    area = np.sqrt(area)
    kp[:, :2] = kp[:, :2] / area
    return kp


图片的剪裁和扩展


def crop(img, p=0.7):
    h, w = img.shape[:2]
    x = int(min(w, h) * p)
    l = (w - x) // 2
    r = w - l
    u = (h - x) // 2
    d = h - u
    return img[u:d, l:r], (l,r,u,d)
def pad_img(img, orig):
    h, w = orig.shape[:2]
    pad = int(256 * (w / h) - 256)
    out = np.pad(img, [[0,0], [pad//2, pad//2], [0,0]], 'constant')
    out = cv2.resize(out, (w, h))
    return out


预测图片生成


def predict(driving_frame, source_image, relative, adapt_movement_scale, fa, device='cuda'):
    global start_frame
    global start_frame_kp
    global kp_driving_initial
    with torch.no_grad():
        source = torch.tensor(source_image[np.newaxis].astype(np.float32)).permute(0, 3, 1, 2).to(device)
        driving = torch.tensor(driving_frame[np.newaxis].astype(np.float32)).permute(0, 3, 1, 2).to(device)
        kp_source = kp_detector(source)
        if kp_driving_initial is None:
            kp_driving_initial = kp_detector(driving)
            start_frame = driving_frame.copy()
            start_frame_kp = get_frame_kp(fa, driving_frame)
        kp_driving = kp_detector(driving)
        kp_norm = normalize_kp(kp_source=kp_source, kp_driving=kp_driving,
                            kp_driving_initial=kp_driving_initial, use_relative_movement=relative,
                            use_relative_jacobian=relative, adapt_movement_scale=adapt_movement_scale)
        out = generator(source, kp_source=kp_source, kp_driving=kp_norm)
        out = np.transpose(out['prediction'].data.cpu().numpy(), [0, 2, 3, 1])[0]
        out = out[..., ::-1]
        out = (np.clip(out, 0, 1) * 255).astype(np.uint8)
        return out


完成了这几步,在Zoom中设置摄像头使用avatarify,就可以将生成的图像通过OpenCV实时推送到视频流了。建议使用头像缩放功能,使你的脸在预览窗口中的比例和位置尽可能接近替身头像。对齐后,点击 X 来使用这个帧作为参考帧,驱动视频的生成。


微信图片_20220108175308.png


将你想用的替身图片(通过快捷键1-9还可以实时更换)放在avatars文件夹下就能实现该功能了,赶紧去给你的Zoom添加个替身吧,再也不用担心隐私泄漏了!


参考链接:

http://papers.nips.cc/paper/8935-first-order-motion-model-for-image-animation

https://aliaksandrsiarohin.github.io/first-order-model-website/

https://github.com/alievk/avatarify

相关文章
|
3月前
|
机器学习/深度学习 人工智能
AI训AI惨遭投毒9次大崩溃,牛津剑桥等惊天发现登Nature封面!
【8月更文挑战第11天】牛津与剑桥大学研究揭示,AI模型若反复在自身生成的数据上训练,将遭遇“模型崩溃”,即性能严重退化,甚至遗忘真实世界的数据分布。此现象在《自然》杂志刊出,警示AI进化之路暗藏风险。实验显示,随着训练代际增加,模型倾向于生成更简单内容,丢失稀有信息,最终可能导致对现实世界的误解加深。此发现对AI领域的持续发展及模型可靠性提出了新的挑战。
195 60
|
4月前
|
人工智能 编解码
|
6月前
|
机器学习/深度学习 编解码 算法
微软诈骗届王牌框架,真到可怕!一张照片+音频即可生成数字人
【5月更文挑战第8天】微软发布VASA-1框架,仅需照片和音频即可实时创建逼真数字人,引发诈骗关注。该技术利用深度学习,将静态照片转为动态面部特征,根据音频生成唇动、表情和头部动作,实现高真实感、实时、多模态输入的数字人生成。尽管有广泛应用前景,如虚拟主播、游戏角色等,但其高真实度也可能加剧诈骗风险,需平衡技术创新与安全防范。[[论文链接](https://arxiv.org/pdf/2404.10667.pdf)]
195 0
|
机器学习/深度学习 人工智能 自然语言处理
阳过→阳康,数据里的时代侧影;谷歌慌了!看各公司如何应对ChatGPT;两份优质AI年报;本周技术高光时刻 | ShowMeAI每周通讯 #003-12.24
这是ShowMeAI每周通讯的第3期。本期内容关键词:新冠、ChatGPT、2022 AI 报告、腾讯·绝悟、阿里·AliceMind、小红书·全站智投、OpenAI·Point-E、Google·CALM、Wayve·MILE、AI2·MemPrompt、Stanford x MosaicML·PubMed GPT、腾讯全员大会、特斯拉裁员、图森未来裁员、AI 应用与工具大全。
544 0
阳过→阳康,数据里的时代侧影;谷歌慌了!看各公司如何应对ChatGPT;两份优质AI年报;本周技术高光时刻 | ShowMeAI每周通讯 #003-12.24
|
机器学习/深度学习 人工智能 算法
腾讯AI单挑王者荣耀职业玩家,“绝悟”技术细节首次披露!
腾讯王者荣耀AI“绝悟”的论文终于发表了!“绝悟”制霸王者荣耀世界冠军杯、在2100多场和顶级业余玩家体验测试中胜率达到99.8%。腾讯AI Lab提出一种深度强化学习框架,并探索了一些算法层面的创新,对MOBA 1v1 游戏这样的多智能体竞争环境进行了大规模的高效探索。
1047 0
腾讯AI单挑王者荣耀职业玩家,“绝悟”技术细节首次披露!
|
机器学习/深度学习 人工智能
推特发布首个反Deepfake策略草案:换脸一时爽?推文火葬场
昨天,推特正式发布了首个反 Deepfake 策略草案。该公司表示,如果 Deepfake 内容威胁到某人的人身安全或可能造成严重伤害,他们会将该内容从推特上删除。目前,推特还在为这项草案征集公众意见。
254 0
推特发布首个反Deepfake策略草案:换脸一时爽?推文火葬场
|
机器学习/深度学习 人工智能 算法
全球首例!移动材料上实现动态对抗,这件T恤让你在AI眼皮下隐身
全球首例!移动材料上实现动态对抗,这件T恤让你在AI眼皮下隐身
223 0
金山游戏研发改制新进展:计划本周发出正式公告
1月17日上午消息,金山游戏研发体系改制已经走到最后一步,按预先的计划,改制的详细方案将于本周正式对外进行公告。此前有消息称,金山游戏此次改制拟效法巨人网络的相关模式,将启用股份明确的子公司架构。 酝酿并筹备多时之后,金山游戏研发体系改制一事,即将迎来实质性的进展。
851 0
下一篇
无影云桌面