def segmentation(self, images=None, paths=None, data=None, batch_size=1, use_gpu=False, output_dir='ace2p_output', visualization=False): """ API for human parsing. Args: images (list[numpy.ndarray]): images data, shape of each is [H, W, C], color space is BGR. paths (list[str]): The paths of images. batch_size (int): batch size. use_gpu (bool): Whether to use gpu. output_dir (str): The path to store output images. visualization (bool): Whether to save output images or not. Returns: res (list[dict]): The result of human parsing and original path of images. """ if use_gpu: try: _places = os.environ["CUDA_VISIBLE_DEVICES"] int(_places[0]) except: raise RuntimeError( "Attempt to use GPU for prediction, but environment variable CUDA_VISIBLE_DEVICES was not set correctly." ) # compatibility with older versions if data and 'image' in data: if paths is None: paths = [] paths += data['image'] # get all data all_data = [] scale = (473, 473) # size of preprocessed image. rotation = 0 # rotation angle, used for obtaining affine matrix in preprocess. for yield_data in reader(images, paths, scale, rotation): all_data.append(yield_data) total_num = len(all_data) loop_num = int(np.ceil(total_num / batch_size)) res = [] for iter_id in range(loop_num): batch_data = list() handle_id = iter_id * batch_size for image_id in range(batch_size): try: batch_data.append(all_data[handle_id + image_id]) except: pass # feed batch image batch_image = np.array([data['image'] for data in batch_data]) batch_image = PaddleTensor(batch_image.astype('float32')) data_out = self.gpu_predictor.run([ batch_image ]) if use_gpu else self.cpu_predictor.run([batch_image]) # postprocess one by one for i in range(len(batch_data)): out = postprocess( data_out=data_out[0].as_ndarray()[i], org_im=batch_data[i]['org_im'], org_im_path=batch_data[i]['org_im_path'], image_info=batch_data[i]['image_info'], output_dir=output_dir, visualization=visualization, palette=self.palette) res.append(out) return res
def face_detection(self, images=None, paths=None, data=None, batch_size=1, use_gpu=False, output_dir='face_detector_320_predict_output', visualization=False, confs_threshold=0.5, iou_threshold=0.5): """ API for face detection. Args: images (list(numpy.ndarray)): images data, shape of each is [H, W, C], color space is BGR. paths (list[str]): The paths of images. batch_size (int): batch size. use_gpu (bool): Whether to use gpu. output_dir (str): The path to store output images. visualization (bool): Whether to save image or not. confs_threshold (float): threshold for confidence coefficient. iou_threshold (float): threshold for iou. Returns: res (list[dict()]): The result of face detection and save path of images. """ if use_gpu: try: _places = os.environ["CUDA_VISIBLE_DEVICES"] int(_places[0]) except: raise RuntimeError( "Attempt to use GPU for prediction, but environment variable CUDA_VISIBLE_DEVICES was not set correctly." ) # compatibility with older versions if data and 'image' in data: if paths is None: paths = [] paths += data['image'] # get all data all_data = [] for yield_data in reader(images, paths): all_data.append(yield_data) total_num = len(all_data) loop_num = int(np.ceil(total_num / batch_size)) res = [] for iter_id in range(loop_num): batch_data = list() handle_id = iter_id * batch_size for image_id in range(batch_size): try: batch_data.append(all_data[handle_id + image_id]) except: pass # feed batch image batch_image = np.array([data['image'] for data in batch_data]) batch_image = PaddleTensor(batch_image.astype('float32')) data_out = self.gpu_predictor.run([ batch_image ]) if use_gpu else self.cpu_predictor.run([batch_image]) confidences = data_out[0].as_ndarray() boxes = data_out[1].as_ndarray() # postprocess one by one for i in range(len(batch_data)): out = postprocess(confidences=confidences[i], boxes=boxes[i], orig_im=batch_data[i]['orig_im'], orig_im_shape=batch_data[i]['orig_im_shape'], orig_im_path=batch_data[i]['orig_im_path'], output_dir=output_dir, visualization=visualization, confs_threshold=confs_threshold, iou_threshold=iou_threshold) res.append(out) return res