我使用瘦包resnet_v2_152
来训练分类模型。然后将其导出到.pb文件以提供服务。因为输入是图像,所以它将使用网络安全的base64编码进行编码。它看起来像:
serialized_tf_example = tf.placeholder(dtype=tf.string, name='tf_example')
decoded = tf.decode_base64(serialized_tf_example)
然后我用base64编码一个图像,这样:
img_path = '/Users/wuyanxue/Desktop/not_emoji1.jpeg'
img_b64 = base64.b64encode(open(img_path, 'rb').read())
s = str(img_b64, encoding='utf-8')
s = s.replace('+', '-').replace(r'/', '_')
我的帖子数据结构如下:post_data = {
'signature_name': 'predict',
'instances':[ {
'inputs':
{ 'b64': s }
}]
}
最后,我向这个服务器发布了一个HTTP请求:
res = requests.post('server_address', json=post_data)
它给了我:
'{ "error": "Failed to process element: 0 key: inputs of \'instances\' list. Error: Invalid argument: Unable to base64 decode" }'
我想知道怎么会遇到它?有什么解决方案吗?
我在使用python3时遇到了同样的问题。我通过在encode函数中添加一个类似字节的对象"b"而不是默认的str来解决这个问题:b'{"instances" : [{"b64": "%s"}]}' % base64.b64encode(
dl_request.content)
希望能有所帮助,请查看此答案以获取更多信息。
这个问题已经解决了。
post_data = {
'signature_name': 'predict',
'instances':[ {
'inputs':
{ 'b64': s }
}]
}
我们看到输入带有"b64"标志,这说明tensorflow服务将使用base64代码解码s。它属于tensorflow服务内部方法。因此,占位符:
serialized_tf_example = tf.placeholder(dtype=tf.string, name='tf_example')
将直接接收输入数据的二进制格式,而不是base64格式。
最后,
decoded = tf.decode_base64(serialized_tf_example)
没有必要。