test_databases.py 8.57 KB
Newer Older
Manuel Günther's avatar
Manuel Günther committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# @author: Manuel Guenther <Manuel.Guenther@idiap.ch>
# @date: Thu May 24 10:41:42 CEST 2012
#
# Copyright (C) 2011-2012 Idiap Research Institute, Martigny, Switzerland
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


import os
from nose.plugins.skip import SkipTest

import bob.bio.base
25
from bob.bio.base.test.utils import db_available
Manuel Günther's avatar
Manuel Günther committed
26
27


28
29
def _check_database(database, groups=('dev',), protocol=None, training_depends=False, models_depend=False):
    assert isinstance(database, bob.bio.db.BioDatabase)
30

31
32
33
    # load the directories
    if 'HOME' in os.environ:
        database.replace_directories(os.path.join(os.environ['HOME'], '.bob_bio_databases.txt'))
Manuel Günther's avatar
Manuel Günther committed
34

35
36
37
38
    if protocol: database.protocol = protocol
    assert len(database.all_files()) > 0
    assert len(database.training_files('train_extractor')) > 0
    assert len(database.arrange_by_client(database.training_files('train_enroller'))) > 0
Manuel Günther's avatar
Manuel Günther committed
39

40
41
42
43
44
45
    for group in groups:
        model_ids = database.model_ids(group)
        assert len(model_ids) > 0
        assert database.client_id_from_model_id(model_ids[0]) is not None
        assert len(database.enroll_files(model_ids[0], group)) > 0
        assert len(database.probe_files(model_ids[0], group)) > 0
Manuel Günther's avatar
Manuel Günther committed
46

47
48
    assert database.training_depends_on_protocol == training_depends
    assert database.models_depend_on_protocol == models_depend
Manuel Günther's avatar
Manuel Günther committed
49

50
51
52
53
54
55
56
57
58
59

def _check_database_zt(database, groups=('dev', 'eval'), protocol=None, training_depends=False, models_depend=False):
    _check_database(database, groups, protocol, training_depends, models_depend)
    assert isinstance(database, bob.bio.db.ZTBioDatabase)
    for group in groups:
        t_model_ids = database.t_model_ids(group)
        assert len(t_model_ids) > 0
        assert database.client_id_from_model_id(t_model_ids[0]) is not None
        assert len(database.t_enroll_files(t_model_ids[0], group)) > 0
        assert len(database.z_probe_files(group)) > 0
Manuel Günther's avatar
Manuel Günther committed
60
61
62


def _check_annotations(database):
63
64
65
66
67
68
    for file in database.all_files():
        annotations = database.annotations(file)
        if annotations is not None:
            assert isinstance(annotations, dict)
            assert 'reye' in annotations
            assert 'leye' in annotations
Manuel Günther's avatar
Manuel Günther committed
69
70


71
@db_available('arface')
Manuel Günther's avatar
Manuel Günther committed
72
def test_arface():
73
74
75
76
77
78
79
    database = bob.bio.base.load_resource('arface', 'database', preferred_package='bob.bio.face')
    try:
        _check_database(database, groups=('dev', 'eval'))
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
80
81
82


def test_atnt():
83
    _check_database(bob.bio.base.load_resource('atnt', 'database', preferred_package='bob.bio.face'))
Manuel Günther's avatar
Manuel Günther committed
84
85


86
@db_available('banca')
Manuel Günther's avatar
Manuel Günther committed
87
def test_banca():
88
89
90
91
92
93
94
    database = bob.bio.base.load_resource('banca', 'database', preferred_package='bob.bio.face')
    try:
        _check_database_zt(database)
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not be queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
95
96


97
@db_available('caspeal')
Manuel Günther's avatar
Manuel Günther committed
98
def test_caspeal():
99
100
101
102
103
104
105
106
    database = bob.bio.base.load_resource('caspeal', 'database', preferred_package='bob.bio.face')
    try:
        _check_database(database)
        _check_database(database, protocol='aging')
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
107
108


109
@db_available('frgc')
Manuel Günther's avatar
Manuel Günther committed
110
def test_frgc():
111
112
113
114
115
116
117
118
119
    import xml.sax
    database = bob.bio.base.load_resource('frgc', 'database', preferred_package='bob.bio.face')
    try:
        _check_database(database, models_depend=True)
        _check_database(database, protocol='2.0.2', models_depend=True)
        _check_annotations(database)
    except xml.sax.SAXException as e:
        raise SkipTest(
            "The database could not be opened, probably the original directory is wrong. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
120
121


122
@db_available('gbu')
Manuel Günther's avatar
Manuel Günther committed
123
def test_gbu():
124
125
126
127
128
129
130
131
132
    database = bob.bio.base.load_resource('gbu', 'database', preferred_package='bob.bio.face')
    try:
        _check_database(database, models_depend=True)
        _check_database(database, protocol='Bad', models_depend=True)
        _check_database(database, protocol = 'Ugly', models_depend=True)
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
133
134


135
@db_available('lfw')
Manuel Günther's avatar
Manuel Günther committed
136
def test_lfw():
137
138
139
140
141
142
143
144
145
146
    database = bob.bio.base.load_resource('lfw-restricted', 'database', preferred_package='bob.bio.face')
    try:
        _check_database(database, training_depends=True, models_depend=True)
        _check_database(database, groups=('dev', 'eval'), protocol='fold1', training_depends=True, models_depend=True)
        _check_database(bob.bio.base.load_resource('lfw-unrestricted', 'database', preferred_package='bob.bio.face'),
                        training_depends=True, models_depend=True)
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
147
148


149
@db_available('mobio')
Manuel Günther's avatar
Manuel Günther committed
150
def test_mobio():
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
    database = bob.bio.base.load_resource('mobio-image', 'database', preferred_package='bob.bio.face')
    try:
        _check_database_zt(database, models_depend=True)
        _check_database_zt(database, protocol='female', models_depend=True)
        _check_database_zt(bob.bio.base.load_resource('mobio-male', 'database', preferred_package='bob.bio.face'),
                           models_depend=True)
        _check_database_zt(bob.bio.base.load_resource('mobio-female', 'database', preferred_package='bob.bio.face'),
                           models_depend=True)
    except IOError as e:
        raise SkipTest(
            "The database could not be queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)

    try:
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
168
169


170
@db_available('multipie')
Manuel Günther's avatar
Manuel Günther committed
171
def test_multipie():
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
    database = bob.bio.base.load_resource('multipie', 'database', preferred_package='bob.bio.face')
    try:
        _check_database_zt(database, training_depends=True)
        _check_database_zt(bob.bio.base.load_resource('multipie-pose', 'database', preferred_package='bob.bio.face'),
                           training_depends=True)
    except IOError as e:
        raise SkipTest(
            "The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
    except ValueError as e:
        raise SkipTest(
            "The database could not queried; probably the protocol is missing inside the db.sql3 file. Here is the error: '%s'" % e)

    try:
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
189
190


191
@db_available('scface')
Manuel Günther's avatar
Manuel Günther committed
192
def test_scface():
193
194
195
196
197
198
199
    database = bob.bio.base.load_resource('scface', 'database', preferred_package='bob.bio.face')
    try:
        _check_database_zt(database)
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not be queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
Manuel Günther's avatar
Manuel Günther committed
200
201


202
@db_available('xm2vts')
Manuel Günther's avatar
Manuel Günther committed
203
def test_xm2vts():
204
205
206
207
208
209
210
211
    database = bob.bio.base.load_resource('xm2vts', 'database', preferred_package='bob.bio.face')
    try:
        _check_database(database, groups=('dev', 'eval'))
        _check_database(database, groups=('dev', 'eval'), protocol='darkened-lp1')
        _check_annotations(database)
    except IOError as e:
        raise SkipTest(
            "The database could not be queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)