Azure AI的文生圖API試用
原本是想用ComfyUI來做,但有點複雜,所以就先玩玩Azure AI提供的API。
我使用的模型是dall-e-3,原本想用威力更強的gpt-image-1,但這個需要申請且不容易通過,所以就用舊模型。
而使用的方式也很簡單,官方甚至只給curl的範例XD
首先對針API回傳的JSON格式建立對應的類別:
public class ImageResult
{
public ImageResultData[] data { get; set; } = Array.Empty<ImageResultData>();
}
public class ImageResultData
{
public string? revised_prompt { get; set; } = string.Empty;
public string? url { get; set; } = string.Empty;
}
再來就是透過HttpClient來呼叫API:
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "your endpoint");
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "your API key");
requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var requestModel = new
{
model = "Text-Image-Peter",
prompt = "your prompt",
n = 1,
style = "vivid",
quality = "standard",
size = "1024x1024"
};
requestMessage.Content = new StringContent(System.Text.Json.JsonSerializer.Serialize(requestModel), Encoding.UTF8, "application/json");
var response = await _httpClient.SendAsync(requestMessage);
var stream = await response.Content.ReadAsStreamAsync();
StreamReader streamReader = new StreamReader(stream);
string jsonStr = streamReader.ReadToEnd();
拿到response後就可以下載圖片了:
ImageResult imageResult = System.Text.Json.JsonSerializer.Deserialize<ImageResult>(jsonStr);
if (imageResult != null && (imageResult.data != null && imageResult.data.Count() != 0))
{
Console.WriteLine($"Revised Prompt: {imageResult.data[0].revised_prompt}");
Console.WriteLine($"Image URL: {imageResult.data[0].url}");
string fileName = $"{DateTime.Now:yyyyMMddHHmmss}.png";
HttpClient httpClient = new HttpClient();
using var downloadStream = await httpClient.GetStreamAsync(imageResult.data[0].url);
using var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
await downloadStream.CopyToAsync(fileStream);
await fileStream.FlushAsync();
fileStream.Close();
}
else
{
Console.WriteLine("Failed to deserialize the response.");
}
參考資料