provide instructions for bob.pad.base databases authored by Amir MOHAMMADI's avatar Amir MOHAMMADI
......@@ -8,8 +8,97 @@ Learn information about the database:
- in which bob.bio or bob.pad packages it was used
- How many protocols does it have
# Create a create function
Create a script that reproduces the list files.
# Create the csv files
We will use a script to automatically convert most databases.
If you want more detailed csv files for your database, you have to create them by your own custom code.
```sh
# create a bob 8 environment where databases where working then.
$ conda create -n bob8_py36 \
-c https://www.idiap.ch/software/bob/conda \
-c defaults \
-c https://www.idiap.ch/software/bob/conda/label/archive \
python=3.6 bob=8 bob.pad.face bob.db.replaymobile
# you would install the relevant bob.bio, bob.pad, and bob.db package
# now, save the script provided below in a `convert_pad_database.py` file and run:
$ python convert_pad_database.py bob.pad.face.config.replay_mobile --output ~/temp/bob_data/datasets/pad-face-replay-mobile -vvv
# untar and verify the just created tarfile
# upload it to our bob servers using bdt (to be developed https://gitlab.idiap.ch/bob/bob.devtools/-/issues/64)
```
```python
import os
import click
from bob.extension.scripts.click_helper import ConfigCommand
from bob.extension.scripts.click_helper import ResourceOption
from bob.extension.scripts.click_helper import log_parameters
from bob.extension.scripts.click_helper import verbosity_option
@click.command(cls=ConfigCommand, entry_point_group="bob.pad.config")
@click.option("--database", cls=ResourceOption, entry_point_group="bob.pad.database")
@click.option("--output", cls=ResourceOption)
@click.option("--protocol", "protocols", cls=ResourceOption, multiple=True)
@click.option(
"--group",
"groups",
cls=ResourceOption,
multiple=True,
default=["train", "dev", "eval"],
)
@verbosity_option(cls=ResourceOption)
def convert_database(database, output, protocols, groups, verbose, **kwargs):
import csv
import tarfile
import logging
logger = logging.getLogger(__name__)
log_parameters(logger)
if not protocols:
try:
protocols = [p.name for p in database.db.protocols()]
except Exception as e:
click.echo(f"WARNING: failed to retrieve the list of protocols from the lower level db. The error was: {e}")
protocols = [database.protocol]
os.makedirs(output, exist_ok=True)
for proto in protocols:
click.echo(f"Creating list files for protocol: {proto}")
database.protocol = proto
for grp in groups:
all_files = database.all_files(groups=grp, flat=True)
path = os.path.join(output, proto, grp + ".csv")
os.makedirs(os.path.dirname(path), exist_ok=True)
with open(path, "w", newline="") as f:
fieldnames = ["filename", "client_id", "attack_type"]
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for padfile in all_files:
writer.writerow(
{
"filename": padfile.make_path(
"", database.original_extension
),
"client_id": padfile.client_id,
"attack_type": padfile.attack_type,
}
)
# create the final tarball
path = f"{output}.tar.gz"
with tarfile.open(path, "w:gz") as tar:
tar.add(output, arcname=".")
click.echo(f"Created {path}")
if __name__ == "__main__":
convert_database()
```
# Documentation
Document the protocols, data format, metadata
\ No newline at end of file