def process_3d(self, data_dir): new_data_dir = '{}_new'.format(data_dir.rstrip('/')) if os.path.exists(new_data_dir): shutil.rmtree(new_data_dir) os.makedirs(new_data_dir) for filename in FileHelper.list_dir(data_dir): if not ImageHelper.is_img(filename) or 'depth' in filename: Log.info('Image Path: {}'.format( os.path.join(data_dir, filename))) continue file_path = os.path.join(data_dir, filename) img = io.imread(file_path) kpts = self.detect_face(img) if kpts is None: Log.info('Invliad face detected in {}'.format(file_path)) continue depth = np.array( io.imread( os.path.join(data_dir, filename.replace('rgb', 'depth')))) face_depth, kpts = self.align_face( [np.array(img), np.array(depth)], kpts) if face_depth is None: Log.info('Invliad face detected in {}'.format(file_path)) continue ImageHelper.save(ImageHelper.rgb2bgr(face_depth[0]), os.path.join(new_data_dir, filename)) ImageHelper.save( ImageHelper.rgb2bgr(face_depth[1]), os.path.join(new_data_dir, filename.replace('rgb', 'depth')))
def vis_bboxes(self, image_in, bboxes_list, name='default', sub_dir='bbox'): """ Show the diff bbox of individuals. """ base_dir = os.path.join(self.configer.get('project_dir'), DET_DIR, sub_dir) if isinstance(image_in, Image.Image): image = ImageHelper.rgb2bgr(ImageHelper.to_np(image_in)) 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_path = os.path.join( base_dir, name if ImageHelper.is_img(name) else '{}.jpg'.format(name)) for bbox in bboxes_list: image = cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2) cv2.imwrite(img_path, image)
def __test_img(self, image_path, json_path, raw_path, vis_path): Log.info('Image Path: {}'.format(image_path)) ori_img_rgb = ImageHelper.img2np(ImageHelper.pil_open_rgb(image_path)) ori_img_bgr = ImageHelper.rgb2bgr(ori_img_rgb) inputs = ImageHelper.resize(ori_img_rgb, tuple(self.configer.get('data', 'input_size')), Image.CUBIC) inputs = ToTensor()(inputs) inputs = Normalize(mean=self.configer.get('trans_params', 'mean'), std=self.configer.get('trans_params', 'std'))(inputs) with torch.no_grad(): inputs = inputs.unsqueeze(0).to(self.device) bbox, cls = self.det_net(inputs) bbox = bbox.cpu().data.squeeze(0) cls = F.softmax(cls.cpu().squeeze(0), dim=-1).data boxes, lbls, scores = self.__decode(bbox, cls) 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(vis_path, image_canvas) cv2.imwrite(raw_path, ori_img_bgr) Log.info('Json Path: {}'.format(json_path)) JsonHelper.save_file(json_dict, json_path) return json_dict
def inference(self, image_rgb): image_bgr = ImageHelper.rgb2bgr(image_rgb) paf_avg, heatmap_avg = self.__get_paf_and_heatmap(image_rgb) all_peaks = self.__extract_heatmap_info(heatmap_avg) special_k, connection_all = self.__extract_paf_info(image_rgb, 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) return json_dict
def process(self, data_dir): new_data_dir = '{}_new'.format(data_dir.rstrip('/')) if os.path.exists(new_data_dir): shutil.rmtree(new_data_dir) os.makedirs(new_data_dir) for filename in FileHelper.list_dir(data_dir): if not ImageHelper.is_img(filename): Log.info('Image Path: {}'.format( os.path.join(data_dir, filename))) continue file_path = os.path.join(data_dir, filename) img = io.imread(file_path) kpts = self.detect_face(img) if kpts is None: Log.info('Invliad face detected in {}'.format(file_path)) continue face, kpts = self.align_face(img, kpts) cv2.imwrite(os.path.join(new_data_dir, filename), ImageHelper.rgb2bgr(face))