使用 AI 从文本生成图像

在本快速入门中,你将使用 Microsoft.Extensions.AI (MEAI) 库通过 AI 模型从文本提示生成图像。 MEAI 文本到图像功能允许使用一致且可扩展的 API 图面从自然语言提示或现有图像生成图像。

IImageGenerator 接口提供统一的可扩展 API,用于处理各种图像生成服务,使文本到图像功能易于集成到 .NET 应用中。 接口支持:

  • 文本到图像生成。
  • 使用中间件(日志记录、遥测、缓存)进行管道组合。
  • 灵活的配置选项。
  • 支持多个人工智能提供商。

注释

IImageGenerator 接口当前标记为实验性,并使用 MEAI001 诊断 ID。 可能需要在项目文件或代码中禁止显示此警告。

先决条件

配置 AI 服务

若要使用 Azure 门户预配 Azure OpenAI 服务和模型,请完成创建和部署 Azure OpenAI 服务资源一文中的步骤。 在“部署模型”步骤中,选择模型 gpt-image-1

注释

gpt-image-1 是一种较新的模型,提供 DALL-E 3 的多项改进。 它由 OpenAI 提供,数量有限;请使用此表单申请访问。

创建应用程序

完成以下步骤以创建一个 .NET 控制台应用程序,该应用程序从文本提示生成图像。

  1. 创建新的控制台应用程序:

    dotnet new console -o TextToImageAI
    
  2. 导航到 TextToImageAI 目录,并将必要的包添加到应用:

    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  3. 运行以下命令,为 Azure OpenAI 终结点、模型名称和 API 密钥添加 应用机密

    dotnet user-secrets init
    dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint>
    dotnet user-secrets set AZURE_OPENAI_GPT_NAME gpt-image-1
    dotnet user-secrets set AZURE_OPENAI_API_KEY <your-azure-openai-api-key>
    
  4. 在所选编辑器中打开新应用(例如 Visual Studio)。

实现基本映像生成

  1. 请使用以下代码对Program.cs文件进行更新,以获取配置数据并创建AzureOpenAIClient

    using Azure;
    using Azure.AI.OpenAI;
    using Microsoft.Extensions.AI;
    using Microsoft.Extensions.Configuration;
    
    IConfigurationRoot config = new ConfigurationBuilder()
        .AddUserSecrets<Program>()
        .Build();
    
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string apiKey = config["AZURE_OPENAI_API_KEY"];
    string model = config["AZURE_OPENAI_GPT_NAME"];
    
    // Create the Azure OpenAI client and convert to IImageGenerator.
    AzureOpenAIClient azureClient = new(
        new Uri(endpoint),
        new AzureKeyCredential(apiKey));
    
    var imageClient = azureClient.GetImageClient(model);
    #pragma warning disable MEAI001 // Type is for evaluation purposes only.
    IImageGenerator generator = imageClient.AsIImageGenerator();
    

    前面的代码:

    • 从用户机密加载配置。
    • 从 OpenAI SDK 创建一个 ImageClient
    • 使用AsIImageGenerator(ImageClient)扩展方法将ImageClient转换为IImageGenerator
  2. 添加以下代码以实现基本文本到图像生成:

    // Generate an image from a text prompt
    var options = new ImageGenerationOptions
    {
        MediaType = "image/png"
    };
    string prompt = "A tennis court in a jungle";
    var response = await generator.GenerateImagesAsync(prompt, options);
    
    // Save the image to a file.
    var dataContent = response.Contents.OfType<DataContent>().First();
    string fileName = SaveImage(dataContent, "jungle-tennis.png");
    Console.WriteLine($"Image saved to file: {fileName}");
    
    static string SaveImage(DataContent content, string fileName)
    {
        string userDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
        var path = Path.Combine(userDirectory, fileName);
        File.WriteAllBytes(path, content.Data.ToArray());
        return Path.GetFullPath(path);
    }
    

    前面的代码:

  3. 通过 IDE 或使用 dotnet run 运行应用程序。

    应用程序生成一个映像,并将文件路径输出到映像。 打开该文件以查看生成的图像。 下图显示了生成的映像的一个示例。

    AI 生成的丛林中一个网球场的图像。

配置映像生成选项

可以通过提供其他选项(例如大小、响应格式和要生成的图像数)来自定义图像生成。 类 ImageGenerationOptions 允许你指定:

最佳做法

在应用程序中实现文本到图像生成时,请考虑以下最佳做法:

  • 提示工程:编写清晰、详细的提示,描述所需图像。 包括有关样式、合成、颜色和元素的特定详细信息。
  • 成本管理:映像生成可能很昂贵。 尽可能缓存结果并实施速率限制来控制成本。
  • 内容安全:始终查看生成的图像以获取适当的内容,尤其是在生产应用程序中。 请考虑实现内容筛选和审查。
  • 用户体验:映像生成可能需要几秒钟时间。 提供进度指示器并优雅地处理超时。
  • 法律注意事项:了解生成的映像的许可和使用权限。 查看 AI 提供商的服务条款。

清理资源

不再需要 Azure OpenAI 资源时,请将其删除以避免产生费用:

  1. Azure 门户中,导航到 Azure OpenAI 资源。
  2. 选择资源,然后选择“ 删除”。

后续步骤

你已使用 IImageGenerator 接口 Microsoft.Extensions.AI成功生成了一些不同的图像。 接下来,可以探索一些附加功能,包括:

  • 以迭代方式优化生成的图像。
  • 编辑现有图像。
  • 个性化图像、图表或主题。

另请参阅