api.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import os
  2. os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
  3. import torch
  4. from annotator.oneformer.detectron2.config import get_cfg
  5. from annotator.oneformer.detectron2.projects.deeplab import add_deeplab_config
  6. from annotator.oneformer.detectron2.data import MetadataCatalog
  7. from annotator.oneformer.oneformer import (
  8. add_oneformer_config,
  9. add_common_config,
  10. add_swin_config,
  11. add_dinat_config,
  12. )
  13. from annotator.oneformer.oneformer.demo.defaults import DefaultPredictor
  14. from annotator.oneformer.oneformer.demo.visualizer import Visualizer, ColorMode
  15. def make_detectron2_model(config_path, ckpt_path):
  16. cfg = get_cfg()
  17. add_deeplab_config(cfg)
  18. add_common_config(cfg)
  19. add_swin_config(cfg)
  20. add_oneformer_config(cfg)
  21. add_dinat_config(cfg)
  22. cfg.merge_from_file(config_path)
  23. cfg.MODEL.WEIGHTS = ckpt_path
  24. cfg.freeze()
  25. metadata = MetadataCatalog.get(cfg.DATASETS.TEST_PANOPTIC[0] if len(cfg.DATASETS.TEST_PANOPTIC) else "__unused")
  26. return DefaultPredictor(cfg), metadata
  27. def semantic_run(img, predictor, metadata):
  28. predictions = predictor(img[:, :, ::-1], "semantic") # Predictor of OneFormer must use BGR image !!!
  29. visualizer_map = Visualizer(img, is_img=False, metadata=metadata, instance_mode=ColorMode.IMAGE)
  30. out_map = visualizer_map.draw_sem_seg(predictions["sem_seg"].argmax(dim=0).cpu(), alpha=1, is_text=False).get_image()
  31. return out_map