Partilhar via


Gerar imagens a partir de texto usando IA

Neste início rápido, você usa a Microsoft.Extensions.AI biblioteca (MEAI) para gerar imagens a partir de prompts de texto usando um modelo de IA. Os recursos de conversão de texto em imagem do MEAI permitem gerar imagens a partir de prompts de linguagem natural ou imagens existentes usando uma superfície de API consistente e extensível.

A IImageGenerator interface fornece uma API unificada e extensível para trabalhar com vários serviços de geração de imagem, facilitando a integração de recursos de conversão de texto em imagem em seus aplicativos .NET. A interface suporta:

  • Geração de texto para imagem.
  • A composição do pipeline com middleware (registo, telemetria, cache).
  • Opções de configuração flexíveis.
  • Suporte para vários provedores de IA.

Observação

A interface IImageGenerator está atualmente marcada como experimental com o ID de diagnóstico MEAI001. Talvez seja necessário suprimir esse aviso no arquivo ou código do projeto.

Pré-requisitos

Configurar o serviço de IA

Para provisionar um serviço e um modelo do Azure OpenAI usando o portal do Azure, conclua as etapas no artigo Criar e implantar um recurso do Serviço OpenAI do Azure. Na etapa "Implantar um modelo", selecione o modelo gpt-image-1.

Observação

gpt-image-1 é um modelo mais recente que oferece várias melhorias em relação ao DALL-E 3. Está disponível na OpenAI de forma limitada; Solicite acesso com este formulário.

Criar o aplicativo

Conclua as etapas a seguir para criar um aplicativo de console .NET que gera imagens a partir de prompts de texto.

  1. Crie um novo aplicativo de console:

    dotnet new console -o TextToImageAI
    
  2. Navegue até o diretório TextToImageAI e adicione os pacotes necessários ao seu aplicativo:

    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. Execute os seguintes comandos para adicionar segredos de aplicativo para seu ponto de extremidade do Azure OpenAI, nome do modelo e chave de 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. Abra o novo aplicativo no editor de sua escolha (por exemplo, Visual Studio).

Implementar a geração básica de imagens

  1. Atualize o Program.cs arquivo com o seguinte código para obter os dados de configuração e criar o 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();
    

    O código anterior:

    • Carrega configuração a partir de segredos do utilizador.
    • Cria um ImageClient a partir do OpenAI SDK.
    • Converte o ImageClient em um IImageGenerator usando o AsIImageGenerator(ImageClient) método de extensão.
  2. Adicione o seguinte código para implementar a geração básica de texto para imagem:

    // 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);
    }
    

    O código anterior:

  3. Execute a aplicação, através da IDE ou usando dotnet run.

    A aplicação gera uma imagem e fornece o caminho do ficheiro da imagem. Abra o arquivo para visualizar a imagem gerada. A imagem a seguir mostra um exemplo de uma imagem gerada.

    Imagem gerada por IA de uma quadra de tênis em uma selva.

Configurar opções de geração de imagem

Você pode personalizar a geração de imagens fornecendo outras opções, como tamanho, formato de resposta e número de imagens a serem geradas. A ImageGenerationOptions classe permite especificar:

Utilize a integração de alojamento

Quando constrói aplicações web ou serviços alojados, pode integrar a geração de imagens usando injeção de dependências e padrões de alojamento. Esta abordagem proporciona melhor gestão do ciclo de vida, integração de configuração e capacidade de testabilidade.

Configurar serviços de alojamento

O Aspire.Azure.AI.OpenAI pacote fornece métodos de extensão para registar serviços Azure OpenAI no contentor de injeção de dependências da sua aplicação:

  1. Adicione os pacotes necessários à sua aplicação web:

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Configure o cliente Azure OpenAI e o gerador de imagens no seu Program.cs ficheiro:

    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");
    

    O AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) método regista o cliente Azure OpenAI com injeção de dependências. A cadeia de ligação (chamada "openai") é recuperada da configuração, normalmente de appsettings.json ou variáveis de ambiente:

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. Registe o IImageGenerator serviço com injeção de dependência:

    // 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
    });
    

    O AddImageGenerator método regista o gerador de imagens como um serviço singleton que pode ser injetado em controladores, serviços ou endpoints mínimos da API.

  4. Adicionar opções e registo:

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

    O código anterior:

Use o gerador de imagens nos endpoints

Depois de registado, pode injetar IImageGenerator nos seus endpoints ou serviços:

// 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);
});

Esta abordagem de alojamento oferece vários benefícios:

  • Gestão de configuração: As strings de ligação e definições são geridas através do sistema de configuração .NET.
  • Injeção de dependências: O gerador de imagens está disponível em toda a sua aplicação via DI.
  • Gestão do ciclo de vida: Os serviços são devidamente inicializados e eliminados pela infraestrutura de alojamento.
  • Testabilidade: Implementações simuladas podem ser facilmente substituídas por testes.
  • Integração com .NET Aspire: Ao usar .NET Aspire, o AddAzureOpenAIClient método integra-se com a descoberta de serviços e telemetria.

Melhores práticas

Ao implementar a geração de texto para imagem em seus aplicativos, considere estas práticas recomendadas:

  • Engenharia de prompts: escreva prompts claros e detalhados que descrevam a imagem desejada. Inclua detalhes específicos sobre estilo, composição, cores e elementos.
  • Gestão de custos: A geração de imagens pode ser cara. Armazene os resultados em cache quando possível e implemente o limite de taxa para controlar os custos.
  • Segurança de conteúdo: sempre revise as imagens geradas em busca de conteúdo apropriado, especialmente em aplicativos de produção. Considere a implementação de filtragem e moderação de conteúdo.
  • Experiência do usuário: a geração de imagens pode levar vários segundos. Forneça indicadores de progresso e lide com tempos limite de forma eficaz.
  • Considerações legais: Esteja ciente dos direitos de licenciamento e uso das imagens geradas. Analise os termos de serviço do seu provedor de IA.

Limpeza de recursos

Quando você não precisar mais do recurso OpenAI do Azure, exclua-o para evitar incorrer em encargos:

  1. No Portal do Azure, navegue até seu recurso do Azure OpenAI.
  2. Selecione o recurso e, em seguida, selecione Excluir.

Próximos passos

Você gerou com sucesso algumas imagens diferentes usando a IImageGenerator interface em Microsoft.Extensions.AI. Em seguida, você pode explorar algumas das funcionalidades adicionais, incluindo:

  • Refinar a imagem gerada iterativamente.
  • Editar uma imagem existente.
  • Personalizar uma imagem, diagrama ou tema.

Consulte também