Delen via


Afbeeldingen genereren op basis van tekst met AI

In deze quickstart gebruikt u de Microsoft.Extensions.AI bibliotheek (MEAI) om afbeeldingen te genereren op basis van tekstprompts met behulp van een AI-model. Met de mogelijkheden voor tekst-naar-afbeelding van MEAI kunt u afbeeldingen genereren op basis van prompts in natuurlijke taal of bestaande afbeeldingen met behulp van een consistent en uitbreidbaar API-oppervlak.

De IImageGenerator interface biedt een geïntegreerde, uitbreidbare API voor het werken met verschillende services voor het genereren van afbeeldingen, waardoor u eenvoudig tekst-naar-afbeeldingsmogelijkheden kunt integreren in uw .NET-apps. De interface ondersteunt:

  • Genereren van tekst naar afbeelding.
  • Pijplijnsamenstelling met middleware (logboekregistratie, telemetrie, caching).
  • Flexibele configuratieopties.
  • Ondersteuning voor meerdere AI-providers.

Opmerking

De IImageGenerator interface is momenteel gemarkeerd als experimenteel met de MEAI001 diagnostische id. Mogelijk moet u deze waarschuwing onderdrukken in uw projectbestand of code.

Vereiste voorwaarden

De AI-service configureren

Als u een Azure OpenAI-service en -model wilt inrichten met behulp van Azure Portal, voert u de stappen in het Een Azure OpenAI-serviceresource maken en implementeren artikel uit. Selecteer in de stap Een model implementeren het gpt-image-1 model.

Opmerking

gpt-image-1 is een nieuwer model dat verschillende verbeteringen biedt ten opzichte van DALL-E 3. Het is op beperkte basis beschikbaar vanuit OpenAI; aanvragen voor toegang met dit formulier.

De toepassing maken

Voer de volgende stappen uit om een .NET-consoletoepassing te maken waarmee afbeeldingen worden gegenereerd op basis van tekstprompts.

  1. Maak een nieuwe consoletoepassing:

    dotnet new console -o TextToImageAI
    
  2. Ga naar de map TextToImageAI en voeg de benodigde pakketten toe aan uw app:

    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. Voer de volgende opdrachten uit om app-geheimen toe te voegen voor uw Azure OpenAI-eindpunt, modelnaam en API-sleutel:

    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. Open de nieuwe app in uw gewenste editor (bijvoorbeeld Visual Studio).

Eenvoudige beeldgeneratie implementeren

  1. Werk het Program.cs bestand bij met de volgende code om de configuratiegegevens op te halen en het AzureOpenAIClientvolgende te maken:

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

    De voorgaande code:

    • Laadt de configuratie van gebruikersgeheimen.
    • Hiermee wordt een ImageClient gemaakt van de OpenAI SDK.
    • Converteert de ImageClient naar een IImageGenerator met behulp van de AsIImageGenerator(ImageClient) extensiemethode.
  2. Voeg de volgende code toe om eenvoudige generatie van tekst-naar-afbeelding te implementeren:

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

    De voorgaande code:

  3. Voer de toepassing uit via de IDE of met behulp van dotnet run.

    De toepassing genereert een afbeelding en voert het bestandspad naar de afbeelding uit. Open het bestand om de gegenereerde afbeelding weer te geven. In de volgende afbeelding ziet u een voorbeeld van een gegenereerde afbeelding.

    Door AI gegenereerde afbeelding van een tennisbaan in een jungle.

Opties voor het genereren van afbeeldingen configureren

U kunt het genereren van afbeeldingen aanpassen door andere opties op te geven, zoals grootte, antwoordindeling en het aantal afbeeldingen dat moet worden gegenereerd. Met de ImageGenerationOptions klasse kunt u het volgende opgeven:

Hostingintegratie gebruiken

Wanneer u web-apps of gehoste services bouwt, kunt u het genereren van afbeeldingen integreren met behulp van afhankelijkheidsinjectie- en hostingpatronen. Deze aanpak biedt een beter levenscyclusbeheer, configuratie-integratie en testbaarheid.

Hostingservices configureren

Het Aspire.Azure.AI.OpenAI pakket biedt uitbreidingsmethoden voor het registreren van Azure OpenAI-services met de container voor afhankelijkheidsinjectie van uw toepassing:

  1. Voeg de benodigde pakketten toe aan uw webtoepassing:

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Configureer de Azure OpenAI-client en afbeeldingsgenerator in uw Program.cs bestand:

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

    De AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) methode registreert de Azure OpenAI-client met afhankelijkheidsinjectie. De verbindingsreeks (benoemd "openai") wordt opgehaald uit de configuratie, meestal uit appsettings.json of omgevingsvariabelen:

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. Registreer de IImageGenerator service met afhankelijkheidsinjectie:

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

    De AddImageGenerator methode registreert de image generator als een singleton service die kan injecteren in controllers, services of minimale API-eindpunten.

  4. Opties en logboekregistratie toevoegen::

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

    De voorgaande code:

Gebruik de afbeeldingengenerator in eindpunten

Zodra u zich geregistreerd hebt, kunt u IImageGenerator toevoegen aan uw eindpunten of services.

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

Deze hostingbenadering biedt verschillende voordelen:

  • Configuratiebeheer: verbindingsreeksen en -instellingen worden beheerd via het .NET-configuratiesysteem.
  • Afhankelijkheidsinjectie: De afbeeldingengenerator is beschikbaar in uw applicatie via DI.
  • Levenscyclusbeheer: Services worden correct geïnitialiseerd en verwijderd door de hostinginfrastructuur.
  • Testbaarheid: Mock-implementaties kunnen eenvoudig worden vervangen door tests.
  • Integratie met .NET Aspire: Wanneer u .NET Aspire gebruikt, kan de AddAzureOpenAIClient methode worden geïntegreerd met servicedetectie en telemetrie.

Beste praktijken

Houd bij het implementeren van het genereren van tekst-naar-afbeelding in uw toepassingen rekening met de volgende aanbevolen procedures:

  • Prompt engineering: schrijf duidelijke, gedetailleerde prompts die de gewenste afbeelding beschrijven. Voeg specifieke details toe over stijl, samenstelling, kleuren en elementen.
  • Kostenbeheer: het genereren van afbeeldingen kan duur zijn. Cacheresultaten indien mogelijk en implementeer snelheidsbeperking om kosten te beheren.
  • Inhoudsveiligheid: Bekijk altijd gegenereerde afbeeldingen voor de juiste inhoud, met name in productietoepassingen. Overweeg om inhoudsfilters en toezicht te implementeren.
  • Gebruikerservaring: het genereren van afbeeldingen kan enkele seconden duren. Geef voortgangsindicatoren op en handel time-outs soepel af.
  • Juridische overwegingen: houd rekening met licentie- en gebruiksrechten voor gegenereerde afbeeldingen. Bekijk de servicevoorwaarden voor uw AI-provider.

De hulpbronnen opschonen

Wanneer u de Azure OpenAI-resource niet meer nodig hebt, verwijdert u deze om kosten te voorkomen:

  1. Navigeer in Azure Portal naar uw Azure OpenAI-resource.
  2. Selecteer de resource en selecteer Verwijderen.

Volgende stappen

U hebt een aantal verschillende afbeeldingen gegenereerd met behulp van de IImageGenerator interface in Microsoft.Extensions.AI. Vervolgens kunt u enkele van de aanvullende functionaliteit verkennen, waaronder:

  • De gegenereerde afbeelding iteratief verfijnen.
  • Een bestaande afbeelding bewerken.
  • Een afbeelding, diagram of thema aanpassen.

Zie ook