图像篡改检测python_GitHub-Allenemgraduation-design:。
。。
针对Deepfake假脸视频⾯部细节特征的提取算法
⽬录
⼀、仓库说明
.
│ LICENSE # 许可说明
│ README.md # 简介
├─References # 参考⽂献
├─FeatureExtractionLearning # 学习特征提取 代码⽂件夹
├─DatabasePreprocessing # 数据库预处理:图⽚提取⼈脸,视频分帧存图提取⼈脸
├─DatabaseFeatureExtraction # 提取 Celeba PGGAN DFD 数据集⼈脸特征 代码⽂件夹
├─SVM # 学习SVM分类器,分类器实现⼈脸判别 代码⽂件夹
├─screenshots # ⼀些截图
└─Paper # 我的论⽂
⼆、⼯作计划
1.数据库分配
学⽣
真脸
GAN假脸数据库
Deepfake数据库
JYT
FFHQ(0-35000)
styleGAN2
TIMIT
XJ
Celeba(train)
styleGAN
DFDC
ZS
FFHQ(35001-70000)
starGAN
Celeba(validation,test)
PGGAN
DeepfakeDetection
2.特征分配
学⽣
特征
JYT
1、局部⼆值模式LBP
2、⽅向梯度直⽅图HOG
3、SRM残差图像
XJ
1、共⽣矩阵
2、光流场
3、LPQ特征
ZS
1、直⽅图/共⽣矩阵
2、拉普拉斯变换均⽅差
3、⼩波变换频率直⽅图PY
1、颜⾊直⽅图
2、Surf
3、错误级别分析(Error level analysis,ELA) 3.⼯作计划
起⽌时间
⼯作内容
备注
2020.01-2020.02
调研和资料分析
2020.01-2020.02
数据库预处理
视频分帧、⼈脸提取及定位
2020.02-2020.03
提取⼈脸特征、检测GAN真假脸图像差异
隐写分析特征或者图像篡改特征
2020.03-2020.04
Deepfake换脸视频检测算法实现
SVM分类器等不同分类器
2020.04-2020.05
完成毕业论⽂
三、调研和资料分析
2.我⾃⼰的中⽂翻译
3.Python学习和⼈脸检测学习
四、学习特征提取
1、颜⾊直⽅图
1.1 matplotlib画图像变⾊问题
在使⽤opencv配合jupyter notebook调试,其中常常使⽤matplotlib来显⽰图像
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread("image.jpg")
# 后⾯的⽅法都从此处开始更改
plt.subplot(),plt.imshow(image),plt.title('Input')
plt.show()
但是在实际使⽤过程中,我们会发现plt.imshow()后出现的图形变成了负⽚,这是因为cv2.imshow()与plt.imshow()的通道顺序不同产⽣的,前者BGR,后者RGB。
解决⽅法⼀:
b, g, r = cv2.split(image)
image_new = ([r, g, b])
plt.subplot(),plt.imshow(image_new),plt.title('Input')
plt.show()
解决⽅法⼆:
image_new = np.flip(original_img,axis = 2)
plt.subplot(),plt.imshow(image_new),plt.title('Input')
plt.show()
解决⽅法三:
image_new = image[:,:,::-1]
plt.subplot(),plt.imshow(image_new),plt.title('Input')
plt.show()
当然cv2⾃⼰显⽰没有问题,它的颜⾊顺序是BGR
import cv2
import numpy as np
image = cv2.imread("image.jpg")
cv2.imshow("Img", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
1.2 histogram.py 和 histogram3lines.py 效果图
2、Surf
2.1 SURF简介
SURF(Speeded Up Robust Features) 加速鲁棒特征。正如其名,它是加速版本的 SIFT(Scale-invariant feature transform) 尺度不变特征转换。
它善于处理具有模糊和旋转的图像,但是不善于处理视⾓变化和光照变化。在SIFT中使⽤⾼斯微分 DoG(Difference of Gaussian) 对⾼斯拉普拉斯算⼦ LoG(Laplacian of Gaussian) 进⾏近似,⽽在SURF中使⽤盒⼦滤波器 Box Filter 对 LoG 进⾏近似,这样就可以使⽤积分图像了(计算图像中某个窗⼝内所有像素和时,计算量的⼤⼩与窗⼝⼤⼩⽆关)。总之,SURF最⼤的特点在于采⽤了 Haar特征 以及 积分图像 的概念,⼤⼤加快了程序的运⾏效率。
2.2 SURF⼩实验和效果图
① 创建⼀个SURF对象
cv2.xfeatures2d.SURF_create(, hessianThreshold, nOctaves, nOctaveLayers, extended, upright)
hessianThreshold:默认100,关键点检测的阈值,越⾼监测的点越少
nOctaves:默认4,⾦字塔组数
nOctaveLayers:默认3,每组⾦⼦塔的层数
extended:默认False,扩展描述符标志,True表⽰使⽤扩展的128个元素描述符,False表⽰使⽤64个元素描述符。
upright:默认False,垂直向上或旋转的特征标志,True表⽰不计算特征的⽅向,False-计算⽅向。
之后也可以通过类似getHessianThreshold(),setHessianThreshold()等函数来获取或修改上述参数值,例如
surf.setHessianThreshold(True) 表⽰将HessianThreshold参数修改为True。
transform中文翻译② 绘制特征点
cv2.drawKeypoint(image, keypoints, outImage, color, flags)
或:
outImage = cv2.drawKeypoint(image, keypoints, None, color, flags)
image:输⼊图像
keypoints:上⾯获取的特征点
outImage:输出图像
color:颜⾊,默认为随机颜⾊,顺序为BGR
flags:绘制点的模式,有以下四种模式
cv2.DRAW_MATCHES_FLAGS_DEFAULT:
默认值,只绘制特征点的坐标点,显⽰在图像上就是⼀个个⼩圆点,每个⼩圆点的圆⼼坐标都是特征点的坐标。
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:
绘制特征点的时候绘制的是带有⽅向的圆,这种⽅法同时显⽰图像的坐标,size,和⽅向,是最能显⽰特征的⼀种绘制⽅式。
cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:
只绘制特征点的坐标点,显⽰在图像上就是⼀个个⼩圆点,每个⼩圆点的圆⼼坐标都是特征点的坐标。
cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINT:
单点的特征点不被绘制
③ 调试
由于如下报错:
surf = cv2.xfeatures2d.SURF_create(30000)
<: OpenCV(4.2.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\surf.cpp:1029: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set
OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SURF::create'
所以采取如下措施:
pip uninstall opencv-python
pip uninstall opencv-contrib-python
pip install opencv-python==3.4.2.16 -i "pypi.doubanio/simple/"
pip install opencv-contrib-python==3.4.2.16 -i "pypi.doubanio/simple/"
④ 代码⽂件
⑤ 效果图
3、错误级别分析(Error level analysis,ELA)
① 理论说明
ELA 全称:Error Level Analysis ,汉译为“错误级别分析”或者叫“误差分析”。通过检测特定压缩⽐率重新绘制图⽚后造成的误差分布,可⽤于识别JPEG图⽚的压缩。
Principe:Error Level Analysis (ELA) permits identifying areas within an image that are at different compression levels. With JPEG images, the entire picture should be at roughly the same level. If a section of the image is at a significantly different error level, then it likely indicates a digital modification.
原理:错误级别分析可以识别出⼀幅图⽚不同压缩率的地⽅。JPEG图像全图应该⼤约是相同的压缩率。如果图⽚的某⼀部分有⾮常突出的错误压缩率,则它可能被数字化更改过。
② 编程
为了引⼊ magic ⽂件类型识别,安装 python-magic-bin 库。
代码⽂件:
带注释的代码
import os,sys
import magic
from PIL import Image, ImageChops, ImageEnhance
def ela(filename, output_path):
print("****ELA is starting****")
if magic.from_file(filename, mime=True) == "image/jpeg":

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。