使用C#客户端的消费张量流服务初始模型(预测API)
几周来,我一直在尝试实现一个C#客户端应用程序来与Tensorflow服务服务器交互,但没有成功。我有一个成功运行的Python客户端,但我无法用C#复制它的功能。Python客户端使用C#客户端的消费张量流服务初始模型(预测API),api,tensorflow,predict,Api,Tensorflow,Predict,几周来,我一直在尝试实现一个C#客户端应用程序来与Tensorflow服务服务器交互,但没有成功。我有一个成功运行的Python客户端,但我无法用C#复制它的功能。Python客户端 import requests #import json from keras.preprocessing.image import img_to_array, array_to_img, load_img from keras.preprocessing import image flowers = 'c:/f
import requests
#import json
from keras.preprocessing.image import img_to_array, array_to_img, load_img
from keras.preprocessing import image
flowers = 'c:/flower_photos/cars/car1.jpg'
image1 = img_to_array(image.load_img(flowers, target_size=(128,128))) / 255
payload = {
"instances": [{"image":image1.tolist()},
]
}
print("sending request...")
r = requests.post('http://localhost:8501/v1/models/flowers/versions/1:predict', json=payload)
print(r.content)
服务器响应正确。我使用的是Tensorflow版本1.12.0和相应的最新服务映像。他们都工作得很好
根据RESTAPI,API结构已经给出,但我一点也不清楚。我需要将图像发送到服务器。如何将图像负载添加到C#中的JSON请求中?在浏览了很多网站之后,我发现图像应该是base64string格式的
所以我把图像转换成base64
private string GetBase64ImageBytes(string ImagePath)
{
using (Image image = Image.FromFile(ImagePath))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
}
请求部分如下:(服务器使用GET请求的元数据正确响应)
对于POST请求,我收到错误消息“远程服务器返回了一个错误:(400)错误请求”。服务器也会终止其服务。在《邮递员》里我得到了
详细错误信息如下:
{ "error": "Failed to process element: 0 key: image of \'instances\' list. Error: Invalid argument: JSON Value: {\n \"b64\": \"/9j/4AAQSkZJRgABAQEAAAAAAAD/4QBSRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKGAAcAAAAcAAAALAAAAABVTklDT0RFAABBAHAAcABsAGUATQBhAHIAaw ... .....(image string data)
所以这感觉就像我发送了不正确的数据格式。
有人能告诉我这里怎么了吗?非常感谢图像转换和POST请求的任何示例。我在任何地方都找不到base64string格式是站点中图像的正确格式。Python客户机数据格式是不同的,因此需要知道任何参考文档的正确格式。
我在JAVA客户机上找到的最接近我的参考,但与我的不兼容,可能是因为TF版本不同。希望做同样的事情。你找到解决办法了吗?@runningeek你们有人解决了吗?我也失败了。我最终将python脚本作为一个过程嵌入到C#中。@PCG不是很慢吗?是的,它是。我花了很多时间来获取它要求的Base64,但始终无法使其工作。然而,我的应用程序是批量处理的(几千张图片),所以加载60秒不是什么大问题。出于某种原因,它在Python中工作。
{ "error": "Failed to process element: 0 key: image of \'instances\' list. Error: Invalid argument: JSON Value: {\n \"b64\": \"/9j/4AAQSkZJRgABAQEAAAAAAAD/4QBSRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKGAAcAAAAcAAAALAAAAABVTklDT0RFAABBAHAAcABsAGUATQBhAHIAaw ... .....(image string data)