123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- import argparse
- import codecs
- import logging
- import os
- import os.path as osp
- import sys
- import yaml
- from qtpy import QtCore
- from qtpy import QtWidgets
- from labelme import __appname__
- from labelme import __version__
- from labelme.app import MainWindow
- from labelme.config import get_config
- from labelme.logger import logger
- from labelme.utils import newIcon
- def main():
- parser = argparse.ArgumentParser()
- parser.add_argument("--version", "-V", action="store_true", help="show version")
- parser.add_argument("--reset-config", action="store_true", help="reset qt config")
- parser.add_argument(
- "--logger-level",
- default="debug",
- choices=["debug", "info", "warning", "fatal", "error"],
- help="logger level",
- )
- parser.add_argument("filename", nargs="?", help="image or label filename")
- parser.add_argument(
- "--output",
- "-O",
- "-o",
- help="output file or directory (if it ends with .json it is "
- "recognized as file, else as directory)",
- )
- default_config_file = os.path.join(os.path.expanduser("~"), ".labelmerc")
- parser.add_argument(
- "--config",
- dest="config",
- help="config file or yaml-format string (default: {})".format(
- default_config_file
- ),
- default=default_config_file,
- )
- # config for the gui
- parser.add_argument(
- "--nodata",
- dest="store_data",
- action="store_false",
- help="stop storing image data to JSON file",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--autosave",
- dest="auto_save",
- action="store_true",
- help="auto save",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--nosortlabels",
- dest="sort_labels",
- action="store_false",
- help="stop sorting labels",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--flags",
- help="comma separated list of flags OR file containing flags",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--labelflags",
- dest="label_flags",
- help=r"yaml string of label specific flags OR file containing json "
- r"string of label specific flags (ex. {person-\d+: [male, tall], "
- r"dog-\d+: [black, brown, white], .*: [occluded]})", # NOQA
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--labels",
- help="comma separated list of labels OR file containing labels",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--validatelabel",
- dest="validate_label",
- choices=["exact"],
- help="label validation types",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--keep-prev",
- action="store_true",
- help="keep annotation of previous frame",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--epsilon",
- type=float,
- help="epsilon to find nearest vertex on canvas",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--model",
- type=str,
- help="model weight for barcode detection",
- default=argparse.SUPPRESS,
- )
- parser.add_argument(
- "--segmentation_model",
- type=str,
- help="Path to the segmentation model"
- )
- args = parser.parse_args()
- if args.version:
- print("{0} {1}".format(__appname__, __version__))
- sys.exit(0)
- logger.setLevel(getattr(logging, args.logger_level.upper()))
- if hasattr(args, "flags"):
- if os.path.isfile(args.flags):
- with codecs.open(args.flags, "r", encoding="utf-8") as f:
- args.flags = [line.strip() for line in f if line.strip()]
- else:
- args.flags = [line for line in args.flags.split(",") if line]
- if hasattr(args, "labels"):
- if os.path.isfile(args.labels):
- with codecs.open(args.labels, "r", encoding="utf-8") as f:
- args.labels = [line.strip() for line in f if line.strip()]
- else:
- args.labels = [line for line in args.labels.split(",") if line]
- if hasattr(args, "label_flags"):
- if os.path.isfile(args.label_flags):
- with codecs.open(args.label_flags, "r", encoding="utf-8") as f:
- args.label_flags = yaml.safe_load(f)
- else:
- args.label_flags = yaml.safe_load(args.label_flags)
- config_from_args = args.__dict__
- config_from_args.pop("version")
- reset_config = config_from_args.pop("reset_config")
- filename = config_from_args.pop("filename")
- output = config_from_args.pop("output")
- config_file_or_yaml = config_from_args.pop("config")
- config = get_config(config_file_or_yaml, config_from_args)
- config["model"]=config_from_args.pop("model")
- config["segmentation_model"]=config_from_args.pop("segmentation_model")
- if not config["labels"] and config["validate_label"]:
- logger.error(
- "--labels must be specified with --validatelabel or "
- "validate_label: true in the config file "
- "(ex. ~/.labelmerc)."
- )
- sys.exit(1)
- output_file = None
- output_dir = None
- if output is not None:
- if output.endswith(".json"):
- output_file = output
- else:
- output_dir = output
- translator = QtCore.QTranslator()
- translator.load(
- QtCore.QLocale.system().name(),
- osp.dirname(osp.abspath(__file__)) + "/translate",
- )
- app = QtWidgets.QApplication(sys.argv)
- app.setApplicationName(__appname__)
- app.setWindowIcon(newIcon("icon"))
- app.installTranslator(translator)
- win = MainWindow(
- config=config,
- filename=filename,
- output_file=output_file,
- output_dir=output_dir,
- )
- if reset_config:
- logger.info("Resetting Qt config: %s" % win.settings.fileName())
- win.settings.clear()
- sys.exit(0)
- win.show()
- win.raise_()
- sys.exit(app.exec_())
- # this main block is required to generate executable by pyinstaller
- if __name__ == "__main__":
- main()
|