Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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)))