andre-costa/segment-anything
0
1import os2import argparse3import logging4import logging.config5import json6 7logging.config.dictConfig({8 "version": 1,9 "formatters": {10 "standard": {11 "format": "[%(asctime)s] [%(levelname)s] [%(name)s::%(funcName)s::%(lineno)d] %(message)s"12 }13 },14 "handlers": {15 "console": {16 "class": "logging.StreamHandler",17 "level": os.getenv('LOG_LEVEL', 'INFO'),18 "stream": "ext://sys.stdout",19 "formatter": "standard"20 }21 },22 "root": {23 "level": os.getenv('LOG_LEVEL', 'INFO'),24 "handlers": [25 "console"26 ],27 "propagate": True28 }29})30 31from label_studio_ml.api import init_app32from model import SamMLBackend33 34_DEFAULT_CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'config.json')35 36 37def get_kwargs_from_config(config_path=_DEFAULT_CONFIG_PATH):38 if not os.path.exists(config_path):39 return dict()40 with open(config_path) as f:41 config = json.load(f)42 assert isinstance(config, dict)43 return config44 45 46if __name__ == "__main__":47 parser = argparse.ArgumentParser(description='Label studio')48 parser.add_argument(49 '-p', '--port', dest='port', type=int, default=9090,50 help='Server port')51 parser.add_argument(52 '--host', dest='host', type=str, default='0.0.0.0',53 help='Server host')54 parser.add_argument(55 '--kwargs', '--with', dest='kwargs', metavar='KEY=VAL', nargs='+', type=lambda kv: kv.split('='),56 help='Additional LabelStudioMLBase model initialization kwargs')57 parser.add_argument(58 '-d', '--debug', dest='debug', action='store_true',59 help='Switch debug mode')60 parser.add_argument(61 '--log-level', dest='log_level', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'], default=None,62 help='Logging level')63 parser.add_argument(64 '--model-dir', dest='model_dir', default=os.path.dirname(__file__),65 help='Directory where models are stored (relative to the project directory)')66 parser.add_argument(67 '--check', dest='check', action='store_true',68 help='Validate model instance before launching server')69 70 args = parser.parse_args()71 72 # setup logging level73 if args.log_level:74 logging.root.setLevel(args.log_level)75 76 def isfloat(value):77 try:78 float(value)79 return True80 except ValueError:81 return False82 83 def parse_kwargs():84 param = dict()85 for k, v in args.kwargs:86 if v.isdigit():87 param[k] = int(v)88 elif v == 'True' or v == 'true':89 param[k] = True90 elif v == 'False' or v == 'False':91 param[k] = False92 elif isfloat(v):93 param[k] = float(v)94 else:95 param[k] = v96 return param97 98 kwargs = get_kwargs_from_config()99 100 if args.kwargs:101 kwargs.update(parse_kwargs())102 103 if args.check:104 print('Check "' + SamMLBackend.__name__ + '" instance creation..')105 model = SamMLBackend(**kwargs)106 107 app = init_app(model_class=SamMLBackend)108 109 app.run(host=args.host, port=args.port, debug=args.debug)110 111else:112 # for uWSGI use113 app = init_app(model_class=SamMLBackend)114 