【问题标题】:Upload an image file with JSON Format上传 JSON 格式的图片文件
【发布时间】:2021-10-09 02:57:42
【问题描述】:

我正在尝试构建机器学习算法并使用 REST API 进行部署。当我这样做时,我收到了一些错误,例如“MALFORMED_REQUEST”、“message”:“无法解析来自 JSON 的输入。确保输入是有效的 JSON 格式字符串。”。在下面你可以看到我的代码。你能告诉我我做错了什么吗?提前致谢。

import json
import requests
import base64

#data = 'cat_Test2.jpg'


with open('./Dataset/test2/cat_Test2.jpg', mode='rb') as file:
    img = file.read()
data = base64.encodebytes(img).decode('utf-8')

#print(json.dumps(data))
#print(data)
headers = {'Content-Type': 'application/json'}
request_uri = 'http://127.0.0.1:5000/invocations'

if __name__ == '__main__':
    try:
        response = requests.post(request_uri, data=data, headers=headers)
        print(response.content)
        print('done!!!')
    except Exception as ex:
        raise (ex)

【问题讨论】:

    标签: python json rest mlflow


    【解决方案1】:

    MLflow 模型服务器接受 JSON(pandas split-orient 格式)或 CSV 作为输入。 https://mlflow.org/docs/latest/models.html#deploy-mlflow-models

    您需要将图像转换为这两种格式之一。例子: https://github.com/amesar/mlflow-examples/tree/master/python/keras_tf_mnist#score-mnist-png-file

    【讨论】:

    • 好吧,谢谢先生,我是机器学习和 mlflow 的新手。它对我来说变得越来越整洁。这些链接对我非常有用
    【解决方案2】:

    仅仅因为您已将图像转换为(base64 编码的)字符串,并不意味着它现在是有效的 JSON。

    我看到你已经在你的代码中使用了print(json.dumps(data)),你应该注意到了双引号,而不是print(data)

    例子:

    import json
    
    s = "abc"
    print(s)
    print(json.dumps(s))
    

    输出:

    abc
    "abc"
    

    只有加上引号后,字符串才是有效的JSON。

    这意味着

    response = requests.post(request_uri, data=json.dumps(data), headers=headers)
    

    应该做的工作。


    为了完整起见,看看这个加载字符串与加载 JSON 字符串的案例:

    import json
    s = 'abc'
    json.loads(s)
    

    json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)

    import json
    s = '"abc"'
    print(json.loads(s))
    

    abc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 2010-11-07
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多