3DMAD数据集的使用方法

2023-10-31 10:31
文章标签 数据 使用 方法 3dmad

本文主要是介绍3DMAD数据集的使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.介绍

        3DMAD(3D Mask Attack Database)是一个用于面部假冒攻击检测的数据集,由欧洲联盟第七框架计划资助,由意大利PRA Lab和University of Sassari共同创建。3DMAD数据集在面部假冒攻击检测领域得到了广泛应用,它可以用于验证算法的鲁棒性和通用性,从而提高生物识别系统的安全性和可靠性。其数据集链接:http://www.idiap.ch/dataset/3dmad。当然,也有其他的方式可以获得,这里就不提了。

        说明一下,这个数据集恶心的地方就是他的文件是HDF5格式,其提供的解码代码利用的是BOB库,该库只能在Mac系统或者linux系统下使用,不支持windows,而且他的代码只能一个一个解码HDF5文件,不能以一个文件夹为单位进行解码。作者画了一个上午和下午配置BoB库,最终失败。最后,无奈,只能自己写解码代码……(其他bloc也都是基于BOB库解析的,宝宝心里苦呀)

2.数据集目录

        数据集的结构如图所示。

        备注:其中前五个文件是我解压后的所得到的的,重要的是后面六个文件。

3.解析HDF5文件

        最恶心的点就是他要解析HDF5文件。相比于其他数据集直接给出视频,他还要解析,……无语。

        这里,本作者利用h5py库重新编写了一个解析代码,如果你的虚拟环境中没有h5py文件的话,可以利用conda install h5py或者pip install h5py来安装这个库。以下给出代码。

        使用教程:利用命令行,输入convert.py -path [path]  -e

其中,convert.py是这个代码所在的py文件的名称,这个应该不用细讲吧。

[path]是你要解析HDF5文件所在的文件夹,比如作者这边是“D:/3DMAD/seesion01/Data”

-e 是否要提取面部的关键点,不过作者偷懒,代码中是有的,但是没有调试过,需要读者自己调试一下。

例子:convert.py -path D:/3DMAD/seesion01/Data  -e

import os
import numpy
import cv2
import argparse
import h5pyparser = argparse.ArgumentParser(description='Convert HDF5 files to videos for visualization purposes.')
parser.add_argument('-path', metavar='path', type=str,help='path to the directory containing HDF5 files to be converted')
parser.add_argument('-e', '--eyes', action='store_true', help='mark eye positions in the RGB video')
args = parser.parse_args()# List all HDF5 files in the given directory
hdf5_files = [os.path.join(args.path, f) for f in os.listdir(args.path) if f.endswith('.hdf5')]for hdf5_file in hdf5_files:try:# Read the data from HDF5 filef = h5py.File(hdf5_file, 'r')depth_data = f['Depth_Data'][:]depth_data = numpy.transpose(depth_data, (0, 2, 3, 1))color_data = f['Color_Data'][:]color_data = numpy.transpose(color_data, (0, 2, 3, 1))# if args.eyes:#     eye_pos = f['Eye_Pos'][:]#     for i in range(0, color_data.shape[0]):#         cv2.drawMarker(color_data[i, :, :, :], (int(eye_pos[i, 0]), int(eye_pos[i, 1])), (0, 0, 255), cv2.MARKER_CROSS, 20)#         cv2.drawMarker(color_data[i, :, :, :], (int(eye_pos[i, 2]), int(eye_pos[i, 3])), (0, 0, 255), cv2.MARKER_CROSS, 20)# Set up the output filenames and video writershead, tail = os.path.split(hdf5_file)depth_file = os.path.join(head, tail.split('.')[0] + '_D.avi')color_file = os.path.join(head, tail.split('.')[0] + '_C.avi')depth_video = cv2.VideoWriter(depth_file, cv2.VideoWriter_fourcc(*'XVID'), 30,(depth_data.shape[2], depth_data.shape[1]), False)color_video = cv2.VideoWriter(color_file, cv2.VideoWriter_fourcc(*'XVID'), 30,(color_data.shape[2], color_data.shape[1]), True)# Convert and write the frames to video filesfor i in range(0, color_data.shape[0]):# depth_frame = numpy.right_shift(depth_data[i, :, :], 3).astype(numpy.uint8)depth_frame = depth_data[i, :, :, :].astype(numpy.uint8)color_frame = color_data[i, :, :, :]# Write frames to video filesdepth_video.write(depth_frame)color_video.write(color_frame)# print(color_frame.shape)depth_video.release()color_video.release()print("Depth video is saved in %s." % depth_file)print("Color video is saved in %s." % color_file)f.close()except IOError:print("The given file cannot be read.")

4.效果图

        其中,C代表的是RGB图,D表示的是深度图

5.标签文件 

        我查看了很多的bloc,他们好像都没有指出这个数据集的标签文件是什么,所以我仔细的查看了一下,发现Session01和Session02都是真实的人脸,Session03是虚假的人脸的。该信息可以在documentation/1.docx中查看。

         英语好的大佬可以在评论区翻译一下,作者英文水平太差了,就不翻译了。

6.未解决的问题

        1.作者只提取了其中的视频,没有提取其他的信息。

        2.最后合成视频的时候,可能编码会有画质的损耗,这个希望大家能提一下意见帮我一起解决。

        3.源文件一般都是150MB,而作者提取出来的RGB图片只有几百KB,我还是挺疑惑,不知道为啥差别那么大。希望大家能发表一下意见,是不是作者哪里出现问题了。

7.总结

        总之,3DMAD数据集还是比较恶心的,相比于其他数据集。希望作者的努力可以帮助后面的学习者少走一点弯路吧。可能我写的代码还有一点问题,也希望大家能够提出来,共同进步。

这篇关于3DMAD数据集的使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比