示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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")