def dataset_iterator(self, video_dirs):
        video_num = len(video_dirs)
        iter_size = 150
        iter_num = int(np.ceil(video_num / float(iter_size)))
        for iter_ in range(iter_num):
            iter_start = iter_ * iter_size
            iter_videos = video_dirs[iter_start:iter_start + iter_size]

            data_iter = DataIter()
            num_videos = len(iter_videos)
            instance_videos = []
            for index in range(num_videos):
                print('Processing {}/{}...'.format(iter_start + index,
                                                   video_num))
                video_dir = iter_videos[index]
                trackids = self._get_unique_trackids(video_dir)

                for trackid in trackids:
                    instance_image_paths = glob.glob(video_dir + '/*' +
                                                     trackid + '.crop.x.jpg')

                    # sort image paths by frame number
                    instance_image_paths = sort_nicely(instance_image_paths)

                    # get image absolute path
                    instance_image_paths = [
                        os.path.abspath(p) for p in instance_image_paths
                    ]
                    instance_videos.append(instance_image_paths)
            data_iter.num_videos = len(instance_videos)
            data_iter.instance_videos = instance_videos
            yield data_iter
  def dataset_iterator(self, video_dirs):
    video_num = len(video_dirs)
    iter_size = 150
    iter_num = int(np.ceil(video_num / float(iter_size)))
    for iter_ in range(iter_num):
      iter_start = iter_ * iter_size
      iter_videos = video_dirs[iter_start: iter_start + iter_size]

      data_iter = DataIter()
      num_videos = len(iter_videos)
      instance_videos = []
      for index in range(num_videos):
        print('Processing {}/{}...'.format(iter_start + index, video_num))
        video_dir = iter_videos[index]
        trackids = self._get_unique_trackids(video_dir)

        for trackid in trackids:
          instance_image_paths = glob.glob(video_dir + '/*' + trackid + '.crop.x.jpg')

          # sort image paths by frame number
          instance_image_paths = sort_nicely(instance_image_paths)

          # get image absolute path
          instance_image_paths = [os.path.abspath(p) for p in instance_image_paths]
          instance_videos.append(instance_image_paths)
      data_iter.num_videos = len(instance_videos)
      data_iter.instance_videos = instance_videos
      yield data_iter
Ejemplo n.º 3
0
def main(checkpoint, input_files):
    os.environ['CUDA_VISIBLE_DEVICES'] = auto_select_gpu()

    model_config, _, track_config = load_cfgs(checkpoint)
    track_config['log_level'] = 1
    track_config["is_video"] = False

    g = tf.Graph()
    with g.as_default():
        model = inference_wrapper.InferenceWrapper()
        restore_fn = model.build_graph_from_config(model_config, track_config,
                                                   checkpoint)
    g.finalize()

    if not osp.isdir(track_config['log_dir']):
        logging.info('Creating inference directory: %s',
                     track_config['log_dir'])
        mkdir_p(track_config['log_dir'])

    video_dirs = []
    for file_pattern in input_files.split(","):
        video_dirs.extend(glob(file_pattern))
    logging.info("Running tracking on %d videos matching %s", len(video_dirs),
                 input_files)

    gpu_options = tf.GPUOptions(allow_growth=True)
    sess_config = tf.ConfigProto(gpu_options=gpu_options)

    with tf.Session(graph=g, config=sess_config) as sess:
        restore_fn(sess)

        tracker = Tracker(model,
                          model_config=model_config,
                          track_config=track_config)

        for video_dir in video_dirs:
            if not osp.isdir(video_dir):
                logging.warning(
                    '{} is not a directory, skipping...'.format(video_dir))
                continue

            video_name = osp.basename(video_dir)
            video_log_dir = osp.join(track_config['log_dir'], video_name)
            mkdir_p(video_log_dir)

            filenames = sort_nicely(glob(video_dir + '/img/*.jpg'))
            first_line = open(video_dir + '/groundtruth_rect.txt').readline()
            bb = [int(v) for v in first_line.strip().split(',')]
            # Rectangle: [x,y,width,height]
            init_bb = Rectangle(bb[0] - 1, bb[1] - 1, bb[2],
                                bb[3])  # 0-index in python

            trajectory = tracker.track(sess, init_bb, filenames, video_log_dir)
            with open(osp.join(video_log_dir, 'track_rect.txt'), 'w') as f:
                for region in trajectory:
                    rect_str = '{},{},{},{}\n'.format(region.x + 1,
                                                      region.y + 1,
                                                      region.width,
                                                      region.height)
                    f.write(rect_str)
Ejemplo n.º 4
0
def main(checkpoint, input_files):
  os.environ['CUDA_VISIBLE_DEVICES'] = auto_select_gpu()

  model_config, _, track_config = load_cfgs(checkpoint)
  track_config['log_level'] = 1

  g = tf.Graph()
  with g.as_default():
    model = inference_wrapper.InferenceWrapper()
    restore_fn = model.build_graph_from_config(model_config, track_config, checkpoint)
  g.finalize()

  if not osp.isdir(track_config['log_dir']):
    logging.info('Creating inference directory: %s', track_config['log_dir'])
    mkdir_p(track_config['log_dir'])

  video_dirs = []
  for file_pattern in input_files.split(","):
    video_dirs.extend(glob(file_pattern))
  logging.info("Running tracking on %d videos matching %s", len(video_dirs), input_files)

  gpu_options = tf.GPUOptions(allow_growth=True)
  sess_config = tf.ConfigProto(gpu_options=gpu_options)

  with tf.Session(graph=g, config=sess_config) as sess:
    restore_fn(sess)

    tracker = Tracker(model, model_config=model_config, track_config=track_config)

    for video_dir in video_dirs:
      if not osp.isdir(video_dir):
        logging.warning('{} is not a directory, skipping...'.format(video_dir))
        continue

      video_name = osp.basename(video_dir)
      video_log_dir = osp.join(track_config['log_dir'], video_name)
      mkdir_p(video_log_dir)

      filenames = sort_nicely(glob(video_dir + '/img/*.jpg'))
      first_line = open(video_dir + '/groundtruth_rect.txt').readline()
      bb = [int(v) for v in first_line.strip().split(',')]
      init_bb = Rectangle(bb[0] - 1, bb[1] - 1, bb[2], bb[3])  # 0-index in python

      trajectory = tracker.track(sess, init_bb, filenames, video_log_dir)
      with open(osp.join(video_log_dir, 'track_rect.txt'), 'w') as f:
        for region in trajectory:
          rect_str = '{},{},{},{}\n'.format(region.x + 1, region.y + 1,
                                            region.width, region.height)
          f.write(rect_str)
Ejemplo n.º 5
0
    def dataset_iterator(self, video_dirs):
        anno_dir = 'data/GOT-10k'
        video_num = len(video_dirs)
        iter_size = 150
        iter_num = int(np.ceil(video_num / float(iter_size)))
        for iter_ in range(iter_num):
            iter_start = iter_ * iter_size
            iter_videos = video_dirs[iter_start:iter_start + iter_size]

            data_iter = DataIter()
            num_videos = len(iter_videos)
            instance_videos = []
            instance_ann = []
            for index in range(num_videos):
                print('Processing {}/{}...'.format(iter_start + index,
                                                   video_num))
                video_dir = iter_videos[index]

                subdirs = video_dir.split('/')
                ann_vid_dir = osp.join(anno_dir, subdirs[-2], subdirs[-1])
                with open(osp.join(ann_vid_dir, 'groundtruth.txt')) as f:
                    ann_content = f.readlines()

                dest = osp.join('../SiamFC-TensorFlow/data/got10k-Curation',
                                subdirs[-2], subdirs[-1])
                copyfile(osp.join(ann_vid_dir, ''))

                instance_image_paths = glob.glob(video_dir + '/*.crop.x.jpg')

                # sort image paths by frame number
                instance_image_paths = sort_nicely(instance_image_paths)

                assert len(instance_image_paths) == len(ann_content)

                try:
                    # get annotations
                    bboxs = []
                    for ann in ann_content:
                        ann = ann.strip()
                        bbox = ann.split(',')
                        bbox = [float(bb) for bb in bbox]  # [xmin, ymin, w, h]

                        w = bbox[2]
                        h = bbox[3]
                        context_amount = 0.5
                        size_z = 127
                        size_x = 255

                        wc_z = w + context_amount * (w + h)
                        hc_z = h + context_amount * (w + h)
                        s_z = np.sqrt(wc_z * hc_z)
                        scale_z = size_z / s_z

                        d_search = (size_x - size_z) / 2
                        pad = d_search / scale_z
                        s_x = s_z + 2 * pad

                        wn = w / s_x * size_x * 2
                        hn = h / s_x * size_x * 2

                        if wn < 1 or hn < 1:
                            ratio = wn / hn
                            if ratio > 1.:
                                bboxs.append([128., 128., 85., 85. / ratio])
                            else:
                                bboxs.append([128., 128., 85. * ratio, 85.])
                        else:
                            bboxs.append([128, 128, wn, hn])

                    # get image absolute path
                    #instance_image_paths = [os.path.abspath(p) for p in instance_image_paths]
                    instance_videos.append(instance_image_paths)
                    instance_ann.append(bboxs)
                except:
                    print('Skipped: ' + video_dir)
            data_iter.num_videos = len(instance_videos)
            data_iter.instance_videos = instance_videos
            data_iter.instance_ann = instance_ann
            yield data_iter
Ejemplo n.º 6
0
                        action="store_true")

    args, _ = parser.parse_known_args()

    first_line = open(args.image_filepath + '/groundtruth_rect.txt').readline()
    bbox = [int(v) for v in first_line.strip().split(',')]
    init_bbox = Rectangle(bbox[0], bbox[1], bbox[2],
                          bbox[3])  # 0-index in python

    tracker = SiameseTracking(args.config_filepath, args.separate_mode,
                              osp.join(args.models_dir, args.whole_model),
                              osp.join(args.models_dir, args.template_model),
                              osp.join(args.models_dir, args.search_model),
                              osp.join(args.models_dir, args.cross_model))

    filenames = sort_nicely(glob(args.image_filepath + '/img/*.jpg'))

    first_image = cv2.imread(filenames[0])
    template_image = tracker.update_template_image(first_image, init_bbox)

    if not args.headless:
        cv2.imshow('template_image', template_image.astype(np.uint8))

    for i, filename in enumerate(filenames):
        if i > 0:
            input_image = cv2.imread(filenames[i])
            dt1 = datetime.datetime.now()
            outputs = tracker.inference(template_image, input_image)
            dt2 = datetime.datetime.now()
            print("tracking du: {}".format(dt2.timestamp() - dt1.timestamp()))
Ejemplo n.º 7
0
    #print(sess.run(tf.report_uninitialized_variables()))
    

    av1 = tf.all_variables()
    tracker = Tracker(model, model_config=model_config, track_config=track_config)

    for video_dir in video_dirs:
      if not osp.isdir(video_dir):
        logging.warning('{} is not a directory, skipping...'.format(video_dir))
        continue

      video_name = osp.basename(video_dir)
      video_log_dir = "tmp"
      mkdir_p(video_log_dir)

      filenames = sort_nicely(glob(video_dir + '/img/*.jpg'))
      first_line = open(video_dir + '/groundtruth_rect.txt').readline()
      bb = [int(v) for v in first_line.strip().replace(' ', ',').replace('\t', ',').split(',')]
      init_bb = Rectangle(bb[0] - 1, bb[1] - 1, bb[2], bb[3])  # 0-index in python
      
      print("######{0},{1}".format(video_dir, len(filenames)))
# =============================================================================
#       for i in range(10):
#           print ("fixed classid: {}".format(i))
#           trajectory = tracker.track(sess, init_bb, filenames, video_log_dir, str(i))
#           with open(osp.join(video_log_dir, 'track_rect.txt'), 'w') as f:
#             for region in trajectory:
#               rect_str = '{},{},{},{}\n'.format(region.x + 1, region.y + 1,
#                                                 region.width, region.height)
#               f.write(rect_str)
#       
Ejemplo n.º 8
0
def main(checkpoint, input_files):
    os.environ['CUDA_VISIBLE_DEVICES'] = auto_select_gpu()

    model_config, _, track_config = load_cfgs(checkpoint)
    track_config['log_level'] = 1

    g = tf.Graph()
    with g.as_default():
        model = inference_wrapper.InferenceWrapper()
        restore_fn = model.build_graph_from_config(model_config, track_config,
                                                   checkpoint)
    g.finalize()

    if not osp.isdir(track_config['log_dir']):
        logging.info('Creating inference directory: %s',
                     track_config['log_dir'])
        mkdir_p(track_config['log_dir'])

    video_dirs = []
    for file_pattern in input_files.split(","):
        video_dirs.extend(glob(file_pattern))
    logging.info("Running tracking on %d videos matching %s", len(video_dirs),
                 input_files)

    gpu_options = tf.GPUOptions(allow_growth=True)
    sess_config = tf.ConfigProto(gpu_options=gpu_options)

    with tf.Session(graph=g, config=sess_config) as sess:
        restore_fn(sess)

        tracker = Tracker(model,
                          model_config=model_config,
                          track_config=track_config)

        for video_dir in video_dirs:
            if not osp.isdir(video_dir):
                logging.warning(
                    '{} is not a directory, skipping...'.format(video_dir))
                continue

            video_name = osp.basename(video_dir)
            video_log_dir = osp.join(track_config['log_dir'], video_name)
            mkdir_p(video_log_dir)

            filenames = sort_nicely(
                glob(video_dir + '/img/*.jpg') +
                glob(video_dir + '/img/*.png'))
            first_line = open(video_dir + '/groundtruth_rect.txt').readline()
            bb = [int(v) for v in first_line.strip().split(',')]
            init_bb = Rectangle(bb[0] - 1, bb[1] - 1, bb[2],
                                bb[3])  # 0-index in python

            trajectory = tracker.track(sess, init_bb, filenames, video_log_dir)
            with open(osp.join(video_log_dir, 'track_rect.txt'), 'w') as f:
                for region in trajectory:
                    rect_str = '{},{},{},{}\n'.format(region.x + 1,
                                                      region.y + 1,
                                                      region.width,
                                                      region.height)
                    f.write(rect_str)

            with open(osp.join(video_log_dir, 'bboxes.json'), 'r') as f:
                data = json.load(f)

            final_output = {}
            for i, fname in enumerate(data.keys()):
                img = np.array(Image.open(fname).convert('RGB'))
                img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
                #print(img,img.shape)
                bboxes = data[fname]
                bboxes = list(
                    map(
                        lambda x: list(
                            map(lambda y: float(y),
                                x.strip().split(','))), bboxes))
                arr = []
                for x, y, w, h in bboxes:
                    ymin, xmin, ymax, xmax = int(y), int(x), int(y +
                                                                 h), int(x + w)
                    img = cv2.rectangle(img, (xmin, ymin), (xmax, ymax),
                                        (0, 255, 0, 255), 2)
                    arr.append([ymin, xmin, ymax, xmax])
                final_output[fname] = arr
                name = osp.basename(fname)
                name = osp.splitext(name)[0]

                W, H, _ = img.shape
                cv2.imshow("Pic", cv2.resize(img, (W // 2, H // 2)))
                cv2.waitKey(0)

                out_folder = osp.join(video_log_dir, "Outputs")
                mkdir_p(out_folder)
                cv2.imwrite(osp.join(out_folder, f"{name}_bbox.png"), img)

            with open(osp.join(out_folder, "output.json"), "w") as f:
                json.dump(final_output, f, indent=4)

            cv2.destroyAllWindows()