上传 JSON 格式的图像文件

Upload an image file with JSON Format

我正在尝试构建机器学习算法并使用 REST API 进行部署。当我这样做时,我得到了一些错误,如“MALFORMED_REQUEST”、“消息”:“无法解析来自 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)

仅仅因为您已将图像转换为(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: Expecting value: line 1 column 1 (char 0)

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

abc

MLflow 模型服务器接受 JSON(pandas 面向拆分格式)或 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