你动、蒙娜丽莎跟着一起动,OpenCV这么用,表情口型造假更难防了
梅宁航 发自 凹非寺 量子位 报道 | 公众号 QbitAI
有没有想过让蒙娜丽莎跟着你的表情动,来一番亲切的交流?
Aliaksandr的一阶运动模型(First Order Motion Model)可以实现,但是实现过程非常复杂且繁琐。
一阶运动模型功能强大,可以在未经预训练的数据集上对图像和视频进行特效生成,但代价是安装配置比较繁琐。
能不能简单一点,再简单一点?
印度一位程序员阿南德·帕瓦拉(Anand Pawara)设计了基于OpenCV实现的实时动画特效。
毕竟OpenCV是成名已久的跨平台视觉库,是事实上的计算机视觉领域的标准库。
项目中涉及的人脸识别、动作识别和运动跟踪,均在OpenCV库中原生支持。
几天前,阿南德在GitHub上开源了完整代码,并给出实现具体过程。
走过路过,不要错过。
安装过程
1、安装依赖模块
安装依赖模块:
pip install -r requirements.txt
安装pytorch 1.0.0 :
pip install torch===1.0.0 torchvision===0.2.1 -f https://download.pytorch.org/whl/cu100/torch_stable.html
2、下载配置文件(如果不能下载,文件链接在文末)
gdown —id 1wCzJP1XJNB04vEORZvPjNz6drkXm5AUK
3、运行程序
运行文件 :
python image_animation.py -i path_to_input_file -c path_to_checkpoint
针对摄像头的实时特效生成 :
python .image_animation.py -i .InputsMonalisa.png -c .checkpointsvox-cpk.pth.tar Run application from video file : python image_animation.py -i path_to_input_file -c path_to_checkpoint -v path_to_video_file
针对既有视频的特效生成 :
python .image_animation.py -i .InputsMonalisa.png -c .checkpointsvox-cpk.pth.tar -v .video_inputtest1.mp4
如果你想上手试试,只需要调整相关配置文件即可。
模型分为两种使用模式,一种是较为常规的导入视频常规方法,另外一种就是实时生成视频特效。
但是,请注意,一定要使用pytorch 1.0.0版本,因为更高的版本在后端依赖的一阶模型上存在问题。
按照作者的后续计划,会推出客户端程序,并且会增加假声(deepfake voice)功能。
立足OpenCV的优化
阿南德所做的工作是简化现有的一阶运动模型(First Order Motion Model),使用OpenCV对视频进行特效生成。
项目的后端支持由OpenCV库完成,避免使用复杂的模型,降低使用门槛。
按照作者观点,使用这个模型只需要对一类数据集进行训练后,便可应用到对其全部事物上去,即具有较好的泛化能力。
不同于原一阶模型的多个数据集测试效果,现在阿南德实时动态特效模型还只在人脸数据集上进行测试,后续后持续增加其他数据集。
这个模型的特点是易用,配置非常简单,基本可以开箱即用,即使是训练自己的数据集也会比较简单。
因为立足于对现有资源进行优化配置,操作简易,功能强大。
当然,简单也会带来问题,比如现在数据集较为单一,针对的主要是人脸数据集。
此外,对人脸的轮廓识别效果还不那么令人满意,需要加以改造。
作者简介
项目作者阿南德·帕瓦拉(Anand Pawara)是印度AvenDATA公司的一名深度学习工程师,现居孟买。
繁琐的工作自动化,大幅度降低上手的难度。
完整实现过程连接在下面,如果有兴趣,欢迎自己去试试哟~
参考链接: https://github.com/anandpawara/Real_Time_Image_Animation https://m.weibo.cn/1402400261/4508119667605445
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP标准库(PHP SPL)详解
- php成功操作redis cluster集群的实例教程
- 在pytorch中动态调整优化器的学习率方式
- 可视化pytorch 模型中不同BN层的running mean曲线实例
- python如何删除文件、目录
- pytorch实现查看当前学习率
- python3.x中安装web.py步骤方法
- pytorch 网络参数 weight bias 初始化详解
- PHP中单例模式的使用场景与使用方法讲解
- pytorch查看模型weight与grad方式
- php+ajax 文件上传代码实例
- PHP将整数数字转换为罗马数字实例分享
- PHP如何通过表单直接提交大文件详解
- PHP基于openssl实现的非对称加密操作示例
- python图片验证码识别最新模块muggle_ocr的示例代码