diff --git a/bob/bio/base/script/annotate.py b/bob/bio/base/script/annotate.py index 400440b3679eff7c3dcb560f80bfefdb27be7536..d18367b60b0af0b986f03e62a5b6eb62dfba3683 100644 --- a/bob/bio/base/script/annotate.py +++ b/bob/bio/base/script/annotate.py @@ -2,7 +2,6 @@ """ import logging import click -import json import functools from bob.extension.scripts.click_helper import ( verbosity_option, @@ -13,10 +12,6 @@ from bob.extension.scripts.click_helper import ( from bob.pipelines import wrap, ToDaskBag logger = logging.getLogger(__name__) -def save_annotations_to_json(data, path): - with open(path, "w") as f: - json.dump(data, f) - def annotate_common_options(func): @click.option( "--annotator", @@ -96,15 +91,14 @@ def annotate( log_parameters(logger) # Allows passing of Sample objects as parameters - annotator = wrap(["sample"], annotator) + annotator = wrap(["annotated_sample"], annotator) # Will save the annotations in the `data` fields to a json file annotator = wrap( - bases=["checkpoint"], - estimator=annotator, - features_dir=output_dir, - save_func=save_annotations_to_json, - extension=".json", + bases=["checkpoint_annotations"], + annotator=annotator, + annotations_dir=output_dir, + force=force, ) # Allows reception of Dask Bags @@ -159,6 +153,7 @@ You have to define ``samples`` in a python file (config.py) as in examples. ) @click.option( "--samples", + entry_point_group="bob.bio.config", required=True, cls=ResourceOption, help="A list of all samples that you want to annotate.", @@ -166,7 +161,7 @@ You have to define ``samples`` in a python file (config.py) as in examples. @annotate_common_options @verbosity_option(cls=ResourceOption) def annotate_samples( - samples, make_path, annotator, output_dir, force, dask_client, **kwargs + samples, annotator, output_dir, force, dask_client, **kwargs ): """Annotates a list of samples. @@ -176,15 +171,14 @@ def annotate_samples( log_parameters(logger, ignore=("samples",)) # Allows passing of Sample objects as parameters - annotator = wrap(["sample"], annotator) + annotator = wrap(["annotated_sample"], annotator) # Will save the annotations in the `data` fields to a json file annotator = wrap( - bases=["checkpoint"], - estimator=annotator, - features_dir=output_dir, - save_func=save_annotations_to_json, - extension=".json", + bases=["checkpoint_annotations"], + annotator=annotator, + annotations_dir=output_dir, + force=force, ) # Allows reception of Dask Bags diff --git a/bob/bio/base/test/dummy/samples_list.py b/bob/bio/base/test/dummy/samples_list.py new file mode 100644 index 0000000000000000000000000000000000000000..7563c5d1d7f764682413798bdeeb69b11a68ddeb --- /dev/null +++ b/bob/bio/base/test/dummy/samples_list.py @@ -0,0 +1,3 @@ +from bob.bio.base.test.dummy.database import database + +samples = database.background_model_samples() \ No newline at end of file diff --git a/bob/bio/base/test/test_annotators.py b/bob/bio/base/test/test_annotators.py index 93abaf404e887aca4ea43652dd28260b42488508..5e5a3f335a0d1220aeb5c2b202c80365844651b8 100644 --- a/bob/bio/base/test/test_annotators.py +++ b/bob/bio/base/test/test_annotators.py @@ -2,7 +2,7 @@ import tempfile import os import shutil from click.testing import CliRunner -from bob.bio.base.script.annotate import annotate +from bob.bio.base.script.annotate import annotate, annotate_samples from bob.bio.base.annotator import Callable, FailSafe from bob.db.base import read_annotation_file @@ -33,6 +33,31 @@ def test_annotate(): finally: shutil.rmtree(tmp_dir) +def test_annotate_samples(): + + try: + tmp_dir = tempfile.mkdtemp(prefix="bobtest_") + runner = CliRunner() + result = runner.invoke(annotate_samples, args=( + '--samples','dummy_samples', '-a', 'dummy', '-o', tmp_dir)) + assertion_error_message = ( + 'Command exited with this output: `{}\' \n' + 'If the output is empty, you can run this script locally to see ' + 'what is wrong:\n' + 'bin/bob bio annotate-samples -vvv --force --samples dummy -a dummy -o /tmp/temp_annotations' + ''.format(result.output)) + assert result.exit_code == 0, assertion_error_message + + # test if annotations exist + for dirpath, dirnames, filenames in os.walk(tmp_dir): + for filename in filenames: + path = os.path.join(dirpath, filename) + annot = read_annotation_file(path, 'json') + assert annot['topleft'] == [0, 0] + # size of atnt images + assert annot['bottomright'] == [112, 92] + finally: + shutil.rmtree(tmp_dir) def dummy_extra_key_annotator(data_batch, **kwargs): return [{'leye': 0, 'reye': 0, 'topleft': 0}] diff --git a/setup.py b/setup.py index 0aa9519ca73dcc34b106db26d568accc708b6fc1..fe6eaffc42138631e3607d4fb56967a4799ff8b4 100644 --- a/setup.py +++ b/setup.py @@ -76,6 +76,7 @@ setup( 'bob.bio.config': [ 'dummy = bob.bio.base.test.dummy.config', # for test purposes only 'dummy2 = bob.bio.base.test.dummy.config2', # for test purposes only + 'dummy_samples = bob.bio.base.test.dummy.samples_list', # for test purposes only ], 'bob.bio.database': [