text: import argparse
  import glob
  import multiprocessing as mp
  import os
  import time
  import cv2
  import tqdm
  
  from detectron2.config import get_cfg
  from detectron2.data.detection_utils import read_image
  from detectron2.utils.logger import setup_logger
  from detectron2.utils.visualizer import ColorMode
  
  from predictor import VisualizationDemo
  
  import sys
  sys.path.append("/home/an1/detectron2/projects/PANet/")
  
  from panet import add_panet_config
  from dataset import dota
  
  
  # constants
  WINDOW_NAME = "Inference"
  
  
  def setup_cfg(args):
      # load config from file and command-line arguments
      cfg = get_cfg()
      cfg.merge_from_file(args.config_file)
      cfg.merge_from_list(args.opts)
      # Set score_threshold for builtin models
      cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = args.confidence_threshold
      cfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = args.confidence_threshold
      cfg.freeze()
      return cfg
  
  
  def get_parser():
      parser = argparse.ArgumentParser(description="Detectron2 demo for builtin models")
      parser.add_argument(
          "--config-file",
          default="configs/quick_schedules/mask_rcnn_R_50_FPN_inference_acc_test.yaml",
          metavar="FILE",
          help="path to config file",
      )
      parser.add_argument("--webcam", action="store_true", help="Take inputs from webcam.")
      parser.add_argument("--video-input", help="Path to video file.")
      parser.add_argument("--input", help="Directory of images")
      parser.add_argument(
          "--output",
          help="A file or directory to save output visualizations. "
          "If not given, will show output in an OpenCV window.",
      )
  
      parser.add_argument(
          "--confidence-threshold",
          type=float,
          default=0.5,
          help="Minimum score for instance predictions to be shown",
      )
      parser.add_argument(
          "--opts",
          help="Modify config options using the command-line 'KEY VALUE' pairs",
          default=[],
          nargs=argparse.REMAINDER,
      )
      return parser
  
  
  if __name__ == "__main__":
      mp.set_start_method("spawn", force=True)
      args = get_parser().parse_args()
      setup_logger(name="fvcore")
      logger = setup_logger()
      logger.info("Arguments: " + str(args))
  
      cfg = setup_cfg(args)
  
      demo = VisualizationDemo(cfg, ColorMode.SEGMENTATION)
  
      if args.input:
          
          images = [os.path.join(args.input, im) for im in os.listdir(args.input)]
          
          for im in tqdm.tqdm(images, disable=not args.output):
              # use PIL, to be consistent with evaluation
              name = os.path.basename(im)
              img = read_image(im, format="BGR")
              start_time = time.time()
              predictions, visualized_output = demo.run_on_image(img)
  
              if args.output:
                  if os.path.isdir(args.output):
                      assert os.path.isdir(args.output), args.output
                      out_filename = os.path.join(args.output, os.path.basename(name))
                  else:
                      assert len(args.input) == 1, "Please specify a directory with args.output"
                      out_filename = args.output
                  visualized_output.save(out_filename)
              else:
                  cv2.namedWindow(WINDOW_NAME, cv2.WINDOW_NORMAL)
                  cv2.imshow(WINDOW_NAME, visualized_output.get_image()[:, :, ::-1])
                  if cv2.waitKey(0) == 27:
                      break  # esc to quit
  