Source code for kwcoco.cli.coco_conform
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ubelt as ub
import scriptconfig as scfg
[docs]class CocoConformCLI:
[docs] class CLIConfig(scfg.Config):
"""
Make the COCO file conform to the spec.
Populates inferable information such as image size, annotation area, etc.
"""
[docs] epilog = """
Example Usage:
kwcoco conform --help
kwcoco conform --src=special:shapes8 --dst conformed.json
"""
[docs] default = {
'src': scfg.Value(None, help=(
'Path to the coco dataset'), position=1),
'ensure_imgsize': scfg.Value(True, help=ub.paragraph(
'''
ensure each image has height and width attributes
''')),
'pycocotools_info': scfg.Value(True, help=ub.paragraph(
'''
ensure information needed for pycocotools
''')),
'legacy': scfg.Value(False, help='if True tries to convert to the '
'original ms-coco format'),
'workers': scfg.Value(
8, help='number of background workers for bigger checks'),
'dst': scfg.Value(None, help=(
'Save the modified dataset to a new file')),
}
@classmethod
[docs] def main(cls, cmdline=True, **kw):
"""
Example:
>>> # xdoctest: +SKIP
>>> kw = {'src': 'special:shapes8'}
>>> cmdline = False
>>> cls = CocoConformCLI
>>> cls.main(cmdline, **kw)
"""
import kwcoco
config = cls.CLIConfig(kw, cmdline=cmdline)
print('config = {}'.format(ub.repr2(dict(config), nl=1)))
if config['src'] is None:
raise Exception('must specify source: {}'.format(config['src']))
if config['dst'] is None:
raise Exception('must specify dest: {}'.format(config['dst']))
dset = kwcoco.CocoDataset.coerce(config['src'])
config_ = ub.dict_diff(config, {'src', 'dst'})
dset.conform(**config_)
dset.fpath = config['dst']
print('dump dset.fpath = {!r}'.format(dset.fpath))
dset.dump(dset.fpath, newlines=True)
if __name__ == '__main__':
_CLI.main()