AI,如何让照片中的表情动起来

1、我们看到的视频的原理

     视频是由一系列连续的静态图像(帧)以一定的速度播放而形成的动态影像。每秒播放的帧数越高,视频的流畅度就越高。
设置视频的原理基于人眼视觉暂留现象,即人眼在观看一个图像后,会在短时间内保留该图像的影像,使得后续的图像连续播放时,人眼会认为这些图像是连贯的动态影像。

     参考视频的原理,我们可以由此得到启发

2、我们让照片动起来的原理

     照片动起来的原理, 照片动起来的基本原理是通过连续播放一系列静态图片来创建动画效果。 每张图片在短时间内连续显示,使人眼产生错觉,认为照片在动态变化。首先要知道图片应该怎样动起来,所以我们需要一个驱动视频,这个驱动视频主要是人脸的动作和表情,这个视频主要提供动作特征。然后特征提取模型根据视频的每一帧画面的提取具体的特征值。其次,通过上一步提取的表情特征,通过生成模型将我们需要动起来的图片进行表情生成一张张的图片。最后,我们将生成的一张张图片按照生成顺序生成视频就好了。

3、整体思路

  1. 首先将驱动视频提取视频帧数,将每一帧的图片提取出来,并将视频的音频文件进行提取 ,主要是通过OpenCV进行实现的
  2. 通过检测模型,拟对驱动视频的每一帧图片进行检测,主要是人脸的68个特征点,提取特征向量
  3. 通过生成模型,依据第二步检测出来的特征点,将静态图片进行模拟生成,存储为一帧图片
  4. 通过ffmpeg将图片和音频进行合并生成视频

技术选型,我们可以采用多种模型进行实现,本次我们机器学习采用DJL(Deep java Library)开发包或者Pytorch的CNN进行实现,DJL是一款java语言的深度学习模型。

4、图片人脸提取模型

     人脸特征提取模型是一种用于从人脸图像中提取有意义的特征的算法或模型。这些特征可以包括人脸的形状、轮廓、眼睛、鼻子、嘴巴等部位的位置和属性,一共需要提取68个特征信息。
     目前,人脸特征提取模型主要基于深度学习技术,特别是卷积神经网络(Convolutional Neural Networks,CNN)。以下是一些常用的人脸特征提取模型:
VGG-Face:基于VGGNet架构的人脸特征提取模型,通过在大规模人脸数据集上进行训练,可以提取出具有较好判别能力的人脸特征。
FaceNet:由Google开发的人脸特征提取模型,通过将人脸图像映射到一个高维空间中,使得同一个人的人脸特征在空间中距离较近,不同人的特征距离较远,从而实现人脸识别任务。
DeepFace:Facebook提出的人脸特征提取模型,通过将人脸图像输入到多层卷积神经网络中,提取出具有较好判别能力的人脸特征。
ArcFace:一种用于人脸识别的人脸特征提取模型,通过引入角度余弦间隔(ArcMargin)来增强特征的判别能力,提高了人脸识别的准确性。
这些模型都是通过在大规模人脸数据集上进行训练,学习到了人脸图像中的有用特征,可以用于人脸识别、人脸验证、人脸表情识别等应用。值得注意的是,这些模型通常需要较大的计算资源和训练时间来进行训练。

5、图片生成模型

     图片生成模型是指可以生成逼真图片的计算机模型。这些模型通常基于深度学习技术,如生成对抗网络(GANs)或变分自编码器(VAEs)。这些模型通过学习大量真实图片的特征和分布,可以生成与之类似的新图片。

生成对抗网络(GANs) 是一种常用的图片生成模型。它由两个部分组成:生成器和判别器。生成器尝试生成逼真的图片,而判别器则试图区分生成器生成的图片和真实图片。通过反复训练生成器和判别器,GANs可以不断提高生成器的生成能力,使其生成的图片更加逼真。
变分自编码器(VAEs) 也是一种常用的图片生成模型。它通过学习图片的潜在变量分布来生成新的图片。VAEs可以学习到图片的低维表示,然后通过从该低维空间中采样,生成新的图片。

     这些图片生成模型已经在许多领域得到广泛应用,如图像合成、图像增强、图像修复等。它们不仅可以生成逼真的图片,还可以用于数据增强、样本生成等任务。

6、视频合成

这一步比较简单,其实就是使用ffmpeg提供的指令就好了
用FFmpeg可以将多张图片合成为视频。以下是使用FFmpeg命令行工具的示例:

ffmpeg -framerate 24 -i image%03d.jpg -c:v libx264 -r 24 output.mp4

解释:
-framerate 24 指定帧率为24帧每秒,可以根据需要进行调整。
-i image%03d.jpg 指定输入图片的文件名格式,%03d 表示三位数的连续数字,例如image001.jpg,image002.jpg等。
-c:v libx264 指定使用libx264编码器进行视频编码,可以根据需要选择其他编码器。
-r 24 指定输出视频的帧率为24帧每秒,与输入帧率保持一致。
output.mp4 指定输出视频的文件名和格式,可以根据需要进行更改。
运行上述命令后,FFmpeg将按照指定的帧率将输入的图片序列合成为一个视频文件。

7、商业应用场景

让图片动起来的应用场景有很多,以下是一些常见的应用场景:
动画制作:通过将静态图片序列快速播放,可以创建动画效果。这在电影、电视、游戏等媒体行业中广泛应用。
广告宣传:通过让图片动起来,可以吸引更多的注意力和观众参与度,提升广告的效果。
社交媒体:在社交媒体平台上,通过将图片制作成动态图或短视频,可以更好地吸引用户的注意力和互动。
网站设计:在网站设计中,通过使用动态图片可以增加页面的视觉效果和交互性,提升用户体验。
教育和培训:通过将图片制作成动画,可以更生动地展示教育内容,提高学习效果和参与度。
用户界面设计:在应用程序和软件界面中,使用动态图片可以增加界面的活力和吸引力,提升用户体验。
虚拟现实(VR)和增强现实(AR):在虚拟现实和增强现实应用中,通过将静态图片转化为动态内容,可以增加沉浸感和交互性。
总之,让图片动起来可以为各种应用场景增添更多的视觉效果和交互性,从而提升用户体验和吸引力。

8、回顾分析

     通过一路的分析,我们知道如何将一张图片动起来,首先我们需要一个驱动视频作为让静态图片动起来动作基础,然后我们需要一张需要动起来的图片,我们通过两个模型,一个人脸特征检测模型,一个人脸生成模型,一个负责从驱动视频中提取人脸动作特征,一个负责将这些动作特征结合指定的图片生成对应动作的新图片,然后在通过ffmpeg将生成的图片合成视频。

     从这个过程中,我们虽然开始面临的是一个比较复杂,且无从下手的任务,但是我们先学习了对应视频的原理,然后根据原理的指导我们将这个比较复杂的任务进行分解,分解之后都是可以实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146129.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云 Cloud Studio 实战训练营结营活动获奖公示

点击链接了解详情 “腾讯云 Cloud Studio 实战训练营” 是由腾讯云联合 CSDN 推出的系列开发者技术实践活动,通过技术分享直播、动手实验项目、优秀代码评选、有奖征文活动等,让广大开发者沉浸式体验腾讯云开发者工具 Cloud Studio 的同时,实…

云畅科技TMS解决方案助力华菱线缆实现智能货运管理

9月26日下午,湖南华菱线缆股份有限公司TMS物流系统上线启动会成功举办,由云畅科技倾力打造的华菱线缆TMS物流系统正式上线运行,标志着湖南华菱线缆股份有限公司在智能化物流货运管理领域的一次重大突破。 湖南华菱线缆股份有限公司董事兼总经…

【设计模式】六、建造者模式

文章目录 需求介绍角色应用实例建造者模式在 JDK 的应用和源码分析java.lang.StringBuilder 中的建造者模式 建造者模式的注意事项和细节 需求 需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅&…

【C语言次列车ing】No.1站---C语言入门

文章目录 前言一、什么是C语言二、第一个C语言程序三、数据类型四、变量、常量五、字符串转义字符注释 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C语言次列车i…

【笔试强训day02】倒置字符串 排序子序列

​👻内容专栏: 笔试强训集锦 🐨本文概括:C笔试强训day02。 🐼本文作者: 阿四啊 🐸发布时间:2023.10.1 二、day02 1.倒置字符串 题目描述: 将一句话的单词进行倒置&…

手动实现BERT

本文重点介绍了如何从零训练一个BERT模型的过程,包括整体上BERT模型架构、数据集如何做预处理、MASK替换策略、训练模型和保存、加载模型和测试等。 一.BERT架构   BERT设计初衷是作为一个通用的backbone,然后在下游接入各种任务,包括翻译…

《MySQL高级篇》十六、主从复制

文章目录 1、主从复制概述1.1 如何提升数据库并发能力1.2 主从复制的作用 2、主从复制的原理2.1 原理剖析2.2 复制的基本原则 3、一主一从架构搭建3.1 准备工作3.2 主机配置文件3.3 从机配置文件3.4 主机:建立账户并授权3.5 从机:配置需要复制的主机3.6 …

面试记录_

1&#xff1a;面试杉岩数据&#xff08;python开发&#xff09; 1.1.1 选择题 for(int i0;i<n;i){for(int j0;j<n;jji) } }O(n) * (O(0) O(n/1) O(n/2) O(n/3) ... O(n/n)) 在最坏情况下&#xff0c;内部循环的迭代次数为 n/1 n/2 n/3 ... n/n&#xff0c;这是…

笔试强训Day8

链接&#xff1a;求最小公倍数__牛客网 T1:求最小公倍数 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 数据范围&#xff1a;1≤a,b≤100000 #include<iostream> using namespace…

【算法|贪心算法系列No.2】leetcode2208. 将数组和减半的最少操作次数

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Unity把UGUI再World模式下显示到相机最前方

Unity把UGUI再World模式下显示到相机最前方 通过脚本修改Shader 再VR里有时候要把3D的UI显示到相机最前方&#xff0c;加个UI相机会坏事&#xff0c;可以通过修改unity_GUIZTestMode来解决。 测试用例 测试用例如下&#xff1a; 场景包含一个红色的盒子&#xff0c;一个UI…

MonkeyRunner自动化测试

一&#xff1a;简介 MonkeyRunner提供了一个API&#xff0c;使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner&#xff0c;您可以写出一个Python程序去安装一个Android应用程序或测试包&#xff0c;运行它&#xff0c;向它发送模拟击键&…

Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现)

我们知道dnsmap是一个工具&#xff0c;主要用于收集指定域名的子域名信息。它对于渗透测试人员在基础结构安全评估的信息收集和枚举阶段非常有用&#xff0c;可以帮助他们发现目标公司的IP网络地址段、域名等信息。 dnsmap的操作原理 dnsmap&#xff08;DNS Mapping&#xff…

Xmake v2.8.3 发布,改进 Wasm 并支持 Xmake 源码调试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…

学信息系统项目管理师第4版系列14_沟通管理

1. 与IT项目成功有关的最重要的四个因素 1.1. 主管层的支持 1.2. 用户参与 1.3. 有经验的项目经理 1.4. 清晰的业务目标 1.5. 依赖于项目经理和团队具有良好的沟通能力 2. 沟通的主旨 2.1. 互动双方建立彼此相互了解的关系 2.2. 相互回应 2.3. 期待能经由沟通的行为与…

软件过程的介绍

软件过程概述 软件的诞生和生命周期是一个过程&#xff0c;我们总体上称这个过程为软件过程。软件过程是为了开发出软件产品&#xff0c;或者是为了完成软件工程项目而需要完成的有关软件工程的活动&#xff0c;每一项活动又可以分为一系列的工程任务。任何一个软件开发组织&a…

ESP32官方MPU6050组件介绍

前言 &#xff08;1&#xff09;因为我需要使用MPU6050的组件&#xff0c;但是又需要在这条I2C总线上挂载多个设备&#xff0c;所以我本人打算自己对官方的MPU6050的组件进行微调。建立一个I2C总线&#xff0c;设备依赖于这个总线挂载。 &#xff08;2&#xff09;既然要做移植…

【AI视野·今日Robot 机器人论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 29 Sep 2023 Totally 38 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;NCF,基于Neural Contact Fields神经接触场的方法实现有效的外部接触估计和插入操作。 (from FAIR ) 操作插入处理结果&am…

凉鞋的 Godot 笔记 101. Hello Godot!

101. Hello Godot 学习任何一门技术&#xff0c;第一件事就是先完成 Hello World&#xff01;的输出 所以我们也来先完成 Godot 的 Hello World。 我们所使用的 Godot 版本是 4.x 版本。 安装的过程就不给大家展示了&#xff0c;笔者更推荐初学者用 Steam 版本的 Godot&…

第一次作业题解

第一次作业题解 P5717 【深基3.习8】三角形分类 思路 考的是if()的使用,还要给三条边判断大小 判断优先级&#xff1a; 三角形&#xff1f;直角、钝角、锐角等腰等边 判断按题给顺序来 代码 #include <stdio.h> int main() {int a 0, b 0, c 0, x 0, y 0, z 0…