Sdílet prostřednictvím


Generování obrázků z textu pomocí AI

V tomto rychlém startu použijete knihovnu Microsoft.Extensions.AI (MEAI) ke generování obrázků z textových výzev pomocí modelu AI. Funkce MEAI typu text-to-image umožňují generovat obrázky z výzev přirozeného jazyka nebo existujících obrázků pomocí konzistentního a rozšiřitelného povrchu rozhraní API.

Rozhraní IImageGenerator poskytuje jednotné a rozšiřitelné rozhraní API pro práci s různými službami generování imagí, což usnadňuje integraci funkcí převodu textu na obrázek do aplikací .NET. Rozhraní podporuje:

  • Generování textu na obrázek
  • Složení kanálu pomocí middlewaru (protokolování, telemetrie, ukládání do mezipaměti).
  • Flexibilní možnosti konfigurace
  • Podpora více poskytovatelů AI

Poznámka:

Rozhraní IImageGenerator je aktuálně označeno jako experimentální s ID diagnostiky MEAI001 . Toto upozornění může být potřeba potlačit v souboru nebo kódu projektu.

Požadavky

Konfigurace služby AI

Pokud chcete zřídit službu a model Azure OpenAI pomocí webu Azure Portal, proveďte kroky v článku Vytvoření a nasazení prostředku služby Azure OpenAI. V kroku Nasazení modelu vyberte gpt-image-1 model.

Poznámka:

gpt-image-1 je novější model, který nabízí několik vylepšení oproti DALL-E 3. Je k dispozici od OpenAI na omezeném základě; požádat o přístup pomocí tohoto formuláře.

Vytvoření aplikace

Provedením následujících kroků vytvořte konzolovou aplikaci .NET, která generuje obrázky z textových výzev.

  1. Vytvořte novou konzolovou aplikaci:

    dotnet new console -o TextToImageAI
    
  2. Přejděte do adresáře TextToImageAI a přidejte do aplikace potřebné balíčky:

    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. Spuštěním následujících příkazů přidejte tajné kódy aplikací pro koncový bod Azure OpenAI, název modelu a klíč rozhraní 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. Otevřete novou aplikaci v libovolném editoru (například v sadě Visual Studio).

Implementovat základní generaci obrázků

  1. Program.cs Aktualizujte soubor následujícím kódem, abyste získali konfigurační data a vytvořiliAzureOpenAIClient:

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

    Předchozí kód:

    • Načte konfiguraci z tajných kódů uživatelů.
    • Vytvoří ImageClient pomocí sady OpenAI SDK.
    • Převede ImageClient na IImageGenerator pomocí metody rozšíření AsIImageGenerator(ImageClient).
  2. Přidejte následující kód pro implementaci základního generování textu na obrázek:

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

    Předchozí kód:

  3. Spusťte aplikaci prostřednictvím integrovaného vývojového prostředí (IDE) nebo pomocí dotnet run.

    Aplikace vygeneruje obrázek a vypíše cestu k souboru s obrázkem. Otevřete soubor a zobrazte vygenerovaný obrázek. Následující obrázek ukazuje jeden příklad vygenerované image.

    Obrázek tenisového kurtu v džungli vygenerovaný AI.

Konfigurace možností generování image

Generování obrázků můžete přizpůsobit tak, že poskytnete další možnosti, jako je velikost, formát odpovědi a počet obrázků, které se mají vygenerovat. Třída ImageGenerationOptions umožňuje zadat:

Použijte hostovací integraci

Při vytváření webových aplikací nebo hostovaných služeb můžete integrovat generování imagí pomocí injektáže závislostí a vzorů hostování. Tento přístup poskytuje lepší správu životního cyklu, integraci konfigurace a testovatelnost.

Konfigurace hostitelských služeb

Balíček Aspire.Azure.AI.OpenAI poskytuje metody rozšíření pro registraci služeb Azure OpenAI v kontejneru injektáže závislostí vaší aplikace:

  1. Přidejte do webové aplikace potřebné balíčky:

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Nakonfigurujte v Program.cs souboru generátor obrázků a klienta Azure OpenAI:

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

    Metoda AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) zaregistruje klienta Azure OpenAI pomocí injektáže závislostí. Připojovací řetězec (pojmenovaný "openai") se načte z konfigurace, obvykle z appsettings.json nebo z proměnných prostředí.

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. IImageGenerator Zaregistrujte službu pomocí injektáže závislostí:

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

    Metoda AddImageGenerator zaregistruje generátor obrázků jako službu singleton, která se dá vložit do kontrolerů, služeb nebo minimálních koncových bodů rozhraní API.

  4. Přidejte možnosti a protokolování:

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

    Předchozí kód:

Použití generátoru obrázků v koncových bodech

Po registraci můžete vkládat IImageGenerator do koncových bodů nebo služeb:

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

Tento přístup k hostování nabízí několik výhod:

  • Správa konfigurace: Připojovací řetězce a nastavení se spravují prostřednictvím konfiguračního systému .NET.
  • Injektáž závislostí: Generátor obrázků je k dispozici v celé aplikaci prostřednictvím DI.
  • Správa životního cyklu: Služby jsou správně inicializovány a uvolněny hostitelskou infrastrukturou.
  • Testovatelnost: Mock implementace lze snadno použít pro testování.
  • Integrace s .NET Aspire: Při použití rozhraní .NET Aspire se AddAzureOpenAIClient metoda integruje se zjišťováním služeb a telemetrií.

Osvědčené postupy

Při implementaci generování textu na image ve vašich aplikacích zvažte tyto osvědčené postupy:

  • Příprava výzvy: Zadejte jasné podrobné výzvy, které popisují požadovaný obrázek. Uveďte konkrétní podrobnosti o stylu, složení, barvách a prvech.
  • Správa nákladů: Generování imagí může být nákladné. Ukládejte výsledky do mezipaměti, pokud je to možné, a implementujte omezování rychlosti pro řízení nákladů.
  • Bezpečnost obsahu: Vždy zkontrolujte vygenerované obrázky pro příslušný obsah, zejména v produkčních aplikacích. Zvažte implementaci filtrování obsahu a moderování.
  • Uživatelské prostředí: Generování obrázků může trvat několik sekund. Poskytněte indikátory průběhu a řádně zpracujte časové limity.
  • Právní aspekty: Mějte na paměti licenční a práva k používání generovaných imagí. Přečtěte si podmínky služby pro vašeho poskytovatele AI.

Vyčistěte zdroje

Pokud už prostředek Azure OpenAI nepotřebujete, odstraňte ho, abyste se vyhnuli poplatkům:

  1. Na webu Azure Portal přejděte k prostředku Azure OpenAI.
  2. Vyberte prostředek a pak vyberte Odstranit.

Další kroky

Úspěšně jste vygenerovali několik různých obrázků pomocí IImageGenerator rozhraní v Microsoft.Extensions.AI. Dále můžete prozkoumat některé další funkce, mezi které patří:

  • Iterativní upřesnění vygenerovaného obrázku
  • Úprava existujícího obrázku
  • Přizpůsobení obrázku, diagramu nebo motivu

Viz také