# 大一立项
**Repository Path**: sun_mingyang/ppt
## Basic Information
- **Project Name**: 大一立项
- **Description**: 大一大一大一大一大一
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-07-02
- **Last Updated**: 2023-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# **基于PPT和视频的演讲视频自动生成系统**
这个仓库包括将PPT转化为不带虚拟人头像的视频的代码,训练并生成视频的代码,以及一些前端网页代码
[](https://gitee.com/sun_mingyang/ppt/stargazers)

### 项目简介
#### 现在人们越来越多的交流转为线上进行。通常在线的课堂,或者大型演讲、大型会议等场景下,会制作一段视频来让参与者了解内容。这需要讲解人提前以播放PPT同时录制语音的方式制作视频,十分繁琐,耗时耗力。我们的项目希望能够设计一个平台,使用者在我们的平台上输入一个PPT文件和相关的备注,加上一段简短的、有讲解者头部的讲话视频。平台就会自动根据PPT的内容,生成视频讲解的文案,合成讲解的音频,通过训练讲话视频得到模型,接着结合音频输出讲解头像视频,最后输出一个有声有色,真实生动的PPT讲演视频。
在实现这些功能的时候,我们主要依赖的是RAD-NeRF算法,它提出了一种基于 NeRF 的高效框架,利用最近基于网格的 NeRF 的成功,能够实时合成有声肖像并实现更快的收敛。这种算法的关键是将固有的高维肖像表示分解为三个低维特征网格。具体来说,分解的音频空间编码模块使用 3D 空间网格和 2D 音频网格对动态头部进行建模。躯干由轻量级伪 3D 可变形模块中的另一个 2D 网格处理。这两个模块都在保证良好渲染质量的前提下注重效率。
## 安装使用过程
### PART1:
根据PPT备注生成纯讲解视频
```bash
git clone https://gitee.com/Jowib/apnvg.git
```
#### 在终端运行
```bash
# 打开存放下载文件的目录
cd apnvg
# 下载依赖
pip install -r requirements.txt
# 运行
python RunMainWindow.py
```
### PART2:
训练并合成人脸
在ubuntu22.04,Pytorch 1.12 和 CUDA 11.6的配置环境下测试
```
git clone https://github.com/ashawkey/RAD-NeRF.git
cd RAD-NeRF
```
### 安装依赖
```bash
# 对于Ubuntu系统,需要安装portaudio来让pyaudio运行
sudo apt install portaudio19-dev
pip install -r requirements.txt
```
### 构建扩展(可选)
默认情况下,我们使用 [`load`](https://pytorch.org/docs/stable/cpp_extension.html#torch.utils.cpp_extension.load) 在运行时构建扩展。然而这样做有时可能会出错,因此,我们还提供了 `setup.py`来构建每个扩展。
```bash
# 下载每个扩展
bash scripts/install_ext.sh
```
# 数据预处理
### 准备:
```bash
## 下载pytorch3d
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
## 准备人脸解析模型
wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_parsing/79999_iter.pth?raw=true -O data_utils/face_parsing/79999_iter.pth
## 准备 basel face 模型
# 1. 下载 `01_MorphableModel.mat` from https://faces.dmi.unibas.ch/bfm/main.php?nav=1-2&id=downloads 并且放到 `data_utils/face_tracking/3DMM/`
# 2. 从 AD-NeRF的仓库下载其他必要的文件:
wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/exp_info.npy?raw=true -O data_utils/face_tracking/3DMM/exp_info.npy
wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/keys_info.npy?raw=true -O data_utils/face_tracking/3DMM/keys_info.npy
wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/sub_mesh.obj?raw=true -O data_utils/face_tracking/3DMM/sub_mesh.obj
wget https://github.com/YudongGuo/AD-NeRF/blob/master/data_util/face_tracking/3DMM/topology_info.npy?raw=true -O data_utils/face_tracking/3DMM/topology_info.npy
# 3.运行convert_BFM.py
cd data_utils/face_tracking
python convert_BFM.py
cd ../..
## 准备 ASR 模型
# 如果你想使用DeepSpeech来替代AD-NeRF,你应该自行下载tensorflow 1.15
# 另外,我们也支持PyTorch中的Wav2Vec.
```
### 预处理定制训练视频
* 将训练视频放在 `data//.mp4`.
视频必须为 **25FPS,所有帧都包含说话人**。分辨率应约为 512x512,持续时间约为 1-5 分钟。
```bash
# 一个来自AD-NeRF的奥巴马示例视频
mkdir -p data/obama
wget https://github.com/YudongGuo/AD-NeRF/blob/master/dataset/vids/Obama.mp4?raw=true -O data/obama/obama.mp4
```
* 运行脚本(可能需要几个小时,具体取决于视频长度)
```bash
# 运行所有步骤
python data_utils/process.py data//.mp4
# 如果你想一步步运行
python data_utils/process.py data//.mp4 --task 1 # extract audio wave
```
* 完成所有步骤后的文件结构:
```bash
./data/
├──.mp4 # original video
├──ori_imgs # original images from video
│ ├──0.jpg
│ ├──0.lms # 2D landmarks
│ ├──...
├──gt_imgs # ground truth images (static background)
│ ├──0.jpg
│ ├──...
├──parsing # semantic segmentation
│ ├──0.png
│ ├──...
├──torso_imgs # inpainted torso images
│ ├──0.png
│ ├──...
├──aud.wav # original audio
├──aud_eo.npy # audio features (wav2vec)
├──aud.npy # audio features (deepspeech)
├──bc.jpg # default background
├──track_params.pt # raw head tracking results
├──transforms_train.json # head poses (train split)
├──transforms_val.json # head poses (test split)
```
# 用法
### 快速开始
我们[在这里](https://drive.google.com/drive/folders/14LfowIkNdjRAD-0ezJ3JENWwY9_ytcXR?usp=sharing) 提供一些预训练模型,用于对任意音频进行快速测试
*下载预训练模型。
例如我们下载 `obama_eo.pth` 到 `./pretrained/obama_eo.pth`
*下载姿势序列文件。
例如我们下载`obama.json` 到`./data/obama.json`
* 将音频准备为 `.wav`, 并提取音频特征。
```bash
# 如果模型是`_eo.pth`, 它会使用 wav2vec 提取特征
python nerf/asr.py --wav data/.wav --save_feats # save to data/_eo.npy
# 如果模型是`.pth`, 他会使用 deepspeech 提取特征
python data_utils/deepspeech_features/extract_ds_features.py --input data/.wav # save to data/.npy
```
您也可以下载预处理的音频功能。例如,我们下载`intro_eo.npy` 到 `./data/intro_eo.npy`.
* 运行估算:以 40FPS 运行估算(在 V100 上测量)大约需要 2GB GPU 内存。
```bash
# 保存视频到 trail_obama/results/*.mp4
# 如果模型是 `.pth`, 应该附加 `--asr_model deepspeech` 并且使用 `--aud intro.npy` 替代.
python test.py --pose data/obama.json --ckpt pretrained/obama_eo.pth --aud data/intro_eo.npy --workspace trial_obama/ -O --torso
# 提供一张背景图片()默认为白色
python test.py --pose data/obama.json --ckpt pretrained/obama_eo.pth --aud data/intro_eo.npy --workspace trial_obama/ -O --torso --bg_img data/bg.jpg
# 用 GUI 测试
python test.py --pose data/obama.json --ckpt pretrained/obama_eo.pth --aud data/intro_eo.npy --workspace trial_obama/ -O --torso --bg_img data/bg.jpg --gui
```
### 详细使用方法
第一次运行需要一些时间来编译 CUDA 扩展。
```bash
# 训练(头部)
# 默认情况下,我们从磁盘动态加载数据
# 我们还可以将所有数据预加载到 CPU/GPU 以加快训练速度,但这对于大型数据集来说非常消耗内存。
# `--preload 0`: 从磁盘加载(默认,慢).
# `--preload 1`: 从CPU加载 需要约 70G CPU 内存 (较慢)
# `--preload 2`: 从GPU加载 需要约 24G GPU memory (快)
python main.py data/obama/ --workspace trial_obama/ -O --iters 200000
# train(将嘴唇再微调 50000 步,按照上述命令运行!)
python main.py data/obama/ --workspace trial_obama/ -O --iters 250000 --finetune_lips
# 训练(躯干)
# .pth 应该是 Trial_obama 中的最新检查点
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --head_ckpt .pth --iters 200000
# 在测试拆分上进行测试
python main.py data/obama/ --workspace trial_obama/ -O --test # use head checkpoint, will load GT torso
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test
# 使用 GUI 进行测试
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test --gui
# 使用GUI进行测试(加载语音识别模型以进行实时应用)
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test --gui --asr
# 使用特定的音频和姿势序列进行测试
# --test_train: 使用训练片段分割进行测试
# --data_range: u使用此范围的姿势和眼睛序列(如果比音频短,则自动镜像并重复)
python main.py data/obama/ --workspace trial_obama_torso/ -O --torso --test --test_train --data_range 0 100 --aud data/intro_eo.npy
```
检查'scripts'目录以获取更多提供的示例。
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. 克隆到本地,查看html文件夹
2. 666
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request