Example #1
0
def main():
    # load net
    net_file = join(realpath(dirname(__file__)), 'SiamRPNBIG.model')
    net = SiamRPNBIG()
    net.load_state_dict(torch.load(net_file))
    net.eval().cuda()

    # warm up
    for i in range(10):
        net.temple(
            torch.autograd.Variable(torch.FloatTensor(1, 3, 127, 127)).cuda())
        net(torch.autograd.Variable(torch.FloatTensor(1, 3, 255, 255)).cuda())

    # start to track
    handle = vot.VOT("polygon")
    Polygon = handle.region()
    cx, cy, w, h = get_axis_aligned_bbox(Polygon)

    image_file = handle.frame()
    if not image_file:
        sys.exit(0)

    target_pos, target_sz = np.array([cx, cy]), np.array([w, h])
    im = cv2.imread(image_file)  # HxWxC
    state = SiamRPN_init(im, target_pos, target_sz, net)  # init tracker
    while True:
        image_file = handle.frame()
        if not image_file:
            break
        im = cv2.imread(image_file)  # HxWxC
        state = SiamRPN_track(state, im)  # track
        res = cxy_wh_2_rect(state['target_pos'], state['target_sz'])

        handle.report(Rectangle(res[0], res[1], res[2], res[3]))
Example #2
0
    def track(self, image):

        test_crop = utils.get_subwindow(image, self.pos, self.patch_size)
        z = np.multiply(test_crop - test_crop.mean(), self.cos_window[:, :,
                                                                      None])
        zf = np.fft.fft2(z, axes=(0, 1))
        k_test = utils.dense_gauss_kernel(self.feature_bandwidth_sigma,
                                          self.xf, self.x, zf, z)
        kf_test = np.fft.fft2(k_test, axes=(0, 1))
        response = np.real(np.fft.ifft2(np.multiply(self.alphaf, kf_test)))

        # Max position in response map
        v_centre, h_centre = np.unravel_index(response.argmax(),
                                              response.shape)
        vert_delta, horiz_delta = [
            v_centre - response.shape[0] / 2, h_centre - response.shape[1] / 2
        ]

        # Predicted position
        self.pos = [self.pos[0] + vert_delta, self.pos[1] + horiz_delta]
        self.bbox = [
            self.pos[1] - self.target_size[1] / 2,
            self.pos[0] - self.target_size[0] / 2, self.target_size[1],
            self.target_size[0]
        ]
        self._results.append(self.bbox)
        return Rectangle(self.pos[1] - self.target_size[1] / 2,
                         self.pos[0] - self.target_size[0] / 2,
                         self.target_size[1], self.target_size[0])
Example #3
0
 def track_vot2(self, imgtype):
     """Run tracker on a sequence."""
     
     handle = vot.VOT("rectangle", "rgbt")
     rect = list(handle.region())
     colorimage, thermalimage = handle.frame()
     startnum = 20        
     image_rgb = self._read_image(colorimage[startnum:len(colorimage)-2])
     image_ir = self._read_image(thermalimage[startnum:len(thermalimage)-2])
     if imgtype == 'rgb':
         self.initialize(image_ir, image_rgb, rect)
     elif imgtype == 'ir':
         self.initialize(image_rgb, image_ir, rect)
     while True:
         colorimage, thermalimage = handle.frame()
         if not colorimage:
             break
         image_rgb = self._read_image(colorimage[startnum:len(colorimage)-2])
         image_ir = self._read_image(thermalimage[startnum:len(thermalimage)-2])
         if imgtype == 'rgb':
             state = self.track(image_ir, image_rgb)
         elif imgtype == 'ir':
             state = self.track(image_rgb, image_ir)
         region = np.array(state).astype(int)
         handle.report(Rectangle(region[0], region[1], region[2], region[3]))
net.eval().cuda()

# warm up
for i in range(10):
    net.temple(torch.autograd.Variable(torch.FloatTensor(1, 3, 127, 127)).cuda())
    net(torch.autograd.Variable(torch.FloatTensor(1, 3, 255, 255)).cuda())

# start to track
handle = vot.VOT("polygon")
Polygon = handle.region()
cx, cy, w, h = get_axis_aligned_bbox(Polygon)

image_file = handle.frame()
if not image_file:
    sys.exit(0)

target_pos, target_sz = np.array([cx, cy]), np.array([w, h])
im = cv2.imread(image_file)  # HxWxC
state = SiamRPN_init(im, target_pos, target_sz, net)  # init tracker
while True:
    image_file = handle.frame()
    if not image_file:
        break
    im = cv2.imread(image_file)  # HxWxC
    state = SiamRPN_track(state, im)  # track

    # convert cx, cy, w, h into rect
    res = cxy_wh_2_rect(state['target_pos'], state['target_sz'])
    handle.report(Rectangle(res[0], res[1], res[2], res[3]))

Example #5
0
SiamMask_dir = '/home/guo/zpy/Mypysot/mypysot/data_and_result/weight/Mob20.pth'  #Res20.pth'
Dr_dir = '/home/guo/zpy/Mypysot/mypysot/data_and_result/weight/High-Low-two.pth.tar'
tracker = TSDMTracker(SiamRes_dir, SiamMask_dir, Dr_dir, image_rgb,
                      image_depth, region)

#track
while True:
    image_file1, image_file2 = handle.frame()
    if not image_file1:
        break
    image_rgb = cv2.imread(image_file1)
    image_depth = cv2.imread(image_file2, -1)
    state = tracker.track(image_rgb, image_depth)
    region_Dr, score = state['region_Siam'], state[
        'score']  #state['region_Dr']
    if score > 0.3:
        score = 1
    else:
        score = 0

    handle.report(
        Rectangle(region_Dr[0], region_Dr[1], region_Dr[2], region_Dr[3]),
        score)
'''
handle = vot.VOT("rectangle",'rgbd')
region = handle.region()
image_file1, image_file2 = handle.frame()
while True:
    handle.report(Rectangle(2,2,1,1), 1)
'''
Example #6
0
except Exception as e:
    logging.info('error %s', e)

while True:
    c = c + 1
    logging.info('************* %s *************', c)
    image_file = handle.frame()
    logging.info(image_file)

    if not image_file:
        break

#    state = RTMDNet_track(state, image_file)
#   box = state['target_bbox']
#  #res = cxy_wh_2_rect(box)
# #handle.report(Rectangle(res[0], res[1], res[2], res[3]))
#handle.report(Rectangle(box[0], box[1], box[2], box[3]))

#logging.info('box: %s, res: %s', box, res)
#    if c == 5:
#	sys.exit(0)
    try:
        state = RTMDNet_track(state, image_file)
        box = state['target_bbox']
        #res = cxy_wh_2_rect(box)
        #handle.report(Rectangle(res[0], res[1], res[2], res[3]))
        handle.report(Rectangle(box[0], box[1], box[2], box[3]))

    except Exception as e:
        logging.info('error is: %s', e)
Example #7
0
depth_im = np.array(Image.open(imagefile_d))

tracker.initialize(image=image, state=selection, depth_im=depth_im)

while True:
    imagefile = handle.frame()
    if not imagefile:
        break

    # imagefile = ''.join(imagefile)
    # imagefile = imagefile[20:-2]

    # image = tracker._read_image(imagefile)

    imagefile_rgb = imagefile[0]
    imagefile_d = imagefile[1]
    assert imagefile_rgb.find("color") >= 0
    assert imagefile_d.find("depth") >= 0
    image = tracker._read_image(imagefile_rgb)
    depth_im = np.array(Image.open(imagefile_d))

    start_time = time.time()
    state = tracker.track(image=image, depth_im=depth_im)

    #overlay_boxes(image, state, imagefile[0], tracker_name)

    #confidence=1
    selection = Rectangle(state[0], state[1], state[2], state[3])
    handle.report(selection)
    time.sleep(0.01)
Example #8
0
# for i in range(10):
#     net.temple(torch.autograd.Variable(torch.FloatTensor(1, 3, 127, 127)).cuda()) # selonsy:cuda()表示使用GPU进行计算,FloatTensor(1, 3, 127, 127):浮点型四维张量
#     net(torch.autograd.Variable(torch.FloatTensor(1, 3, 255, 255)).cuda())

# start to track
handle = vot.VOT("polygon")
Polygon = handle.region() # region:将配置消息发送到客户端并接收初始化区域和第一个图像的路径。其返回值为初始化区域。
cx, cy, w, h = get_axis_aligned_bbox(Polygon) # get_axis_aligned_bbox:将坐标数据转换成 RPN 的格式

image_file = handle.frame() # frame 函数从客户端获取帧(图像路径)
if not image_file:
    sys.exit(0)

target_pos, target_sz = np.array([cx, cy]), np.array([w, h])
im = cv2.imread(image_file)  # HxWxC
state = SiamRPN_init(im, target_pos, target_sz, net)  # init tracker,SiamRPN_init:构造状态结构体并运行模板分支
# 从第一帧开始跟踪,表示很奇怪,难道直接给定的不准确么?   # selonsy:改进点
while True: # 进入跟踪循环
    image_file = handle.frame()
    if not image_file:
        break
    im = cv2.imread(image_file)  # HxWxC
    state = SiamRPN_track(state, im)  # track,SiamRPN_track:运行检测分支并更新状态变量
    res = cxy_wh_2_rect(state['target_pos'], state['target_sz']) # cxy_wh_2_rect:将坐标转换成矩形框的表示形式

    handle.report(Rectangle(res[0], res[1], res[2], res[3])) # report:将跟踪结果报告给客户端

print(handle.result)
print(handle.frames)

del handle