FaceForensics++数据库下载(一步步解析过程)

FaceForensics++数据库下载(超详细版教程)

相信很多做deepfake相关研究的朋友,在对模型进行测试或者对潜前人的研究进行复现时,都需要下载一系列数据库并进行预处理等操作,而FaceForensics++数据库是一个由数千个使用不同DeepFake方法操纵的视频组成,并包含四个假子数据集,即DeepFake Detection (DFD), DeepFake (DF), Face2Face (F2F)和FaceSwap (FS)。

由于这是国外的数据集所以一下的操作都需要挂代理来实现:(如果小伙伴无法挂代理可以评论留言,我发给你)

获取下载脚本并并保存到本地

ondyari/FaceForensics: Github of the FaceForensics dataseticon-default.png?t=N7T8https://github.com/ondyari/FaceForensicsff++的官网如上,按照上面的要求填写谷歌的表格,他会通过邮件给你发脚本代码,这里不赘述,我会在文章最后附上这个代码,大家就可以不用填写表格了。

CMD窗口下载数据库

打开cmd窗口

将文后我给的代码粘贴并后缀改为.py文件,确保你的文件命名为FaceForensics++.py

cd  you_dir # 转到这个.py文件所属的文件夹下

接着cmd窗口会显示已经进入目标文件夹,接着输入下载命令:

python FaceForensics++.py
//前面的python指你的电脑本身的python.exe文件,注意并不一定是“python”,需要观察你自己下载的python中的pythin.exe文件的命名是什么,比如笔者下载的python运行文件的命名是python3.11.exe,所以这里就应该python3.11<output path>//这里意思是数据下载的地址,即你的数据集要放在哪里(注意存储空间要足够)-d <dataset type, e.g., Face2Face, original or all>//如果你要下载FaceForensics++全部直接-all即可,也可以选择FaceForensics++数据集其中的一项来下载-c <compression quality, e.g., c23 or raw>//这里指压缩参数选择,如果想要下载原始数据可以选-raw,笔者下载的是-23压缩版-t <file type, e.g., videos, masks or models>//文件下载的类型-video即可下载deepfake的video

比如,要在D盘上的FaceForensics++文件里下载FaceForensics++数据集全部视频,以C23参数压缩,命令可以是:

python3.11 FaceForensics.py E:/FaceForensics++ -d all -c c23 -t videos

注意,运行过程中如果出现“502 BadGateway”提示,可能是你的服务不能使用脚本默认的,而是需要更改,脚本里面提供了三个server可供选择,分别是EU,EU2和CA,对应了欧洲1,2和加拿大,默认使用的是EU,脚本这部分代码如下:

 parser.add_argument('--server', type=str, default='EU',help='Server to download the data from. If you ''encounter a slow download speed, consider ''changing the server.',choices=SERVERS)args = parser.parse_args()# URLsserver = args.serverif server == 'EU':server_url = 'http://canis.vc.in.tum.de:8100/'elif server == 'EU2':server_url = 'http://kaldir.vc.in.tum.de/faceforensics/'elif server == 'CA':server_url = 'http://falas.cmpt.sfu.ca:8100/'else:raise Exception('Wrong server name. Choices: {}'.format(str(SERVERS)))args.tos_url = server_url + 'webpage/FaceForensics_TOS.pdf'args.base_url = server_url + 'v3/'args.deepfakes_model_url = server_url + 'v3/manipulated_sequences/' + \'Deepfakes/models/'return args

所以,在你的CMD窗口可以指定以下server,笔者在出错以后,将server改为EU2就可以顺利下载,总体命令如下:


python3.11 FaceForensics.py E:/FaceForensics++ --server EU2 -d all -c c23 -t videos

PS:–server EU2即指定server为EU2

接下来数据就会开始下载(会有进度条显示下载情况)

由于挂代理,所以可能会出现不稳定的停止下载的情况,如果遇到程序中断,没有关系,确保网络、代理正确连接后重新输入下载命令即可,它会自动跳过已经下载好的文件,继续下载其他文件。

建议下载数据集时尽量保证网速较快,并且代理稳定(否则一中断就重新输入一遍命令很麻烦)。

脚本

附:邮件提供的FaceForensics++脚本如下:(自己复制粘贴做成.py文件)

#!/usr/bin/env python
""" Downloads FaceForensics++ and Deep Fake Detection public data release
Example usage:see -h or https://github.com/ondyari/FaceForensics
"""
# -*- coding: utf-8 -*-
import argparse
import os
import urllib
import urllib.request
import tempfile
import time
import sys
import json
import random
from tqdm import tqdm
from os.path import join# URLs and filenames
FILELIST_URL = 'misc/filelist.json'
DEEPFEAKES_DETECTION_URL = 'misc/deepfake_detection_filenames.json'
DEEPFAKES_MODEL_NAMES = ['decoder_A.h5', 'decoder_B.h5', 'encoder.h5',]# Parameters
DATASETS = {'original_youtube_videos': 'misc/downloaded_youtube_videos.zip','original_youtube_videos_info': 'misc/downloaded_youtube_videos_info.zip','original': 'original_sequences/youtube','DeepFakeDetection_original': 'original_sequences/actors','Deepfakes': 'manipulated_sequences/Deepfakes','DeepFakeDetection': 'manipulated_sequences/DeepFakeDetection','Face2Face': 'manipulated_sequences/Face2Face','FaceShifter': 'manipulated_sequences/FaceShifter','FaceSwap': 'manipulated_sequences/FaceSwap','NeuralTextures': 'manipulated_sequences/NeuralTextures'}
ALL_DATASETS = ['original', 'DeepFakeDetection_original', 'Deepfakes','DeepFakeDetection', 'Face2Face', 'FaceShifter', 'FaceSwap','NeuralTextures']
COMPRESSION = ['raw', 'c23', 'c40']
TYPE = ['videos', 'masks', 'models']
SERVERS = ['EU', 'EU2', 'CA']def parse_args():parser = argparse.ArgumentParser(description='Downloads FaceForensics v2 public data release.',formatter_class=argparse.ArgumentDefaultsHelpFormatter)parser.add_argument('output_path', type=str, help='Output directory.')parser.add_argument('-d', '--dataset', type=str, default='all',help='Which dataset to download, either pristine or ''manipulated data or the downloaded youtube ''videos.',choices=list(DATASETS.keys()) + ['all'])parser.add_argument('-c', '--compression', type=str, default='raw',help='Which compression degree. All videos ''have been generated with h264 with a varying ''codec. Raw (c0) videos are lossless compressed.',choices=COMPRESSION)parser.add_argument('-t', '--type', type=str, default='videos',help='Which file type, i.e. videos, masks, for our ''manipulation methods, models, for Deepfakes.',choices=TYPE)parser.add_argument('-n', '--num_videos', type=int, default=None,help='Select a number of videos number to '"download if you don't want to download the full"' dataset.')parser.add_argument('--server', type=str, default='EU',help='Server to download the data from. If you ''encounter a slow download speed, consider ''changing the server.',choices=SERVERS)args = parser.parse_args()# URLsserver = args.serverif server == 'EU':server_url = 'http://canis.vc.in.tum.de:8100/'elif server == 'EU2':server_url = 'http://kaldir.vc.in.tum.de/faceforensics/'elif server == 'CA':server_url = 'http://falas.cmpt.sfu.ca:8100/'else:raise Exception('Wrong server name. Choices: {}'.format(str(SERVERS)))args.tos_url = server_url + 'webpage/FaceForensics_TOS.pdf'args.base_url = server_url + 'v3/'args.deepfakes_model_url = server_url + 'v3/manipulated_sequences/' + \'Deepfakes/models/'return argsdef download_files(filenames, base_url, output_path, report_progress=True):os.makedirs(output_path, exist_ok=True)if report_progress:filenames = tqdm(filenames)for filename in filenames:download_file(base_url + filename, join(output_path, filename))def reporthook(count, block_size, total_size):global start_timeif count == 0:start_time = time.time()returnduration = time.time() - start_timeprogress_size = int(count * block_size)speed = int(progress_size / (1024 * duration))percent = int(count * block_size * 100 / total_size)sys.stdout.write("\rProgress: %d%%, %d MB, %d KB/s, %d seconds passed" %(percent, progress_size / (1024 * 1024), speed, duration))sys.stdout.flush()def download_file(url, out_file, report_progress=False):out_dir = os.path.dirname(out_file)if not os.path.isfile(out_file):fh, out_file_tmp = tempfile.mkstemp(dir=out_dir)f = os.fdopen(fh, 'w')f.close()if report_progress:urllib.request.urlretrieve(url, out_file_tmp,reporthook=reporthook)else:urllib.request.urlretrieve(url, out_file_tmp)os.rename(out_file_tmp, out_file)else:tqdm.write('WARNING: skipping download of existing file ' + out_file)def main(args):# TOSprint('By pressing any key to continue you confirm that you have agreed '\'to the FaceForensics terms of use as described at:')print(args.tos_url)print('***')print('Press any key to continue, or CTRL-C to exit.')_ = input('')# Extract argumentsc_datasets = [args.dataset] if args.dataset != 'all' else ALL_DATASETSc_type = args.typec_compression = args.compressionnum_videos = args.num_videosoutput_path = args.output_pathos.makedirs(output_path, exist_ok=True)# Check for special dataset casesfor dataset in c_datasets:dataset_path = DATASETS[dataset]# Special casesif 'original_youtube_videos' in dataset:# Here we download the original youtube videos zip fileprint('Downloading original youtube videos.')if not 'info' in dataset_path:print('Please be patient, this may take a while (~40gb)')suffix = ''else:suffix = 'info'download_file(args.base_url + '/' + dataset_path,out_file=join(output_path,'downloaded_videos{}.zip'.format(suffix)),report_progress=True)return# Else: regular datasetsprint('Downloading {} of dataset "{}"'.format(c_type, dataset_path))# Get filelists and video lenghts list from serverif 'DeepFakeDetection' in dataset_path or 'actors' in dataset_path:filepaths = json.loads(urllib.request.urlopen(args.base_url + '/' +DEEPFEAKES_DETECTION_URL).read().decode("utf-8"))if 'actors' in dataset_path:filelist = filepaths['actors']else:filelist = filepaths['DeepFakesDetection']elif 'original' in dataset_path:# Load filelist from serverfile_pairs = json.loads(urllib.request.urlopen(args.base_url + '/' +FILELIST_URL).read().decode("utf-8"))filelist = []for pair in file_pairs:filelist += pairelse:# Load filelist from serverfile_pairs = json.loads(urllib.request.urlopen(args.base_url + '/' +FILELIST_URL).read().decode("utf-8"))# Get filelistfilelist = []for pair in file_pairs:filelist.append('_'.join(pair))if c_type != 'models':filelist.append('_'.join(pair[::-1]))# Maybe limit number of videos for downloadif num_videos is not None and num_videos > 0:print('Downloading the first {} videos'.format(num_videos))filelist = filelist[:num_videos]# Server and local pathsdataset_videos_url = args.base_url + '{}/{}/{}/'.format(dataset_path, c_compression, c_type)dataset_mask_url = args.base_url + '{}/{}/videos/'.format(dataset_path, 'masks', c_type)if c_type == 'videos':dataset_output_path = join(output_path, dataset_path, c_compression,c_type)print('Output path: {}'.format(dataset_output_path))filelist = [filename + '.mp4' for filename in filelist]download_files(filelist, dataset_videos_url, dataset_output_path)elif c_type == 'masks':dataset_output_path = join(output_path, dataset_path, c_type,'videos')print('Output path: {}'.format(dataset_output_path))if 'original' in dataset:if args.dataset != 'all':print('Only videos available for original data. Aborting.')returnelse:print('Only videos available for original data. ''Skipping original.\n')continueif 'FaceShifter' in dataset:print('Masks not available for FaceShifter. Aborting.')returnfilelist = [filename + '.mp4' for filename in filelist]download_files(filelist, dataset_mask_url, dataset_output_path)# Else: models for deepfakeselse:if dataset != 'Deepfakes' and c_type == 'models':print('Models only available for Deepfakes. Aborting')returndataset_output_path = join(output_path, dataset_path, c_type)print('Output path: {}'.format(dataset_output_path))# Get Deepfakes modelsfor folder in tqdm(filelist):folder_filelist = DEEPFAKES_MODEL_NAMES# Folder pathsfolder_base_url = args.deepfakes_model_url + folder + '/'folder_dataset_output_path = join(dataset_output_path,folder)download_files(folder_filelist, folder_base_url,folder_dataset_output_path,report_progress=False)   # already doneif __name__ == "__main__":args = parse_args()main(args)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库相关知识总结

一、数据库三级模式 三个抽象层次&#xff1a; 1. 视图层&#xff1a;最高层次的抽象&#xff0c;描述整个数据库的某个部分的数据 2. 逻辑层&#xff1a;描述数据库中存储的数据以及这些数据存在的关联 3. 物理层&#xff1a;最低层次的抽象&#xff0c;描述数据在存储器中时如…

962: 括号匹配问题

【学习版】 【C语言】 【C】 #include<iostream>class MyStack { public:struct Node {char val;Node* prev;Node* next;Node(char x) :val(x), prev(NULL),next(NULL) {};};MyStack() {base new Node(0);top base;}bool empty() {return top base;}void push(int …

Java快速入门系列-4(面向对象编程)

第四章&#xff1a;面向对象编程 4.1 类与对象4.1.1 类的概念4.1.2 对象的实例化与使用4.1.3 访问修饰符与封装 4.2 继承、封装与多态4.2.1 继承4.2.2 封装4.2.3 多态 4.3 抽象类与接口4.3.1 抽象类4.3.2 接口 4.4 包与访问控制 4.1 类与对象 4.1.1 类的概念 在Java中&#x…

【java探索之旅】逻辑控制掌握 顺序结构 分支语句

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、逻辑控制的概念二、顺序结构三、分支结构3.1 if语句3.2 if习题巩固3.3 细节注意项…

excel散点图怎么每个点添加名称

最终效果图&#xff1a; 添加图标元素->数据标签->其他数据标签选项 选择单元格中的值 手动拖动数据标签&#xff0c;调整到合适的位置。

基于Vue3 中后台管理系统框架

基于Vue3 中后台管理系统框架 文章目录 基于Vue3 中后台管理系统框架一、特点二、源码下载地址 一款开箱即用的 Vue 中后台管理系统框架&#xff0c;支持多款 UI 组件库&#xff0c;兼容PC、移动端。vue-admin, vue-element-admin, vue后台, 后台系统, 后台框架, 管理后台, 管理…

Vue3组件基础示例

组件是vue中最推崇的&#xff0c;也是最强大的功能之一&#xff0c;就是为了提高重用性&#xff0c;减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时&#xff0c;我们也会遇到一些常见的功能、模块&#xff0c;那么如何在原生HTML中使用组件化呢&am…

线上研讨会 | 新一代数字化技术赋能机器人及智能产线行业高质量发展

随着智能制造的快速推进&#xff0c;制造业转型升级到了关键阶段。越来越多的企业以数字化技术搭配智能机器人及智慧产线&#xff0c;主动实现数字化转型。达索系统3D体验平台是实现企业数字化转型的新一代数智化平台&#xff0c;基于型、数字驱动、数字化连续技术&#xff0c;…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块&#xff0c;实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明&#xff1a; 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”&#xff0c;…

HarmonyOS 应用开发-页面间共享组件实例的案例

介绍 本示例提供组件实例在页面间共享的解决方案&#xff1a;通过Stack容器&#xff0c;下层放地图组件&#xff0c;上层放Navigation组件来管理页面&#xff0c;页面可以共享下层的地图组件&#xff0c;页面中需要显示地图的区域设置为透明&#xff0c;并参考触摸交互控制&am…

ST表的解释

介绍 ST表&#xff1a;一种用于高效处理区间查询的数据结构。它可以在O(1)的时间复杂度内回答某一区间的最值查询&#xff08;最小值、最大值等&#xff09;。ST表使用动态规划的思想&#xff0c;通过预处理的方式来快速计算出各个区间的最值。 st算法的主要思想就是将所求的…

CTK插件框架学习-服务工厂(06)

CTK插件框架学习-信号槽(05)https://mp.csdn.net/mp_blog/creation/editor/137240105 一、服务工厂定义 注册插件时使用服务工厂注册&#xff0c;使用getService根据调用者插件资源文件内容获取在服务工厂内的对应实现在服务工厂中可以知道是哪个插件正在调用服务工厂懒汉模式…