def debug(self): base_dir = os.path.join(self.configer.get('project_dir'), 'vis/results/det', self.configer.get('dataset'), 'debug') if not os.path.exists(base_dir): os.makedirs(base_dir) val_data_loader = self.det_data_loader.get_valloader() count = 0 for i, (inputs, bboxes, labels) in enumerate(val_data_loader): for j in range(inputs.size(0)): count = count + 1 if count > 20: exit(1) ori_img_rgb = DeNormalize(mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(inputs[j]) ori_img_rgb = ori_img_rgb.numpy().transpose(1, 2, 0).astype(np.uint8) ori_img_bgr = cv2.cvtColor(ori_img_rgb, cv2.COLOR_RGB2BGR) eye_matrix = torch.eye(self.configer.get('data', 'num_classes')) labels_target = eye_matrix[labels.view(-1)].view(inputs.size(0), -1, self.configer.get('data', 'num_classes')) boxes, lbls, scores = self.__decode(bboxes[j], labels_target[j]) json_dict = self.__get_info_tree(boxes, lbls, scores, ori_img_rgb) image_canvas = self.det_parser.draw_bboxes(ori_img_bgr.copy(), json_dict, conf_threshold=self.configer.get('vis', 'conf_threshold')) cv2.imwrite(os.path.join(base_dir, '{}_{}_vis.png'.format(i, j)), image_canvas) cv2.imshow('main', image_canvas) cv2.waitKey()
def debug(self): base_dir = os.path.join(self.configer.get('project_dir'), 'vis/results/pose', self.configer.get('dataset'), 'debug') if not os.path.exists(base_dir): os.makedirs(base_dir) val_data_loader = self.pose_data_loader.get_valloader() for i, (inputs, heatmap) in enumerate(val_data_loader): for j in range(inputs.size(0)): ori_img = DeNormalize( mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(inputs[j]) image_raw = ori_img.numpy().transpose(1, 2, 0) image_raw = cv2.cvtColor(image_raw, cv2.COLOR_RGB2BGR) heatmap_avg = heatmap[j].numpy().transpose(1, 2, 0) heatmap_avg = cv2.resize( heatmap_avg, (0, 0), fx=self.configer.get('network', 'stride'), fy=self.configer.get('network', 'stride'), interpolation=cv2.INTER_CUBIC) all_peaks = self.__extract_heatmap_info(heatmap_avg) image_save = self.__draw_key_point(all_peaks, image_raw) cv2.imwrite( os.path.join(base_dir, '{}_{}_result.jpg'.format(i, j)), image_save)
def tensor2bgr(self, tensor): assert len(tensor.size()) == 3 ori_img = DeNormalize(**self.configer.get('data', 'normalize'))(tensor.cpu()) ori_img = ori_img.numpy().transpose(1, 2, 0).astype(np.uint8) if self.configer.get('data', 'input_mode') == 'BGR': return ori_img else: image_bgr = cv2.cvtColor(ori_img, cv2.COLOR_RGB2BGR) return image_bgr
def debug(self): base_dir = os.path.join(self.configer.get('project_dir'), 'vis/results/pose', self.configer.get('dataset'), 'debug') if not os.path.exists(base_dir): os.makedirs(base_dir) val_data_loader = self.pose_data_loader.get_valloader() count = 0 for i, (inputs, heatmap, maskmap, vecmap) in enumerate(val_data_loader): for j in range(inputs.size(0)): count = count + 1 if count > 10: exit(1) Log.info(heatmap.size()) ori_img = DeNormalize( mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(inputs[j]) ori_img = ori_img.numpy().transpose(1, 2, 0).astype(np.uint8) image_bgr = cv2.cvtColor(ori_img, cv2.COLOR_RGB2BGR) heatmap_avg = heatmap[j].numpy().transpose(1, 2, 0) heatmap_avg = cv2.resize( heatmap_avg, (0, 0), fx=self.configer.get('network', 'stride'), fy=self.configer.get('network', 'stride'), interpolation=cv2.INTER_CUBIC) paf_avg = vecmap[j].numpy().transpose(1, 2, 0) paf_avg = cv2.resize(paf_avg, (0, 0), fx=self.configer.get('network', 'stride'), fy=self.configer.get('network', 'stride'), interpolation=cv2.INTER_CUBIC) # self.pose_visualizer.vis_paf(paf_avg, image_rgb.astype(np.uint8), name='314{}_{}'.format(i,j)) self.pose_visualizer.vis_peaks(heatmap_avg, image_bgr) self.pose_visualizer.vis_paf(paf_avg, image_bgr) all_peaks = self.__extract_heatmap_info(heatmap_avg) special_k, connection_all = self.__extract_paf_info( image_bgr, paf_avg, all_peaks) subset, candidate = self.__get_subsets(connection_all, special_k, all_peaks) json_dict = self.__get_info_tree(image_bgr, subset, candidate) image_canvas = self.pose_parser.draw_points( image_bgr, json_dict) image_canvas = self.pose_parser.link_points( image_canvas, json_dict) cv2.imwrite( os.path.join(base_dir, '{}_{}_vis.png'.format(i, j)), image_canvas) cv2.imshow('main', image_canvas) cv2.waitKey()
def vis_default_bboxes(self, ori_img_in, default_bboxes, labels, name='default', sub_dir='encode'): base_dir = os.path.join(self.configer.get('project_dir'), DET_DIR, sub_dir) if not os.path.exists(base_dir): log.error('Dir:{} not exists!'.format(base_dir)) os.makedirs(base_dir) if not isinstance(ori_img_in, np.ndarray): ori_img = DeNormalize( div_value=self.configer.get('normalize', 'div_value'), mean=self.configer.get('normalize', 'mean'), std=self.configer.get('normalize', 'std'))(ori_img_in.clone()) ori_img = ori_img.data.cpu().squeeze().numpy().transpose( 1, 2, 0).astype(np.uint8) ori_img = cv2.cvtColor(ori_img, cv2.COLOR_RGB2BGR) else: ori_img = ori_img_in.copy() assert labels.size(0) == default_bboxes.size(0) bboxes = torch.cat([ default_bboxes[:, :2] - default_bboxes[:, 2:] / 2, default_bboxes[:, :2] + default_bboxes[:, 2:] / 2 ], 1) height, width, _ = ori_img.shape for i in range(labels.size(0)): if labels[i] == 0: continue class_name = self.configer.get('details', 'name_seq')[labels[i] - 1] color_num = len(self.configer.get('details', 'color_list')) cv2.rectangle( ori_img, (int(bboxes[i][0] * width), int(bboxes[i][1] * height)), (int(bboxes[i][2] * width), int(bboxes[i][3] * height)), color=self.configer.get( 'details', 'color_list')[(labels[i] - 1) % color_num], thickness=3) cv2.putText(ori_img, class_name, (int(bboxes[i][0] * width) + 5, int(bboxes[i][3] * height) - 5), cv2.FONT_HERSHEY_SIMPLEX, fontScale=0.5, color=self.configer.get('details', 'color_list')[(labels[i] - 1) % color_num], thickness=2) img_path = os.path.join(base_dir, '{}.jpg'.format(name)) cv2.imwrite(img_path, ori_img)
def vis_rois(self, inputs, indices_and_rois, rois_labels=None, name='default', sub_dir='rois'): base_dir = os.path.join(self.configer.get('project_dir'), DET_DIR, sub_dir) if not os.path.exists(base_dir): log.error('Dir:{} not exists!'.format(base_dir)) os.makedirs(base_dir) for i in range(inputs.size(0)): rois = indices_and_rois[indices_and_rois[:, 0] == i][:, 1:] ori_img = DeNormalize(div_value=self.configer.get('normalize', 'div_value'), mean=self.configer.get('normalize', 'mean'), std=self.configer.get('normalize', 'std'))(inputs[i]) ori_img = ori_img.data.cpu().squeeze().numpy().transpose(1, 2, 0).astype(np.uint8) ori_img = cv2.cvtColor(ori_img, cv2.COLOR_RGB2BGR) color_num = len(self.configer.get('details', 'color_list')) for j in range(len(rois)): label = 1 if rois_labels is None else rois_labels[j] if label == 0: continue class_name = self.configer.get('details', 'name_seq')[label - 1] cv2.rectangle(ori_img, (int(rois[j][0]), int(rois[j][1])), (int(rois[j][2]), int(rois[j][3])), color=self.configer.get('details', 'color_list')[(label - 1) % color_num], thickness=3) cv2.putText(ori_img, class_name, (int(rois[j][0]) + 5, int(rois[j][3]) - 5), cv2.FONT_HERSHEY_SIMPLEX, fontScale=0.5, color=self.configer.get('details', 'color_list')[(label - 1) % color_num], thickness=2) img_path = os.path.join(base_dir, '{}_{}_{}.jpg'.format(name, i, time.time())) cv2.imwrite(img_path, ori_img)
def vis_peaks(self, heatmap, ori_img, name='default', vis_dir=PEAK_DIR, scale_factor=1, img_size=(368, 368)): vis_dir = os.path.join(self.configer.get('project_dir'), vis_dir) if not os.path.exists(vis_dir): Log.error('Dir:{} not exists!'.format(vis_dir)) os.makedirs(vis_dir) if not isinstance(heatmap, np.ndarray): if len(heatmap.size()) != 3: Log.error('Heatmap size is not valid.') exit(1) heatmap = heatmap.data.squeeze().cpu().numpy().transpose(1, 2, 0) if not isinstance(ori_img, np.ndarray): ori_img = DeNormalize(mean=[128.0, 128.0, 128.0], std=[256.0, 256.0, 256.0])(ori_img) ori_img = ori_img.data.cpu().squeeze().numpy().transpose(1, 2, 0) for j in range(self.configer.get('num_keypoints')): peaks = self.__get_peaks(heatmap[:, :, j].data.cpu().numpy()) image_path = os.path.join(vis_dir, '{}_{}.jpg'.format(name, j)) for peak in peaks: image = cv2.circle(ori_img, (peak[0], peak[1]), self.configer.get('vis', 'circle_radius'), (0, 255, 0), thickness=-1) image = self.scale_image(image, scale_factor, img_size) cv2.imwrite(image_path, image)
def vis_paf(self, inputs, ori_img, name='default', vis_dir=PAF_DIR): vis_dir = os.path.join(self.configer.get('project_dir'), vis_dir) if not os.path.exists(vis_dir): Log.error('Dir:{} not exists!'.format(vis_dir)) os.makedirs(vis_dir) if not isinstance(inputs, np.ndarray): if len(inputs.size()) != 3: Log.error('Heatmap size is not valid.') exit(1) inputs = inputs.data.squeeze().cpu().numpy().transpose(1, 2, 0) if not isinstance(ori_img, np.ndarray): if len(ori_img.size()) != 3: Log.error('Heatmap size is not valid.') exit(1) ori_img = DeNormalize(mean=[128.0, 128.0, 128.0], std=[256.0, 256.0, 256.0])(ori_img) ori_img = ori_img.data.cpu().squeeze().numpy().transpose( 1, 2, 0).astype(np.uint8) if inputs.shape[0] != ori_img.shape[0]: resize_width = (inputs.shape[1] + ori_img.shape[1]) // 2 resize_height = (inputs.shape[0] + ori_img.shape[0]) // 2 inputs = cv2.resize(inputs, (resize_width, resize_height), interpolation=cv2.INTER_CUBIC) ori_img = cv2.resize(ori_img, (resize_width, resize_height), interpolation=cv2.INTER_CUBIC) for i in range(1): U = inputs[:, :, 2 * i] * -1 V = inputs[:, :, 2 * i + 1] X, Y = np.meshgrid(np.arange(U.shape[1]), np.arange(U.shape[0])) M = np.zeros(U.shape, dtype='bool') M[U**2 + V**2 < 0.5 * 0.5] = True U = ma.masked_array(U, mask=M) V = ma.masked_array(V, mask=M) # 1 plt.figure() plt.imshow(ori_img + 0.5, alpha=.5) s = 5 Q = plt.quiver(X[::s, ::s], Y[::s, ::s], U[::s, ::s], V[::s, ::s], scale=50, headaxislength=4, alpha=.5, width=0.001, color='r') fig = matplotlib.pyplot.gcf() fig.set_size_inches(10, 10) plt.savefig(os.path.join(vis_dir, '{}_{}.jpg'.format(name, i)))
def debug(self): base_dir = os.path.join(self.configer.get('project_dir'), 'vis/results/det', self.configer.get('dataset'), 'debug') if not os.path.exists(base_dir): os.makedirs(base_dir) val_data_loader = self.det_data_loader.get_valloader(SSDDataLoader) count = 0 for i, (inputs, bboxes, labels) in enumerate(val_data_loader): for j in range(inputs.size(0)): count = count + 1 if count > 20: exit(1) ori_img = DeNormalize(mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(inputs[j]) ori_img = ori_img.numpy().transpose(1, 2, 0) image_bgr = cv2.cvtColor(ori_img, cv2.COLOR_RGB2BGR) eye_matrix = torch.eye(self.configer.get('data', 'num_classes')) labels_target = eye_matrix[labels.view(-1)].view(inputs.size(0), -1, self.configer.get('data', 'num_classes')) boxes, lbls, scores, has_obj = self.__decode(bboxes[j], labels_target[j]) if has_obj: boxes = boxes.cpu().numpy() boxes = np.clip(boxes, 0, 1) lbls = lbls.cpu().numpy() scores = scores.cpu().numpy() img_canvas = self.__draw_box(image_bgr, boxes, lbls, scores) else: # print('None obj detected!') img_canvas = image_bgr # self.det_visualizer.vis_bboxes(paf_avg, image_rgb.astype(np.uint8), name='314{}_{}'.format(i,j)) cv2.imwrite(os.path.join(base_dir, '{}_{}_result.jpg'.format(i, j)), img_canvas)
def vis_peaks(self, heatmap_in, ori_img_in, name='default', sub_dir='peaks'): base_dir = os.path.join(self.configer.get('project_dir'), POSE_DIR, sub_dir) if not os.path.exists(base_dir): Log.error('Dir:{} not exists!'.format(base_dir)) os.makedirs(base_dir) if not isinstance(heatmap_in, np.ndarray): if len(heatmap_in.size()) != 3: Log.error('Heatmap size is not valid.') exit(1) heatmap = heatmap_in.clone().data.cpu().numpy().transpose(1, 2, 0) else: heatmap = heatmap_in.copy() if not isinstance(ori_img_in, np.ndarray): ori_img = DeNormalize( mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(ori_img_in.clone()) ori_img = ori_img.data.cpu().squeeze().numpy().transpose( 1, 2, 0).astype(np.uint8) ori_img = cv2.cvtColor(ori_img, cv2.COLOR_RGB2BGR) else: ori_img = ori_img_in.copy() for j in range(self.configer.get('data', 'num_keypoints')): peaks = self.__get_peaks(heatmap[:, :, j]) for peak in peaks: ori_img = cv2.circle(ori_img, (peak[0], peak[1]), self.configer.get('vis', 'circle_radius'), self.configer.get('details', 'color_list')[j], thickness=-1) ori_img = cv2.resize( ori_img, tuple(self.configer.get('data', 'input_size'))) cv2.imwrite(os.path.join(base_dir, '{}_{}.jpg'.format(name, j)), ori_img)
def vis_img(self, image_in, name='default', sub_dir='images'): base_dir = os.path.join(self.configer.get('project_dir'), TENSOR_DIR, sub_dir) if not isinstance(image_in, np.ndarray): if len(image_in.size()) != 3: Log.error('Image size is not valid.') exit(1) image = DeNormalize(mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(image_in.clone()) image = image.data.cpu().numpy().transpose(1, 2, 0) else: image = image_in.copy() if not os.path.exists(base_dir): Log.error('Dir:{} not exists!'.format(base_dir)) os.makedirs(base_dir) img = cv2.resize(image, tuple(self.configer.get('data', 'input_size'))) cv2.imwrite(img, os.path.join(base_dir, '{}.jpg'.format(name)))