背景介绍:在CASIA-FASD,Replay-Attack,MSU-MFSD以及OULU-NPU数据集中都是提供的视频,因此我们需要将其转成图片格式,之后再将其进行人脸裁剪,随后再进行标签文件的撰写。

图一 原始数据集

图二 预处理后的数据集

以下是视频截取图片+人脸裁剪的代码

import cv2
import os
import dlib
import numpy as np# 针对CASIA-FASD数据集的视频提取成图片# 原始数据集路径(根据自身路径修改)
load_path = r'E:\Dataset\CASIA-FASD\train_release'# 存储预处理后数据集路径(根据自身路径修改)
save_path = r'E:\Dataset\CASIA-FASD\train'# 人脸裁剪部分
class Face_Align(object):def __init__(self, shape_predictor_path):self.detector = dlib.get_frontal_face_detector()self.predictor = dlib.shape_predictor(shape_predictor_path)self.LEFT_EYE_INDICES = [36, 37, 38, 39, 40, 41]self.RIGHT_EYE_INDICES = [42, 43, 44, 45, 46, 47]def rect_to_tuple(self, rect):left = rect.left()right = rect.right()top = rect.top()bottom = rect.bottom()return left, top, right, bottomdef extract_eye(self, shape, eye_indices):points = map(lambda i: shape.part(i), eye_indices)return list(points)def extract_eye_center(self, shape, eye_indices):points = self.extract_eye(shape, eye_indices)xs = map(lambda p: p.x, points)ys = map(lambda p: p.y, points)return sum(xs) // 6, sum(ys) // 6def extract_left_eye_center(self, shape):return self.extract_eye_center(shape, self.LEFT_EYE_INDICES)def extract_right_eye_center(self, shape):return self.extract_eye_center(shape, self.RIGHT_EYE_INDICES)def angle_between_2_points(self, p1, p2):x1, y1 = p1x2, y2 = p2tan = (y2 - y1) / (x2 - x1)return np.degrees(np.arctan(tan))def get_rotation_matrix(self, p1, p2):angle = self.angle_between_2_points(p1, p2)x1, y1 = p1x2, y2 = p2xc = (x1 + x2) // 2yc = (y1 + y2) // 2M = cv2.getRotationMatrix2D((xc, yc), angle, 1)return Mdef crop_image(self, image, det):left, top, right, bottom = self.rect_to_tuple(det)return image[top:bottom, left:right]def __call__(self, image=None, image_path=None, save_path=None, only_one=True):'''Face alignment, can select input image variable or image path, when inputimage format that return alignment face image crop or image path as inputwill return None but save image to the save path.:image: Face image input:image_path: if image is None than can input image:save_path: path to save image:detector: detector = dlib.get_frontal_face_detector():predictor: predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")'''if image is not None:# convert BGR format to Grayimage_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)elif image_path is not None:image_gray = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)image = cv2.imread(image_path)height, width = image.shape[:2]# Dector facedets = self.detector(image_gray, 1)# i donate the i_th face detected in imagecrop_images = []for i, det in enumerate(dets):shape = self.predictor(image_gray, det)left_eye = self.extract_left_eye_center(shape)right_eye = self.extract_right_eye_center(shape)M = self.get_rotation_matrix(left_eye, right_eye)rotated = cv2.warpAffine(image, M, (width, height), flags=cv2.INTER_CUBIC)cropped = self.crop_image(rotated, det)if only_one == True:if save_path is not None:cv2.imwrite(save_path, cropped)return croppedelse:crop_images.append(cropped)return crop_imagesalign = Face_Align("./data/dlib/shape_predictor_68_face_landmarks.dat")if not os.path.exists(save_path):os.mkdir(save_path)for dir_num in os.listdir(load_path):dir_name = os.path.join(load_path,dir_num)save_name = os.path.join(save_path,dir_num)if not os.path.exists(save_name):os.mkdir(save_name)print('开始对%s对象进行截取' % (dir_name))for data_num in os.listdir(dir_name):data_name = os.path.join(dir_name,data_num)cap = cv2.VideoCapture(data_name)c = 1frameRate = 15  # 帧数截取间隔(每隔15帧截取一帧)while (True):ret, frame = cap.read()if ret:if (c % frameRate == 0):# print("开始截取视频第:" + str(c) + " 帧")# 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地align(image=frame, save_path=save_name + '\\' + str(data_num) + '_' + str(c) + ".jpg")# 这里是将截取的图像,进行裁剪保存在本地c += 1cv2.waitKey(0)else:# print("所有帧都已经保存完成")breakcap.release()print('%s已完成' % (dir_name))

在CASIA-FASD数据集运行此代码会有部分图片(尤其是HR视频)截取失败,在Replay-Attack,MSU-MFSD上没有失败问题,对此解决方法看个人。

参考博客:

1.人脸对齐:

常见的人脸对齐方法 python_CExploer的博客-CSDN博客_python 人脸对齐

2.视频截取图片:视频处理-按帧或者按秒截取图像_小火箭丶的博客-CSDN博客_按帧数截取视频1.人脸对齐:常见的人脸对齐方法 python_CExploer的博客-CSDN博客_python 人脸对齐

人脸反欺诈数据集的预处理过程(含代码)相关推荐

  1. 面部识别必看!5篇顶级论文了解如何实现人脸反欺诈、跨姿势识别等(附链接)...

    来源:新智元 本文约1800字,建议阅读5分钟. 本文筛选了5篇非常重量级的有关人脸识别的机器学习论文,并提炼出论文最关键的信息. [ 导读 ]面部识别是计算机视觉中最大的研究领域之一.许多公司都投资 ...

  2. dicom文件_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)

    前沿 在处理医学图像时,常常会遇到以Dicom格式保存的医学图像,如CT.MRI等.Dicom文件是需要专门的软件或者通过编程,应用相应的库进行处理.为了能够更好地服务下游任务,例如分割或检测腹腔CT ...

  3. 基于Autoencoder的反欺诈数据集的异常检测

    Autoencoder算法是一种常见的基于神经网络的无监督学习降维方法(其他常见降维方法). 本教程中,我们利用python keras实现Autoencoder,并在信用卡欺诈数据集上进行异常检测算 ...

  4. python dicom 器官分割_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)

    前沿 在处理医学图像时,常常会遇到以Dicom格式保存的医学图像,如CT.MRI等.Dicom文件是需要专门的软件或者通过编程,应用相应的库进行处理.为了能够更好地服务下游任务,例如分割或检测腹腔CT ...

  5. CelebA-Spoof:具有丰富标注的大规模人脸反欺骗数据集|高清人脸数据集 FFHQ | 下载地址|简记

    ❤️[专栏:数据集整理]❤️ 之[有效拒绝假数据]

  6. stm32f103vet6通过L298N驱动12V直流无刷电机过程含代码

    一.传统开头介绍一下L298N电机驱动模块 L298N是ST公司生产的一种高电压.大电流电机驱动芯片. 该芯片采用15脚封装.主要特点是:工作电压高,最高工作电压可达46V:输出电流大,瞬间峰值电流可 ...

  7. 【不采用】人工智能如何帮助银行反欺诈

    近年来,伴随移动互联网.虚拟现实等技术的飞速发展,银行服务模式日趋多样化.在客户享受灵活便捷服务的同时,银行欺诈风险呈现出更加隐蔽.专业的特点,发展出更多的作案手法和表现形式.传统欺诈检测通常依赖专家 ...

  8. 【采用】人工智能如何帮助银行反欺诈:银行智能欺诈风险预测模型研究

    近年来,伴随移动互联网.虚拟现实等技术的飞速发展,银行服务模式日趋多样化.在客户享受灵活便捷服务的同时,银行欺诈风险呈现出更加隐蔽.专业的特点,发展出更多的作案手法和表现形式.传统欺诈检测通常依赖专家 ...

  9. 信贷反欺诈体系介绍及其策略规则应用

    在信贷业务的风控体系中,反欺诈始终是一个重要话题,与信用评估构成的贷前风控两大模块,对于贷前风险的防范控制发挥着决定性作用.反欺诈虽然在理解层面上感觉略显简单,但由于场景的复杂性与丰富度,使得反欺诈在 ...

最新文章

  1. Xonsh库——Python和Shell语法互通
  2. 如何利用离散Hopfield神经网络进行高校科研能力评价(2)
  3. 智办事2.0APP全新发布,不可错过的3个亮点!
  4. linux的消息机制,linux消息机制的过程是什么啊,请赐教
  5. python组成三位无重复数字_Python生成十万个无序且唯一的数字
  6. 预付卡管理信息系统_校园寝室桶装水配送管理信息系统分析和设计
  7. 计算机实测声波和拍实验报告,course:platform
  8. android 阻塞式函数,Android之PC浏览器上传表单格式大文件到手机客户端read函数阻塞问题...
  9. win11搜索栏无法输入 Windows11搜索栏无法输入的解决方法
  10. 英语六级高频词汇速记 + 2018-6-2听力 Day02
  11. 软件开发测试验收通知书,软件验收报告(共7篇).doc
  12. Apache ShenYu源码阅读系列-Dubbo插件
  13. 正版授权| iObit Uninstaller 12 Pro 专业卸载器工具
  14. 计算机Word文档新建样式A1是啥意思,高会《职称计算机》Word 2007:创建新样式
  15. 数据库知识总结:sqlserver中事务总结:begin tran,rollback tran,commit tran +IndexDB总结...
  16. Kent Beck揭秘Facebook开发部署流程
  17. 黑马畅购商城06-Elasticsearch
  18. 手机锁机病毒解锁清除教程
  19. VC 用发音函数Beep 播放简谱音乐
  20. Windows11 右键菜单没有新建选项操作

热门文章

  1. Linux-hostname查看
  2. 数仓建设全流程(附PPT和视频)
  3. 《数据结构》(戴敏)&增补
  4. 未分配利润、盈余公积、资本公积的区别
  5. 使用正则表达式把IM聊天中的自定义表情格式转换成表情图片
  6. OpenCV或yolov4使用IPCamera进行目标检测——真正的随时检测
  7. ui设计设计软件_60秒的UI设计
  8. 图像的Gamma变换
  9. 三菱PLC5u与台达变频器modbus RTU通讯,功能块
  10. vsto与word基础介绍-新建第一个word加载项〔1〕