实战DeepFake(一)

目录

  1. 环境配置
  2. 代码解读
  3. 实例

一.环境

本实验所用工具:
pycharm+anaconda
ffmpeg
环境:
python3.6
tensorflow 1.1.0
keras 2.2.2
注意事项:
本人所用tensorflow版本并非DeepFake所要求版本。运行会出现错误,错误解决方案请见本人另两篇文章。
环境安装:
pycharm+anaconda安装教程:https://www.cnblogs.com/yuxuefeng/articles/9235431.html
tensorflow配置教程:https://www.cnblogs.com/elroye/p/7864988.html
ffmpeg安装教程https://blog.csdn.net/yang725614/article/details/79696756

二.代码解读

源码:https://github.com/joshua-wu/deepfakes_faceswap
源码文件:
image_augmentation.py 图像增强,仿射变换,重映射
model.py 搭建网络,编码器和解码器
pixel_shuffler.py 分辨率提高,扭曲图片,增加训练难度
script.py 融合图片
train.py 训练模型
training_data.py 数据处理
umeyama.py 点云匹配
utils.py 定位路径一类的工作
具体解析:在此省略,见更新。

三.实例

1.从github上获取源码。

2.在pycharm上新建项目,将源码文件全部拷贝到项目目录之下,并在目录下创建model文件夹。

3.制作数据集
数据集样例:
链接:https://pan.baidu.com/s/1dF4f0cT 密码:mwk6
or
anonfile.com/p7w3m0d5be/face-swap.zip
包含data和model

3.1.录制视频,或者是下载一段视频(尽量保证只出现一张人脸,本实验预处理不包含分辨不同人脸,建议录制)

3.2.提取帧
利用ffmpeg从视频里抽取帧
win+r然后输cmd,运行。使用运行命令
ffmpeg -i 视频路径 -r 每秒抽取帧数 图片保存路径
例子:ffmpeg -i E:/shipin/one.mp4 -r 60 E:/tupian/image%d.jpg

3.3.提取人脸
本文采用opencv人脸分类器识别含有人脸的图片。(效果差于dlib和cnn,后续改进)
代码+人脸分类器:https://download.csdn.net/download/qq_36625422/11170644 (我知道你们肯定不舍的花c币的,我把资源放到百度网盘里了,自行下载)
百度网盘:链接:https://pan.baidu.com/s/1QEThGIN7ocWqYwbIUSh5vw
提取码:il86
利用python处理之后,仍需要自己删除质量差的图片
3.4.新建data文件夹,在data文件夹下分别创建cage,drump文件夹,cage里面放的是替换人脸,trump里面放的是被替换的人脸。最后将data拷贝到新建项目的目录下。
4运行
4.1 运行train.py,等到loss下降至0.015就能获得不错的效果了。(运行时间较长)
4.2 模型训练完毕,运行script.py,在项目下会生成outpt文件夹,里面是替换的图片(时间花费很短)
5制作视频
5.1 将图片拷贝到一个文件夹里。对图片改名,为了ffmpeg能合成视频。把代码贴出来了,分享太麻烦了。

 # -*-coding:utf8-*-
import os
import cv2
import time
import shutil
def getAllPath(dirpath, *suffix):
    PathArray = []
    for r, ds, fs in os.walk(dirpath):
        for fn in fs:
            if os.path.splitext(fn)[1] in suffix:
                fname = os.path.join(r, fn)
                PathArray.append(fname)
    return PathArray
def readPicSaveFace_1(sourcePath, targetPath, invalidPath, *suffix):
    try:
        ImagePaths = getAllPath(sourcePath, *suffix)

        # 对list中图片逐一进行检查,找出其中的人脸然后写到目标文件夹下
        count = 1
        # haarcascade_frontalface_alt.xml为库训练好的分类器文件,下载opencv,安装目录中可找到
        face_cascade = cv2.CascadeClassifier('E:\BaiduNetdiskDownload\opencv\sources\data\haarcascades\haarcascade_frontalface_alt.xml')
        for imagePath in ImagePaths:
            try:
                img = cv2.imread(imagePath)
                if type(img) != str:
                                cv2.imwrite(targetPath + os.sep + 'image%s.jpg' % count, img)
                                count += 1
                                print(imagePath + "have face")
                    # else:
                    #   shutil.move(imagePath, invalidPath)
            except:
                continue
    except IOError:
        print("Error")
    else:
        print('Find ' + str(count - 1) + ' faces to Destination ' + targetPath)


if __name__ == '__main__':
    invalidPath = r'E:\jiqixuexidata\unused1'
    sourcePath = r'E:\jiqixuexidata\trump'
    targetPath1 = r'E:\jiqixuexidata\trumptarget'
    readPicSaveFace_1(sourcePath, targetPath1, invalidPath, '.jpg', '.JPG', 'png', 'PNG')

5.2合成视频
运行cmd
例子:

ffmpeg -f image2 -i /home/ttwang/images/image%d.jpg   tt.mp4

实际的效果:

在这里插入图片描述在这里插入图片描述

四 不足与可用改进

1.人脸提取,opencv人脸分类器表现不够好
改进:更换为dlib
2.图片输入是256*256的,过小
改进:变更网络的输入与输出
3.图像融合,边缘明显,肤色差异明显
改进:采用泊松融合,或采用smooth_mask
改进:引入肤色处理
(实验的改进见后续更新)

  • 14
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
一个微服务的实战项目可以是优惠券平台项目。该项目分成四大模块来做微服务,包括优惠券模板服务、计算服务、用户服务和平台类组件。优惠券模板服务负责创建具体优惠券的前置条件,并实现了模板规则的创建、克隆、分页查找等功能。优惠计算服务根据用户购物车中的商品信息和优惠券信息,计算当前订单优惠后的价格,并提供了“优惠金额试算”服务。用户服务是暴露给外部用户使用的接口,依赖于模板服务和优惠计算服务完成底层逻辑,主要提供用户领券、订单价格试算、下单核销和订单金额试算等功能。平台类组件包括一些业务无关的中心化组件,如网关等。在项目搭建方面,可以使用Spring Boot构建项目结构,并借助Maven实现依赖项管理。数据操作可以使用Spring Data JPA实现数据库的CRUD操作。同时,可以使用Spring Web对外暴露RESTful风格的API。这样的实战项目可以帮助你了解微服务的开发和架构。\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Spring Cloud微服务项目实战:我们要搭建一个怎样的微服务实战项目?](https://blog.csdn.net/FeiChangWuRao/article/details/123188002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Spring Cloud 微服务项目实战 -](https://blog.csdn.net/yangshangwei/article/details/127769017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值