def handle_cli(self, args, func): parser = argparse.ArgumentParser() parser.add_argument("--input", required=True) parser.add_argument("-o", "--output", default="str", choices=["str", "json"]) parsed_args = parser.parse_args(args) file_path = parsed_args.input verify_image_format_or_raise(file_path, self.accept_image_formats) if not os.path.isabs(file_path): file_path = os.path.abspath(file_path) image_array = self.fastai_vision.open_image( fn=file_path, convert_mode=self.convert_mode, div=self.div, after_open=self.after_open, cls=self.cls or self.fastai_vision.Image, ) result = func(image_array) if parsed_args.output == "json": result = api_func_result_to_json(result) else: result = str(result) print(result)
def handle_cli(self, args, func): parser = argparse.ArgumentParser() parser.add_argument("--input", required=True) parser.add_argument("-o", "--output", default="str", choices=["str", "json", "yaml"]) parsed_args = parser.parse_args(args) file_path = parsed_args.input verify_image_format_or_raise(file_path, self.accept_image_formats) if not os.path.isabs(file_path): file_path = os.path.abspath(file_path) image_array = open_image( fn=file_path, convert_mode=self.convert_mode, div=self.div, after_open=self.after_open, cls=self.cls or Image, ) result = func(image_array) result = get_output_str(result, output_format=parsed_args.output) print(result)
def handle_request(self, request, func): if request.method != "POST": return Response(response="Only accept POST request", status=400) input_streams = [] for filename in self.input_names: file = request.files.get(filename) if file is not None: file_name = secure_filename(file.filename) verify_image_format_or_raise(file_name, self.accept_image_formats) input_streams.append(BytesIO(file.read())) if len(input_streams) == 0: data = request.get_data() if data: input_streams = (data, ) else: raise ValueError( "BentoML#ImageHandler unexpected HTTP request: %s" % request) input_data = [] for input_stream in input_streams: data = self.imread(input_stream, pilmode=self.convert_mode) if self.after_open: data = self.after_open(data) data = self.fastai_vision.pil2tensor(data, np.float32) if self.div: data = data.div_(255) if self.cls: data = self.cls(data) else: data = self.fastai_vision.Image(data) input_data.append(data) result = func(*input_data) result = get_output_str(result, request.headers.get("output", "json")) return Response(response=result, status=200, mimetype="application/json")