Поделиться через


Создание изображений из текста с помощью ИИ

В этом кратком руководстве вы используете библиотеку Microsoft.Extensions.AI MEAI для создания изображений из текстовых запросов с помощью модели ИИ. Возможности преобразования текста в изображения MEAI позволяют создавать изображения из запросов естественного языка или существующих изображений с помощью согласованной и расширяемой поверхности API.

Интерфейс IImageGenerator предоставляет унифицированный расширяемый API для работы с различными службами создания изображений, что упрощает интеграцию возможностей текста в изображения в приложения .NET. Интерфейс поддерживает следующее:

  • Генерация изображений из текста.
  • Композиция конвейера с промежуточным ПО, включающая ведение журнала, телеметрию, кэширование.
  • Гибкие параметры конфигурации.
  • Поддержка нескольких поставщиков ИИ.

Замечание

Интерфейс IImageGenerator в настоящее время помечен как экспериментальный с идентификатором диагностики MEAI001 . Возможно, потребуется отключить это предупреждение в файле проекта или коде.

Предпосылки

Настройка службы ИИ

Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service. На шаге "Развернуть модель" выберите модель 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();
    

    Предыдущий код:

    • Загружает конфигурацию из секретов пользователя.
    • Создает ImageClient с помощью OpenAI SDK.
    • Преобразует ImageClient в IImageGenerator с использованием метода расширения AsIImageGenerator(ImageClient).
  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. Запустите приложение с помощью интегрированной среды разработки или с помощью dotnet run.

    Приложение создает изображение и выводит путь к файлу изображения. Откройте файл для просмотра созданного изображения. На следующем рисунке показан один пример созданного изображения.

    Сгенерированный искусственным интеллектом образ теннисного корта в джунглях.

Настройка параметров создания изображений

Вы можете настроить создание изображений, предоставив другие параметры, такие как размер, формат отклика и количество создаваемых изображений. Класс ImageGenerationOptions позволяет указать:

  • AdditionalProperties: Опции, специфичные для поставщика.
  • Count: количество генерируемых изображений.
  • ImageSize: размеры созданного изображения в виде System.Drawing.Size. Сведения о поддерживаемых размерах см. в справочнике по API OpenAI.
  • MediaType: тип носителя (MIME) созданного образа.
  • ModelId: идентификатор модели.
  • RawRepresentationFactory: обратный вызов, который создает необработанное представление параметров создания изображений из базовой реализации.
  • ResponseFormat: Параметры — Uri, Data и Hosted.

Использование интеграции размещения

При создании веб-приложений или размещенных служб можно интегрировать генерацию изображений с помощью внедрения зависимостей и шаблонов размещения. Этот подход обеспечивает лучшее управление жизненным циклом, интеграцию конфигурации и возможность тестирования.

Настройка служб размещения

Пакет Aspire.Azure.AI.OpenAI предоставляет методы расширения для регистрации сервисов Azure OpenAI в контейнере внедрения зависимостей вашего приложения.

  1. Добавьте необходимые пакеты в веб-приложение:

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Настройте клиент Azure OpenAI и генератор образов в Program.cs файле:

    using Aspire.Azure.AI.OpenAI;
    using Microsoft.Extensions.AI;
    using OpenAI;
    
    WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
    
    // Add the Azure OpenAI client using hosting integration.
    AspireAzureOpenAIClientBuilder openai = builder.AddAzureOpenAIClient("openai");
    

    Метод AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) регистрирует клиент Azure OpenAI при помощи внедрения зависимостей. Строка подключения (именованная "openai") извлекается из файла конфигурации, обычно из appsettings.json или переменных среды.

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. Зарегистрируйте службу с внедрением IImageGenerator зависимостей:

    // Register the image generator with dependency injection.
    ImageGeneratorBuilder imageBuilder = builder.Services.AddImageGenerator(services =>
    {
        OpenAIClient openAiClient = services.GetRequiredService<OpenAIClient>();
        OpenAI.Images.ImageClient imageClient = openAiClient.GetImageClient("gpt-image-1");
        #pragma warning disable MEAI001 // Type is for evaluation purposes only.
        return imageClient.AsIImageGenerator();
        #pragma warning restore MEAI001
    });
    

    Метод AddImageGenerator регистрирует генератор образов в виде единой службы, которая может быть внедрена в контроллеры, службы или минимальные конечные точки API.

  4. Добавление параметров и ведения журнала::

    imageBuilder.ConfigureOptions(options =>
    {
        options.MediaType = "image/png";
    }).UseLogging();
    

    Предыдущий код:

Использование генератора образов в конечных точках

После регистрации вы можете вливать IImageGenerator в ваши конечные точки или службы.

// Use the image generator in an endpoint.
app.MapPost("/generate-image", async (IImageGenerator generator, string prompt) =>
{
    ImageGenerationResponse response = await generator.GenerateImagesAsync(prompt);
    DataContent dataContent = response.Contents.OfType<DataContent>().First();

    return Results.File(dataContent.Data.ToArray(), dataContent.MediaType);
});

Этот подход к размещению обеспечивает несколько преимуществ:

  • Управление конфигурацией. Строки подключения и параметры управляются системой конфигурации .NET.
  • Внедрение зависимостей: генератор образов доступен во всем приложении через DI.
  • Управление жизненным циклом: службы правильно инициализируются и освобождаются инфраструктурой размещения.
  • Тестируемость: реализации макетов можно легко заменить на тестирование.
  • Интеграция с .NET Aspire: при использовании .NET AspireAddAzureOpenAIClient метод интегрируется с обнаружением служб и телеметрией.

Лучшие практики

При реализации создания текста в изображениях в приложениях следует учитывать следующие рекомендации.

  • Проектирование запроса: написание четких, подробных запросов, описывающих нужный образ. Включите конкретные сведения о стиле, композиции, цветах и элементах.
  • Управление затратами: создание образов может быть дорогостоящим. Кэшируйте результаты, когда это возможно, и реализуйте ограничение скорости для контроля затрат.
  • Безопасность содержимого: всегда обеспечьте просмотр созданных изображений на соответствие содержимому, особенно в производственных приложениях. Рассмотрите возможность реализации фильтрации содержимого и модерации.
  • Взаимодействие с пользователем: создание изображений может занять несколько секунд. Предоставьте индикаторы хода выполнения и грамотно обрабатывайте таймауты.
  • Юридические рекомендации. Помните о правах лицензирования и использования для созданных образов. Просмотрите условия обслуживания для поставщика ИИ.

Очистите ресурсы

Если ресурс Azure OpenAI больше не нужен, удалите его, чтобы избежать расходов:

  1. На портале Azure перейдите к ресурсу Azure OpenAI.
  2. Выберите ресурс и нажмите кнопку "Удалить".

Дальнейшие шаги

Вы успешно создали несколько различных изображений с помощью интерфейса IImageGenerator в Microsoft.Extensions.AI. Далее можно изучить некоторые из дополнительных функций, включая:

  • Уточнение созданного изображения итеративно.
  • Редактирование существующего изображения.
  • Персонализация изображения, схемы или темы.

См. также