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]))
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])
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]))
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) '''
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)
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)
# 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