重放攻击数据库的光流对策

antispoofing.optflow的Python项目详细描述


一种用于欺骗攻击的光流计数器措施。本文档说明如何安装并使用它生成
我们的论文结果。


如果您使用此软件包和/或其结果,请引用以下
出版物:

1。原稿详细解释了反措施(在
评论下):

@article{anjos{u ietbmt}2013,
author={anjos,andr{{{e}}和murali mohan chakka和marcel,s{{e}bastien},
关键字={攻击,反措施,反欺骗,伪装,不诚实行为,面部识别,面部验证n,伪造,活性检测,回放,欺骗,欺骗,光流},
month=apr,
title={motion-based counter measures to photo attacks in face recognition},
journal={institute of engineering and technology-biometrics},
year={2013},
}


2.鲍勃作为实验的核心框架:

@inproceedings{anjos{u acmmm}2012,
author={a.anjos and l.el shafey and r.wallace and m.g\"unther and c.mccool and s.marcel},
title={bob:一个供研究人员使用的免费信号处理和机器学习工具箱},
year={2012},
month=10月,
书名={第20届ACM多媒体系统会议(ACMMM),日本奈良},
出版商={ACM出版社},
网址={http://publications.idiap.ch/downloads/papers/2012/anjos_bob_acmmm12.pdf},
}

三。要使用重放攻击数据库,您还应该提到以下介绍的
论文:

@inproceedings{chingovska戋u biosig戋2012,
author={chingovska,ivana and anjos,and r{{{e}}和marcel,s{{e}bastien},
keywords={攻击,反措施,反欺骗,人脸识别,活力检测。在上,重播,欺骗},
month=sep,
title={on the effective of local binary patterns in face anti-spoofing},
booktitle={ieee biometrics special interest group},
year={2012},
url={http://publications.idiap.ch/downloads/papers/2012/chingovska\u ieeebiosig2012.pdf},
o报告与此代码有关的问题或改进,请与上述论文的作者联系。


有关详细信息,请访问
`照片攻击数据库门户网站<;https://www.idiap.ch/dataset/photo attack>;`


注意:

wnload这个包的最新稳定版本。

解包和
使用"zc.buildout<;http://pypi.pypi.org/pypi/pypi/zc.buildout>;```为这个包创建一个虚拟工作环境。






使用自动安装程序
=====================



使用"pip"是最简单的(外壳命令用`` ` ` ` ` ` ` ` `信号标记):


平选flow

您还可以执行same使用"easy-install":

$easy-install antispoofing.optflow

这将下载并安装此软件包以及任何其他必需的依赖项。它还将通过"virtualenv
<;http://pypi.python.org/pypi/virtualenv>;``验证您安装的bob版本是否兼容。


否则,我们建议您使用下一个选项。

工具包本身的安装使用"buildout
<;http://www.buildout.org/>;"。使用这个包不需要了解它的内部工作原理。下面是一个让您开始的方法:

$python bootstrap.py
$./bin/buildout


这两个命令应该下载并安装所有未安装的依赖项,并为您提供一个完全可操作的测试和开发环境。

注意:


上一个命令集第一行中使用的python shell确定将用于此包中开发的所有脚本的python解释器。由于此包使用"bob
<;http://idiap.github.com/bob>;`` uu",因此必须确保使用用于生成bob的**解释器调用``bootstrap.py`
脚本,否则可能会出现意外问题。

我们的系统可以安全地
认为它使用默认的python解释器。在这种情况下,上述3个
命令行应按预期工作。如果bob安装在私有目录中的其他位置,请在运行`./bin/buildout``之前编辑文件``buildout.cfg```**。找到名为"buildout"的部分,编辑或添加行"prefixes"以指向安装或构建bob的目录。例如::

[buildout]

前缀=/users/crazybox/work/bob/build


——




在目录中解压缩。根据您的安装策略,您应该将所有必需的实用程序都放在一个二进制目录中(如果使用buildout选项,实用程序将放在"bin"中)。我们希望为photo-attack数据库下载的
视频文件安装在包根目录下名为"database"的
子目录中。如果不想将
数据库安装在此包的根目录上,可以使用指向数据库文件位置的链接::

$ln-s/path/where/you/installed/the/photo attack database

如果不想创建链接,请使用`--input dir`标志指定包含数据库文件的根目录。这将是包含子目录"train"、"test"、"devel"和"face locations"的目录。论文布局:如何再现我们的结果。本文的主要贡献如下:


reference system 1(rs1)-kollreider的光流反欺骗:

@article{kollreider_2009,
author={k.kollreider and h.fronthaler and j.bigun},
title={non intrusive livelness detection by face images},
音量{27},
数字{3},
期刊{图像与视觉计算},
出版商{爱思唯尔b.v.},
年份{2009},
页数{233--244},
}

作者{wei bao and h.li and nan li and wei jiang},
title={基于光流场的人脸识别活性检测方法},
书名{2009图像分析与信号处理国际会议,
ng},
出版社{ieee},
年份{2009},
pages={233--236},
}

reference system 3(rs3)-我们自己的基于帧差的反欺骗:

@inproceedings{anjos{uijcbu 2011,
author={anjos,andr{{e}和marcel,s{e}bastien},
关键字={攻击,反措施,反欺骗,伪装,dis诚实行为、人脸识别、人脸验证、伪造、活体检测、回放、欺骗、欺骗},
月=10月,
标题{人脸识别中照片攻击的对策:公共数据库和基线},
书名{国际生物特征学联合会议2011年,
year={2011},
url={http://publications.idiap.ch/downloads/papers/2011/anjos_ijcb_2011.pdf}
}


基于光流相关(ofc)**的最终算法代表了我们在本文中的贡献**。

降低bob的"它自己的卫星包"的说明,http://pypi.python.org/pypi/antispofing.motion>;` ` `.
该包的脚本应该是自动生成的,并在您的"bin"下提供给您(该包取决于该包)。

我们讨论如何提取rs1、2和ofc的结果,它们在先前估计的光流(of)场的顶部工作。因此,这是本手册的第一个主题。

这当然不是
必需的,但它是我们用它测试方法的框架,因此我们建议您开始使用
。这个框架估计任意两个连续帧之间
的*密集*字段。很慢。请注意,浏览所有视频可能需要相当长的时间。要按顺序运行提取,请对所有视频使用以下命令:

$./bin/optflow_estimate.py--verbose/root/of/database results/flows replay--protocol=photo

。注意:

您可能需要将作业并行化。如果您是idiap,则可以使用"gridtk"包,该包应下载并安装在当前环境中:

$./bin/jman submit--array=800--queue=q1d./bin/optflow_estimate.py--verbose/root/of/database results/flows replay--protocol=photo

the``magic``通过执行可以找到``800``条目的数目:

$./bin/optflow_estimate.py--网格计数回放--protocol=photo

每个
作业占用的RAM小于2 GB,但大于1 GB。
因此,您必须选择正确的队列,并且可能需要为要运行的计算机设置内存
要求。

注意:

如果您想用自己的另一个算法替换此阶段。
请注意,输出格式为数据库中每个输入视频一个HDF5文件,
按与原始数据库中相同的方式组织。每个输入视频
应包含一个4d 64位浮点数组,该数组具有以下
形状:(帧,u+v,高度,宽度)。对于图像中的每个像素,第二个维度对应于算法输出的u(水平)和v(垂直)速度。如果您没有使用密集的估计器,请在调用下一个脚本之前自行推断值。

需要的话,你可以用你选择的任何一种估算技术来测试这个框架的结果。

一旦你掌握了流场。你可以开始计算论文中每个方法所需的
分数。在处理速度方面,将这些功能放在本地硬盘上会有帮助。
HDF5文件往往很大。

重要提示:

de直接产生
流场。在这种情况下,您还可能发现
估计速度上的微小差异。这些差异是由于电影解码和
灰度转换不同于bob的结果。

它可能会稍微改变您可以获得的最终结果。


参考系统1:来自Kollreider的分数
==


$./bin/optflow_kollreider.py--verbose/root/of/database results/flows results/kollreider replay--protocol=photo

您可以使用
program选项`--tau=<;float value>;``修改方法所需的:math:`\tau`参数。默认情况下,此参数设置为
``1.0`。请参阅kollreider的原始文章,了解
的含义以及如何调整此参数。如果您调整参数并执行如下所述的错误分析,您将得到我们论文中表1所示的结果。注:

上述程序可能有点慢,即使它比
流场估计本身快得多。如果您想加快速度,只需在
网格上运行它:

$./bin/jman submit--array=800./bin/optflow_kollreider.py--verbose/root/of/database results/flows results/kollreider replay--protocol=photo

对于
可以使用`--grid count``选项进行细分的作业::

./bin/optflow_kollreider.py--grid count replay--protocol=photo

。重要提示:

我们根据面部位置提供的边界框估计面部中心和耳朵的位置。这样,我们可以使用相同的输入集比较所有
算法。我们还没有测试过专门的关键点定位器是否能比我们的方法给出更好的结果。


除了为论文中的测试生成输出之外,您还可以生成一个带注释的视频,显示我们对人脸边界框的推断是如何工作的
对于findin找出感兴趣的地区应用科尔雷德的工作。要做到这一点,请使用脚本"optflow_kollreider_annotate.py"。它以类似于上述脚本的方式工作,如果不告诉
否则,它将处理整个数据库。这也可能有点长,但如果您
希望或使用数据库的筛选选项来限制分析的视频数,则可以将其网格化。例如:

$bin/optflow_kollreider_annotate.py-v/idiap/group/replay/database/protocol s/replayattack database tmp replay--protocol=photo--client=101--light=reverse

reference system 2:来自bao的分数
===


s对于bao的方法,使用脚本
``optflow_bao.py``方法如下::

$./bin/optflow_bao.py--verbose/root/of/database results/flows results/bao replay--protocol=photo

程序
选项`--border=<;integer value>;``。默认情况下,此参数设置为``5`
(像素)。bao等人的原始论文没有提出这样一个
参数,也没有提到如何设置面边界框。我们假设检测到的人脸周围像素的默认值
。在本文中,我们将该值从``0`(零)扫描到多个像素来测试该方法。如果您
调整参数并执行如下所述的错误分析,您将
得到本文表2所示的结果。

注:

上述程序可能有点慢,即使它比
流场估计本身快得多。如果要加快速度,只需在
网格上运行它:

$./bin/jman submit--array=800./bin/optflow_bao.py--verbose/root/of/database results/flows results/bao replay--protocol=photo

e使用`--grid count``选项闯入::

./bin/optflow_bao.py--grid count replay--protocol=photo


/>给鲍勃的包裹。该软件包的脚本应该是自动生成的,并且
也可以在"bin"下提供给您(该软件包取决于
一个)。


生成序列中每个帧的
分数:math:`\chi^2`比较。
未检测到人脸的帧生成一个分数值'`numpy.nan`',类似于我们组实施的
其他对策。要为每个
帧生成每个分数,可以使用应用程序"optflow\u histocomp.py":

$./bin/optflow\u histocomp.py--verbose/root/of/database results/flows results/histocomp replay--protocol=photo

。注:

上述程序可能有点慢,即使它比
流场估计本身快得多。如果要加快速度,只需在
网格上运行它:

$./bin/jman submit--array=800./bin/optflow_histocomp.py--verbose/root/of/database results/flows results/histocomp replay--protocol=photo

obs它可以用`--grid count``选项::

./bin/optflow_histocomp.py--grid count replay--protocol=photo

这改变了文中解释的与角空间的量子化有关的参数math:`q'。(参见图5中的结果。)

``--offset`
这将更改量化的偏移量。如文中所述,在图6中研究了它的影响,对于`--箱数=2``,

=======


一旦您要分析的分数由上述方法之一生成,
您可以使用应用程序计算数据库上的错误。该程序接收一个目录(包含给定方法输出的
分数),并生成这种
方法的控制台分析,本文使用这种方法::

$./bin/score-analysis.py results/histocomp replay--protocol=photo

nt以相等的错误率设置阈值
(eer),并将其应用于测试集,报告两个集上的错误。a
典型输出如下::

输入数据:尿布/temp/aanjos/spoofing/scores/optflow_histocomp
thres.在开发集的EER:6.9459E-02
[eer@devel]far:37.04%(15601/42120)frr:37.04%(8312/22440)hter:37.04%
[hter@test]far:37.11%(20843/56160)frr:35.75%(10696/29920)hter:36.43%

d作为**an
个体(独立)观察**,并基于在整个开发和测试集上找到的框架的整体集计算错误率。括号内打印的
数字表示每组(分母)中有多少帧被计算
,以及有多少帧对显示的百分比(分子)有贡献。对开发集和测试集的半总错误率(hter)进行评估。开发集的hter自然等于同一集上的eer。

o在相同的分数序列中,分数将平均到,
。例如,如果optflow histocomp.py生成的
文件中有一个包含
类似于`[1.0,2.0,1.5,3.5,0.5]```的一系列分数,并且窗口大小参数
设置为2,则此过程计算的分数为`[1.5,1.75,
2.5,2.0].``它表示`[1.0,2.0]``,`[2.0,
1.5]``,``[1.5,3.5]``和`[3.5,0.5]````的平均值。

``--overlap=<;integer>;``

控制窗口之间的重叠量。如果未设置,则默认的
重叠设置为"窗口大小-1"。您可以通过将此参数设置为不同的值来修改此行为。以上面的例子为例,如果
将窗口大小设置为2,重叠部分设置为0,则此分析产生的分数集
将为`[1.5,2.5]``。注意忽略帧
值"0.5"(序列的最后一个)。

结果/histocomp回放——协议=照片

,输出:


输入数据:/idiap/temp/aanjos/spoofing/scores/optflow\u histocomp
窗口大小:220(重叠=80)
thres。在开发集eer:1.4863e-01
[eer@devel]far:2.78%(5/180)frr:2.50%(3/120)hter:2.64%
[hter@test]far:2.92%(7/240)frr:1.88%(3/160)hter:2.40%

程序。

要生成这样的图,必须生成每个设备的
故障分析(图8.a)和攻击支持(图8.b)。要做到这一点,请将"breakdown"选项传递给"score-analysis.py"脚本::

$./bin/score-analysis.py--window size=220--overlap=80--breakdown results/histocomp replay--protocol=photo

为了节省计算资源,框架(参见讨论部分)。您可以通过使用score-analysis.py``的`--skip``参数
生成论文中的表格。默认情况下,我们不会跳过任何帧,如果将此参数设置为1,则会跳过其他帧。
如果将其设置为2,则我们只考虑每3帧中有1帧,依此类推。

problems
--


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java程序运行时错误   JavaAndroidStudio:与往常一样,四舍五入到next.5或.0   apache使用Java以表单数据形式上载文件   带矢量的java Freeflight相机如何正确旋转?   java如何以编程方式检索有关当前项目的语言、操作系统、体系结构等信息   java Twitter4J tweet实体?   java PdfBox编码异常   java在拖动未装饰的舞台时,如何强制光标停留在窗口上   JavaSpring注释扫描优化   java无法通过IntelliJ Idea在tomcat上运行服务   java在生命周期中如何拦截请求?   java中的数组返回错误