针对Deepfake假脸视频面部细节特征的提取算法

2023-11-21 15:30

本文主要是介绍针对Deepfake假脸视频面部细节特征的提取算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[转载]githubGitHub - Allenem/graduation-design: 本科毕业设计:针对Deepfake假脸视频面部细节特征的提取算法icon-default.png?t=LBL2https://github.com/Allenem/graduation-design

 

1.提取人脸

采用 OpenCV 和 face_recognition 做对比,用15张图片做实验

完善后的代码如 ./DatabasePreprocessing/findfaceCV.py 和 ./DatabasePreprocessing/findfaceFR.py 所示。

代码一带注释最简版

代码二带注释最简版

输出如下:

> python findfaceCV.py
Running time using OpenCV is: 6.6083549 Seconds
> python findfaceFR.py
Running time using Face-recognition is: 9.850284 Seconds

 OpenCV 识别率低一点,时间快,脸小,矩形框范围大点儿;Face-recognition 识别率高一点,时间慢一点,脸大,矩形框范围小点儿。综上,我采用第二种方法 Face-recognition 识别。

识别数据库 Celeba devel , Celeba test , PGGAN , DFD

2.视频分帧保存图片处理

代码参考:
python实现批量视频分帧、保存视频帧_EchoPython的博客-CSDN博客_python视频分帧
python 视频分帧保存为图片_是鲤鱼啊-CSDN博客

代码

测试成果:

  1. Terminal
Video 0 is running ...
Video 1 is running ...
Video 2 is running ...
Running log has been saved here: D:/test_face/log.txt
Running time is: 0:00:20.81736
 AllVideosFullName 	   Index   Frame   Picture
01__exit_phone_room    1       306     31
01__hugging_happy      2       788     79
01__kitchen_pan        3       561     57

3.提取DFD视频分帧后的图片中的人脸

完善后的代码如 ./DatabasePreprocessing/findfaceFR_folder.py 所示。

运行代码后,识别的人脸按原先的文件夹存放在新路径下的同名文件夹,每个文件夹都有 log.txt 记录未识别出人脸的文件以及本文件夹人脸未识别率。在新路径下有总的统计数据 log.txt ,包含: 有损图片总数, 未识别图片总数, 未受损图片总数, 总的未识别率。

  • 分帧结果
# OUTPUT1(frame images from DFD/original_c23)
# Running log has been saved here: G:/DFD_img/original_c23/log.txt
# Running time is: 1:05:49.907241# OUTPUT2(frame images from DFD/attack_c23)
# Running log has been saved here: G:/DFD_img/attack_c23/log.txt
# Running time is: 6:29:04.835291
  • 找脸结果
# OUTPUT1(find face from DFD_img/original_c23)
# # of folders: 363
# Running time using Face-recognition is: 13:46:29.115011# OUTPUT2(find face from DFD_img/attack_c23)
# # of folders: 3068
# Running time using Face-recognition is: 4 days, 4:05:53.688934

原视频人脸识别率:95.4%

生成视频人脸识别率:97.7%

4.PGGAN resize PNG->JPG

代码详见:./DatabasePreprocessing/pngToJpg.py


Celeba&PGGAN&DFD数据集特征提取

代码详见:./DatabaseFeatureExtraction/extract_feature.py

!!!注意:这里的特征提取代码只是将特征提取,然后绘制到图片上保存。后面我们将训练SVM分类器,所以需要用到特征数据,这样才比较方便。因此,后文将首先讲述特征数据的提取并保存至Excel文件,然后训练、测试SVM分类器。

matplotlib中cla() clf() close()用途

import matplotlib.pyplot as pltplt.cla()   # Clear axis即清除当前图形中的当前活动轴。其他轴不受影响。
plt.clf()   # Clear figure清除所有轴,但是窗口打开,这样它可以被重复使用。
plt.close() # Close a figure window

下图只是一部分 Celeba 和 PGGAN 数据集的对比图

 

左上:原图,第一排PGGAN假脸,第二排Celeba真脸

右上:三原色直方图,假脸三原色峰值基本重合,真脸三原色峰值错开

左下:SURF特征点,假脸同样的阈值特征点多,真脸少

右下:ELA,假脸ELA图片发亮处较多,真脸基本一色调一致

今天把三个数据集处理(提取人脸,png转jpg)后的所有图片的3种特征都提取了一下。 ✌️

Celeba、PGGAN 特征较好,DFD 效果一般。

输出如下:

# Celeba 
startTime: 2020-02-25 18:08:30.578360
endTime: 2020-02-25 22:50:47.230785
Running time: 4:42:16.652425# PGGAN 
startTime: 2020-02-25 18:09:01.274854
endTime: 2020-02-25 22:58:56.398361
Running time: 4:49:55.123507# DFD
startTime: 2020-02-25 18:09:41.216839
endTime: 2020-02-26 12:08:03.989166
Running time: 17:58:22.772327

SVM分类器分类

学习参考:
API Reference — scikit-learn 1.0.2 documentation
sklearn.linear_model.SGDClassifier — scikit-learn 1.0.2 documentation
代码参考:
https://blog.csdn.net/weixin_41322458/article/details/94389356
http://sofasofa.io/forum_main_post.php?postid=1001110
文献参考:
支持向量机理论与算法研究综述_丁世飞

特征数据提取

文件夹:./SVM/ExtractFeatureData

文件结构:

ExtractFeatureData             # 特征数据提取代码文件夹│  extract_feature_data.py   # 特征数据提取主程序│  OUTPUT.txt                # 部分运行日志│  test.py                   # 特征数据提取主程序之前的测试代码│└─CommonFunction             # 公用函数,分别提取特征并存入excel的一个sheetextract_color_data.pyextract_SURF_data.pyextract_ELA_data.py

三个特征分别由三个py文件提取并保存到Excel中。一组图片的同一特征存在同一个Excel文件中,每张图片占一个sheet。

① color特征:分bgr3列,每列有256*256=65536行;

② SURF特征:先提取SURF特征,核心代码如下,然后统一每张图选取半径最大的15个点作为特征点,不足则补零;

img = cv2.imread(inputpath)
surf = cv2.xfeatures2d.SURF_create(4000)
kps, features = surf.detectAndCompute(img, None)
kps_data = []
for kp in kps:kps_data.append([kp.pt[0], kp.pt[1], kp.angle, kp.size])

③ ELA特征:首先将图片灰度化,然后提取ELA特征,每张图256行256列共65536像素。

SVM_SGDClassifier的训练和测试

文件夹:./SVM/SVM-SGD

文件结构:

SVM-SGD                        # SGD(Stochastic Gradient Descent)│  svm_SGD.py                # 随机梯度下降分类器主程序(含训练、测试代码)│└─GetData                    # 从excel中提取数据返回一维列表,3者基本一样get_color.pyget_SURF.py            # 3者中最先写的,注释详细get_ELA.py

get_XXX 函数每次提取一个Excel的所有sheet的数据,返回list,每个sheet都展平为1维,占list一个元素位。

svm_SGD.py 调用三个函数获取数据,然后通过以下函数训练数据得到SVM模型、用SVM模型预测数据类别。核心代码如下:

clf = SGDClassifier()
clf.partial_fit(X, Y, classes=np.array([0, 1]))
joblib.dump(clf, savepath + '/' + 'clf.pkl')clf2 = joblib.load(savepath+'/'+'clf.pkl')
Z = clf2.predict(X)
accuracy = clf2.score(X, Y)

OUPUT:

Running Time of 训练color特征SVM分类器 : 0:02:31.862390测试数据实际真假:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
测试数据预测真假:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0]
color_clf 预测准确率:0.6164383561643836
Running Time of 测试color特征SVM分类器 : 0:02:21.229064Running Time of 训练SURF特征SVM分类器 : 0:00:00.309207测试数据实际真假:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
测试数据预测真假:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 0]
SURF_clf 预测准确率:0.6438356164383562
Running Time of 测试SURF特征SVM分类器 : 0:00:00.271234Running Time of 训练ELA特征SVM分类器 : 0:00:36.909247测试数据实际真假:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
测试数据预测真假:[1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0]
ELA_clf 预测准确率:0.6575342465753424
Running Time of 测试ELA特征SVM分类器 : 0:00:33.487409

最终分类器准确率大约为 63% 上下。估计很大原因是由于训练数据较少,所以准确率较低,未来工作将是大量数据训练和测试。 

代码 svm_SGD_per100img.py 在训练测试大量文件时准确率不高且三者一样,感觉是代码有点问题

这篇关于针对Deepfake假脸视频面部细节特征的提取算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403256

相关文章

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各