我正在使用C#在.net中创建一个Web API,我想调用clarifai api获取图像标签。
我怎样才能做到这一点?
提前致谢
请您参考如下方法:
这是更新的答案,向您展示了如何从本地计算机向Clarifai的API发送图像。本示例使用API的版本2。如果尝试使用版本1,则会收到429状态错误。这是为了鼓励人们使用版本2。有关此问题,请参见https://community.clarifai.com/t/request-was-throttled/402。
下面的示例是采用流的方法。稍后,此流将转换为字节数组并以base 64进行编码。此编码的数据以JSON格式发送到Clarifai的API。
public void ClarifaiTagging(Stream imageStream)
{
const string ACCESS_TOKEN = "YOUR_ACCESS_TOKEN";
const string CLARIFAI_API_URL = "https://api.clarifai.com/v2/models/{model}/outputs";
// Convert the stream to a byte array and convert it to base 64 encoding
MemoryStream ms = new MemoryStream();
imageStream.CopyTo(ms);
string encodedData = Convert.ToBase64String(ms.ToArray());
using (HttpClient client = new HttpClient())
{
// Set the authorization header
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + ACCESS_TOKEN);
// The JSON to send in the request that contains the encoded image data
// Read the docs for more information - https://developer.clarifai.com/guide/predict#predict
HttpContent json = new StringContent(
"{" +
"\"inputs\": [" +
"{" +
"\"data\": {" +
"\"image\": {" +
"\"base64\": \"" + encodedData + "\"" +
"}" +
"}" +
"}" +
"]" +
"}", Encoding.UTF8, "application/json");
// Send the request to Clarifai and get a response
var response = client.PostAsync(CLARIFAI_API_URL, json).Result;
// Check the status code on the response
if (!response.IsSuccessStatusCode)
{
// End here if there was an error
return null;
}
// Get response body
string body = response.Content.ReadAsStringAsync().Result.ToString();
Debug.Write(body);
}
}
希望这会有所帮助。
编辑:
要使用Clarifai API的v2标记来自URL的图像,只需使用以下内容。
HttpContent json = new StringContent(
"{" +
"\"inputs\": [" +
"{" +
"\"data\": {" +
"\"image\": {" +
"\"url\": \"" + yourUrlHere + "\"" +
"}" +
"}" +
"}" +
"]" +
"}", Encoding.UTF8, "application/json");
有关Clarifai API的完整文档,请参见 https://www.clarifai.com/developer/guide/。
