【数据集使用】3D Mask Attack Dataset(3DMAD数据集)的使用

2023-10-31 10:30

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

【编辑时间】2018.09.16

【数据集使用】3D Mask Attack Dataset(3DMAD数据集)的使用

【数据集链接】http://www.idiap.ch/dataset/3dmad

 

一、下载数据库并解压

  • 文件夹中包含的文件如下:

文件包含:

session1.tar.gz - Videos and annotations from the first session

session1.tar.gz - Videos and annotations from the second session

session1.tar.gz - Videos and annotations from the third session

documentation.tar.gz - README file and a python script (raw_to_AVI.py) to demonstrate how to access the data and visualize it.

【自述文件和python脚本(RAW_to_AVI.py),演示如何访问数据并将其可视化】

 

  • 解压其中session1.tar.gz文件后,里面的文件的格式是.hdf文件,

 

  • 根据说明文档,知道了了该文件包含以下数据:

【* 每个帧由640x480 8位rgb图像和640x480 11位深度图像组成。

*每个帧相对于rgb图像的眼睛位置】

  • 通过网上查询后,知道了HDF Explorer可以打开.hdf5格式的文件,打开后如下:

 

2、raw_to_AVI.py脚本的使用

1、bob库的安装与使用

  • 此脚本包含在documentation.tar.gz中

  • 里面需要用到bob库,库地址为:https://github.com/idiap/bob,简介为【Bob是一个免费的信号处理和机器学习工具箱,最初是由瑞士idiap研究所的生物识别组开发的。】

安装方法如下:(https://www.idiap.ch/software/bob/docs/bob/docs/stable/bob/doc/install.html)

【注意:Bob在windows上不工作,因此没有Conda软件包可供使用。即使从源代码安装它也不能工作。】

We offer pre-compiled binary installations of Bob using conda for Linux and MacOS 64-bit operating systems.

  1. Please install conda (miniconda is preferred) and get familiar with it.

  2. Make sure you have an up-to-date conda installation (conda 4.4 and above is needed) with thecorrect configuration by running the commands below:

    $ conda update -n base conda

    $ conda config --set show_channel_urls True

  3. Create an environment for Bob:

    $ conda create --name bob_py3 --override-channels \

    -c https://www.idiap.ch/software/bob/conda -c defaults \

    python=3 bob

    $ conda activate bob_py3

    $ conda config --env --add channels defaults

    $ conda config --env --add channels https://www.idiap.ch/software/bob/conda

  4. Install the Bob packages that you need in that environment:

    $ conda install bob.io.image bob.bio.base ...

【使用】在代码中共用到了3个bob库的指令:bob.io.HDF5File()、bob.ip.draw_cross、bob.io.VideoWriter,

此部分详见官方文档:https://www.idiap.ch/software/bob/docs/bob/docs/stable/,貌似代码用的是旧版本的bob,可能需要使用新的指令。

2、argparse库的使用

还用到了argparse库, 是python的一个命令行解析包,可以编写可读性非常好的程序其用法如下(参考https://www.cnblogs.com/lovemyspring/p/3214598.html):

设置一个解析器

使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。解析器类是 ArgumentParser 。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。

import argparse

parser = argparse.ArgumentParser(description='This is a PyMOTW sample program')

定义参数

   argparse是一个全面的参数处理库。参数可以触发不同的动作,动作由 add_argument() 方法的 action 参数指定。 支持的动作包括保存参数(逐个地,或者作为列表的一部分),当解析到某参数时保存一个常量值(包括对布尔开关真/假值的特殊处理),统计某个参数出现的次数,以及调用一个回调函数

默认的动作是保存参数值。在这种情况下,如果提供一个类型,那么在存储之前会先把该参数值转换成该类型。如果提供 dest 参数,参数值就保存为命令行参数解析时返回的命名空间对象中该 dest数值的一个属性。

解析一个命令行

定义了所有参数之后,你就可以给 parse_args() 传递一组参数字符串来解析命令行。默认情况下,参数是从 sys.argv[1:] 中获取,但你也可以传递自己的参数列表。选项是使用GNU/POSIX语法来处理的,所以在序列中选项和参数值可以混合。

parse_args() 的返回值是一个命名空间,包含传递给命令的参数。该对象将参数保存其属性,因此如果你的参数 dest  "myoption",那么你就可以用args.myoption 来访问该值。

简单示例

以下简单示例带有3个不同的选项:一个布尔选项(-a),一个简单的字符串选项(-b),以及一个整数选项(-c)。

import argparse

parser = argparse.ArgumentParser(description='Short sample app')

parser.add_argument('-a', action="store_true", default=False)

parser.add_argument('-b', action="store", dest="b")

parser.add_argument('-c', action="store", dest="c", type=int)

print(parser.parse_args(['-a', '-bval', '-c', '3']))

【运行结果:】Namespace(a=True, b='val', c=3)

 

参数动作

argparse内置6种动作可以在解析到一个参数时进行触发:

store 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。

store_const 保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。

store_ture/store_false 保存相应的布尔值。这两个动作被用于实现布尔开关。

append 将值保存到一个列表中。若参数重复出现,则保存多个值。

append_const 将一个定义在参数规格中的值保存到一个列表中。

version 打印关于程序的版本信息,然后退出。

【例子】:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-s', action='store', dest='simple_value',

help='Store a simple value')

parser.add_argument('-c', action='store_const', dest='constant_value',

const='value-to-store',

help='Store a constant value')

parser.add_argument('-t', action='store_true', default=False,

dest='boolean_switch',

help='Set a switch to true')

parser.add_argument('-f', action='store_false', default=False,

dest='boolean_switch',

help='Set a switch to false')

parser.add_argument('-a', action='append', dest='collection',

default=[],

help='Add repeated values to a list')

parser.add_argument('-A', action='append_const', dest='const_collection',

const='value-1-to-append',

default=[],

help='Add different values to list')

parser.add_argument('-B', action='append_const', dest='const_collection',

const='value-2-to-append',

help='Add different values to list')

parser.add_argument('--version', action='version', version='%(prog)s 1.0')

results = parser.parse_args()

print 'simple_value =', results.simple_value

print 'constant_value =', results.constant_value

print 'boolean_switch =', results.boolean_switch

print 'collection =', results.collection

print 'const_collection =', results.const_collection

【运行结果】

  • $ python argparse_action.py -h

usage: argparse_action.py [-h] [-s SIMPLE_VALUE] [-c] [-t] [-f]

[-a COLLECTION] [-A] [-B] [--version]

optional arguments:

-h, --help show this help message and exit

-s SIMPLE_VALUE Store a simple value

-c Store a constant value

-t Set a switch to true

-f Set a switch to false

-a COLLECTION Add repeated values to a list

-A Add different values to list

-B Add different values to list

--version show program's version number and exit

  • $ python argparse_action.py -s value

simple_value = value

constant_value = None

boolean_switch = False

collection = []

const_collection = []

 

  • $ python argparse_action.py -c

simple_value = None

constant_value = value-to-store

boolean_switch = False

collection = []

const_collection = []

 

  • $ python argparse_action.py -t

simple_value = None

constant_value = None

boolean_switch = True

collection = []

const_collection = []

 

  • $ python argparse_action.py -f

simple_value = None

constant_value = None

boolean_switch = False

collection = []

const_collection = []

 

  • $ python argparse_action.py -a one -a two -a three

simple_value = None

constant_value = None

boolean_switch = False

collection = ['one', 'two', 'three']

const_collection = []

 

  • $ python argparse_action.py -B -A

simple_value = None

constant_value = None

boolean_switch = False

collection = []

const_collection = ['value-2-to-append', 'value-1-to-append']

 

  • $ python argparse_action.py --version

argparse_action.py 1.0

高级参数处理

至今为止的示例展示了简单的布尔标识、字符串或数字参数选项、以及位置参数。对于变长参数列表、枚举类型数据、以及常量,argparse支持复杂的参数规格。

【可变形参列表】

你可以配置单个参数的定义使其能够匹配所解析的命令行的多个参数。根据需要或期望的参数个数,设置nargs为这些标识值之一:

值 含义

N 参数的绝对个数(例如:3)

? 0或1个参数

* 0或所有参数

+ 所有,并且至少一个参数

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--three', nargs=3)

parser.add_argument('--optional', nargs='?')

parser.add_argument('--all', nargs='*', dest='all')

parser.add_argument('--one-or-more', nargs='+')

print parser.parse_args()

【参数类型】

argparse将所有参数值都看作是字符串,除非你告诉它将字符串转换成另一种数据类型。add_argument()type参数以一个转换函数作为值,被ArgumentParser用来将参数值从一个字符串转换成另一种数据类型。

 

【文件参数】

虽然文件对象可以单个字符串参数值来实例化,但并不允许你指定访问模式。FileType让你能够更加灵活地指定某个参数应该是个文件,包括其访问模式和缓冲区大小。

上例中与参数名关联的值是一个打开文件句柄。在使用完该文件后应自己负责关闭该文件。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-i', metavar='in-file', type=argparse.FileType('rt'))

parser.add_argument('-o', metavar='out-file', type=argparse.FileType('wt'))

try:

results = parser.parse_args()

print 'Input file:', results.i

print 'Output file:', results.oexcept IOError, msg:

parser.error(str(msg))

【运行结果】

$ python argparse_FileType.py -h

usage: argparse_FileType.py [-h] [-i in-file] [-o out-file]

optional arguments:

-h, --help show this help message and exit

-i in-file

-o out-file

【下面的代码中没用到,可以暂时跳过】

参数来源

目前为止所见的例子中,提供给解析器的参数列表来自于显式传递的一个列表,或隐式地从sys.argv获取的。显式传递列表在你使用argparse来处理类命令行但并不是来自命令行(比如来自一个配置文件)的指令之时比较有用。

import argparse

from ConfigParser import ConfigParser

import shlex

parser = argparse./span>ArgumentParser(description='Short sample app')

parser.add_argument('-a', action="store_true", default=False)

parser.add_argument('-b', action="store", dest="b")

parser.add_argument('-c', action="store", dest="c", type=int)

config = ConfigParser()

config.read('argparse_witH_shlex.ini')

config_value = config.get('cli', 'options')

print 'Config: ', config_value

argument_list = shlex.split(config_value)

print 'Arg List:', argument_list

print 'Results:', parser.parse_args(argument_list)

shlex使得切分存储在配置文件中的字符串非常容易。

 

$ python argparse_with_shlex.py

Config: -a -b 2

Arg List: ['-a', '-b', '2']

Results: Namespace(a=True, b='2', c=None)

另一种自己处理配置文件的方法是使用fromfile_prefix_chars指定一个包含一组要待处理参数的输入文件来告诉argparse怎样识别参数。

import argparse

from ConfigParser import ConfigParser

import shlex

 

parser = argparse.ArgumentParser(description='Short sample app',

fromfile_prefix_chars='@'

)

parser.add_argument('-a', action="store_true", default=False)

parser.add_argument('-b', action="store", dest="b")

parser.add_argument('-c', action="store", dest="c", type=int)

print parser.parse_args(['@argparse_fromfile_prefix_chars.txt'])

该示例代码在找到一个以@为前缀的参数时即停止往下读取,然后从以该参数命名的文件中查找更多的参数。例如,输入文件argparse_fromfile_prefix_chars.txt包含一系列参数,一行一个:

-a

-b

2

那么处理该文件产生的输出为:

$ python argparse_fromfile_prefix_chars.py

Namespace(a=True, b='2', c=None)

 

3、os库的使用

os.path.split():按照路径将文件名和路径分割开

os.path.split('PATH')

1.PATH指一个文件的全路径作为参数:

2.如果给出的是一个目录和文件名,则输出路径和文件名

3.如果给出的是一个目录名,则输出路径和为空文件名

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import os

#os.path.split()返回文件的路径和文件名

fname,fename=os.path.split("E:/lpthw/zedshaw/ex19.py")

 

print(f"""

os.path.split()返回文件的路径和文件名

{fname}

{fename}

""")

print()

 

#os.path.splitext()将文件名和扩展名分开

fname,fename=os.path.splitext('/home/ubuntu/python_coding/split_func/split_function.py')

print(f"""

os.path.splitext()将文件名和扩展名分开

{fname}

{fename}

""")

运行结果如下:

 

 

这篇关于【数据集使用】3D Mask Attack Dataset(3DMAD数据集)的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出