AI 对抗研究之「实时换脸」
AI 近几年发展很快啊,我们作为安全从业者当然也需要不断学习,未知攻,焉知防,所以本文就来带大家手把手的使用 AI 实时换脸,然后将换脸后的画面输出给 APP 摄像头。
背景介绍
随着显卡算力和 AI 技术的发展,现在很多直播技术已经用到了实时换脸技术了,甚至有些 AI 换脸技术已经可以突破一些 APP 的人脸识别接口了,这也是我们安全从业者需要关注的事情。
未知攻,焉知防,所以本文就来带大家手把手的使用 AI 实时换脸,然后将换脸后的画面输出给 APP 摄像头。
准备环境
本文是在 Windows 环境下演示的,所涉及到的系统和硬件细节如下:
- 操作系统:Windows 11
- 硬件:i5-13600K + RTX 3090 显卡 + CUDA 等环境
- 录屏与推流: OBS (Open Broadcaster Software)
- Andorid 环境:Magisk 面具 + LSPosed + VCAMSX 模块
台式机接入摄像头
Android 配置
如果你是笔记本电脑的话,默认是自带摄像头的,也可以跳过这一节,直接看下面的内容。如果你是台式机电脑或者要追求更高清摄像头的话,那么本小节内容可以供你参考一下。
本次电脑使用 Android 摄像头我们借助的是 DroidCam 软件,官网地址为:
软件使用很简单,默认对局域网开放出 4747 的端口:
Windows 配置
Windows 安装好 OBS (Open Broadcaster Software) ,直接下载对应的 OSB 插件即可,插件的官方项目下载地址为:
https://github.com/dev47apps/droidcam-obs-plugin/releases
使用效果演示
安装好 OSB 插件后,在 OBS 里面新建场景,手动添加 DroidCam OBS 来源,配置好 Android 的 DroidCam 的 IP 和端口采集到 Android 摄像头的画面:
当然为了追求稳定性这里也是可以直接使用 USB 来传输摄像头画面的:
DeepFaceLive 使用
软件下载
DeepFaceLive 是一个非常有吗的开源实时 AI 换脸的软件,官方的项目地址为:
https://github.com/iperov/DeepFaceLive
不过官方给的下载地址都是用的国外的云盘,我们国内下载还是很慢的,所以国光这里提供了国内的百度云盘的下载地址:
https://pan.baidu.com/s/1zyA4PwPAJbCVnCYOElVZrg?from=init&pwd=26vd
输入视频
DeepFaceLive 可以实时从文件里面导入视频换脸也支持导入摄像头,我们需要 OBS 采集 DroidCam 后开启虚拟摄像头:
然后 DeepFaceLive 里面的相机源选 OBS 的虚拟摄像头即可成功采集到手机摄像头的画面:
照片换脸
使用 DeepFaceLive 里面的 Face swap 模块可以选择对应的照片来简单的换脸,下面是使用马斯克的效果:
模型换脸
当然,照片的维度比较少,为了追求更逼真的换脸效果,我们这个时候就需要使用 DFM 模型数据来换脸了,下面是使用模型换脸的效果:
是不是看起来更像马斯克了呢?不过由于这个模型本身训练的时候没考虑到眼镜效果,所以戴眼镜的实际要差点意思。
视频替换摄像头
我们先使用录制好的视频来替换摄像头做一个概念验证,如果成功的话就可以考虑将换好的人脸实时替换到手机里面了。
Andorid 这里要替换摄像头只有虚拟摄像头的思路,我们使用下面的 Xposed 模块的开源项目来实现:
使用也很简单,Lposed 开启模块后,选择要 Hook 的 APP 然后重启手机即可生效,我们可以选择本地的视频来简单测试一下:
效果视频截图:
推流配置
既然 Windows 电脑这边可以实时换脸了,Android 这边也可以理论上使用虚拟摄像头替换真实的摄像头,所以接下来就得想办法让 Windows 换脸后的画面实时推给 Android 手机了。好在 VCAMSX 模块支持 RTMP 视频流,所以我们就需要手动搭建推流服务来传输画面给手机了。
RTMP 服务搭建
推流服务搭建很简单,使用 Docker 可以一条命令搭建完成:
docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp
使用默认的 1935 端口即可:
OBS 设置画布
因为 OBS 不支持多个场景使用不同的画布大小,所以我们需重新再开一个 OBS 来设置成手机的竖屏画布大小:
DFL 设置
DeepFaceLive 里面将视频流输出选择「合成后的画面」,这个时候会单独有一个窗口来显示合成后的人脸:
OBS 录制屏幕
接下来当然是使用 OBS 进行区域设置截取合成后的人脸画面内容:
OBS 直播推流
OBS 的直播里面设置自定义推流服务,地址就填写我们上面使用 Docker 搭建的 RTMP 服务即可:
接下来点击开始直播即可将画面推送给 RTMP 服务:
我们可以使用支持流的播放器测试看看,国光下面使用的 macOS 下的 IINA 进行 RTMP 播放测试:
可以成功播放:
直播替换摄像头
最后一步当然就是使用 VCAMSX 填写好我们的 RTMP 直播链接,然后测试一下:
接着最后打开我们 Hook 的 APP,下面以美颜相机为例,可以看到成功劫持了摄像头,而且顺便把马老师给美颜了一下:
完整的视频可以参考:https://www.alipan.com/s/4pUGmSZpY83
或者网站直链观看(可能有点慢):
支持一下
本文可能实际上也没有啥技术含量,但是写起来还是比较浪费时间的,在这个喧嚣浮躁的时代,个人博客越来越没有人看了,写博客感觉一直是用爱发电的状态。如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN费用等)
微信
|
支付宝
|
国光我还重写打赏页面 用以感谢 支持我的朋友,详情请看 打赏列表 | 国光
亲爱的读者们,在这个信息爆炸的时代,网络安全的重要性日益凸显,但同时,这个行业的挑战和误解也随之而来。作为一名网络安全的忠实守护者,我有幸在这个领域深耕多年,见证了无数技术的进步与变迁。
我始终坚信,知识的力量能够改变世界。因此,我用心制作了网络安全系列课程,不仅希望传授给大家宝贵的知识,更希望激发大家对网络安全的热爱和责任感。现在,我正准备推出第二期课程,并更新备受期待的内网安全教程,这是我对网络安全教育事业的承诺和热爱。
然而,正如大家所知,网络安全行业充满了不确定性和挑战。攻击门槛也在不断提高,即便是有 10 年经验的安全专家,有时也可能无法及时发现最新的漏洞,甚至在外人眼中,他们的努力和成就可能与实习生无异。但我相信,真正的价值和成就,是在于我们对知识的执着追求和对技术的不懈探索。
在完成这些课程后,我将暂时离开网络安全领域,转向其他行业。这不仅是一个艰难的决定,也是一个新的开始。但在此之前,我希望能够完成我的心愿,为大家带来更高质量的课程。
如果您对我的课程感兴趣,或者认同我对网络安全教育的执着和热情,请考虑购买我的课程,支持我的工作。您的支持不仅是对我努力的认可,更是对网络安全教育事业的一份贡献。
感谢每一位读者的陪伴和支持,让我们共同守护这个数字世界的安全!