Udostępnij przez


Generowanie obrazów na podstawie tekstu przy użyciu sztucznej inteligencji

W tym szybkim starcie użyjesz biblioteki Microsoft.Extensions.AI (MEAI), aby wygenerować obrazy na podstawie poleceń tekstowych przy użyciu modelu AI. Funkcje interfejsu MEAI text-to-image umożliwiają generowanie obrazów na podstawie monitów języka naturalnego lub istniejących obrazów przy użyciu spójnej i rozszerzalnej powierzchni interfejsu API.

Interfejs IImageGenerator udostępnia ujednolicony, rozszerzalny interfejs API do pracy z różnymi usługami generowania obrazów, co ułatwia integrowanie funkcji tekst-obraz z aplikacjami platformy .NET. Interfejs obsługuje:

  • Generowanie tekstu do obrazu.
  • Kompozycja potoku z zastosowaniem middleware (rejestrowanie, telemetria, buforowanie).
  • Elastyczne opcje konfiguracji.
  • Obsługa wielu dostawców sztucznej inteligencji.

Uwaga / Notatka

Interfejs IImageGenerator jest obecnie oznaczony jako eksperymentalny z identyfikatorem diagnostycznym MEAI001 . Może być konieczne pominięcie tego ostrzeżenia w pliku lub kodzie projektu.

Wymagania wstępne

Konfigurowanie usługi sztucznej inteligencji

Aby aprowizować usługę Azure OpenAI i model przy użyciu witryny Azure Portal, wykonaj kroki opisane w artykule Tworzenie i wdrażanie zasobu usługi Azure OpenAI Service. W kroku "Wdrażanie modelu" wybierz gpt-image-1 model.

Uwaga / Notatka

gpt-image-1 jest nowszym modelem, który oferuje kilka ulepszeń nad DALL-E 3. Jest dostępna od OpenAI w ograniczonym zakresie; można ubiegać się o dostęp za pomocą tego formularza.

Tworzenie aplikacji

Wykonaj poniższe kroki, aby utworzyć aplikację konsolową platformy .NET, która generuje obrazy na podstawie monitów tekstowych.

  1. Utwórz nową aplikację konsolową:

    dotnet new console -o TextToImageAI
    
  2. Przejdź do katalogu TextToImageAI i dodaj niezbędne pakiety do aplikacji:

    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. Uruchom następujące polecenia, aby dodać tajne informacje aplikacji dla punktu końcowego usługi Azure OpenAI, nazwy modelu i klucza 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. Otwórz nową aplikację w wybranym edytorze (na przykład Visual Studio).

Implementowanie podstawowego generowania obrazów

  1. Zaktualizuj plik Program.cs za pomocą następującego kodu, aby pobrać dane konfiguracji i utworzyć 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();
    

    Poprzedni kod:

    • Ładuje konfigurację z tajnych danych użytkownika.
    • Tworzy element ImageClient na podstawie zestawu OpenAI SDK.
    • Konwertuje element ImageClient na IImageGenerator przy użyciu AsIImageGenerator(ImageClient) metody rozszerzenia.
  2. Dodaj następujący kod, aby zaimplementować podstawowe generowanie tekstu do obrazu:

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

    Poprzedni kod:

  3. Uruchom aplikację za pośrednictwem środowiska IDE lub za pomocą polecenia dotnet run.

    Aplikacja generuje obraz i generuje ścieżkę pliku do obrazu. Otwórz plik, aby wyświetlić wygenerowany obraz. Na poniższej ilustracji przedstawiono jeden przykład wygenerowanego obrazu.

    Wygenerowany przez sztuczną inteligencję obraz kortu tenisowego w dżungli.

Konfigurowanie opcji generowania obrazów

Generowanie obrazu można dostosować, udostępniając inne opcje, takie jak rozmiar, format odpowiedzi i liczba obrazów do wygenerowania. Klasa ImageGenerationOptions umożliwia określenie:

Korzystanie z integracji hostingu

Podczas tworzenia aplikacji internetowych lub hostowanych usług można zintegrować generowanie obrazów przy użyciu wstrzykiwania zależności i wzorców hostingu. Takie podejście zapewnia lepsze zarządzanie cyklem życia, integrację konfiguracji i możliwość testowania.

Konfigurowanie usług hostingu

Pakiet Aspire.Azure.AI.OpenAI udostępnia metody rozszerzające do rejestrowania usług Azure OpenAI w kontenerze wstrzykiwania zależności Twojej aplikacji.

  1. Dodaj niezbędne pakiety do aplikacji internetowej:

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Skonfiguruj klienta usługi Azure OpenAI i generator obrazów w swoim pliku 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");
    

    Metoda AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) rejestruje klienta usługi Azure OpenAI za pomocą iniekcji zależności. Ciąg połączenia (o nazwie "openai") jest pobierany z konfiguracji, zazwyczaj z appsettings.json lub zmiennych środowiskowych.

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. Zarejestruj usługę za pomocą IImageGenerator iniekcji zależności:

    // 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 rejestruje generator obrazów jako pojedynczą usługę, którą można wstrzykiwać do kontrolerów, usług lub minimalnych punktów końcowych interfejsu API.

  4. Dodaj opcje i rejestrowanie::

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

    Poprzedni kod:

Używanie generatora obrazów w punktach dostępu

Po zarejestrowaniu możesz wstrzyknąć IImageGenerator do punktów końcowych lub usług:

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

Takie podejście hostingowe zapewnia kilka korzyści:

  • Zarządzanie konfiguracją: parametry połączenia i ustawienia są zarządzane za pośrednictwem systemu konfiguracji platformy .NET.
  • Wstrzykiwanie zależności: generator obrazów jest dostępny w całej aplikacji za pośrednictwem Dependency Injection.
  • Zarządzanie cyklem życia: usługi są prawidłowo inicjowane i usuwane przez infrastrukturę hostingu.
  • Możliwość testowania: implementacje makiety można łatwo zastąpić do testowania.
  • Integracja z platformą .NET Aspire: w przypadku korzystania z platformy .NET Aspire AddAzureOpenAIClient metoda integruje się z odnajdywaniem usług i telemetrią.

Najlepsze rozwiązania

Podczas implementowania generowania tekstu do obrazu w aplikacjach należy wziąć pod uwagę następujące najlepsze rozwiązania:

  • Inżynieria podpowiedzi: Napisz jasne, szczegółowe podpowiedzi opisujące pożądany obraz. Uwzględnij szczegółowe informacje o stylu, kompozycji, kolorach i elementach.
  • Zarządzanie kosztami: generowanie obrazów może być kosztowne. Buforuj wyniki, gdy jest to możliwe i zaimplementuj ograniczanie szybkości w celu kontrolowania kosztów.
  • Bezpieczeństwo zawartości: zawsze sprawdzaj wygenerowane obrazy pod kątem odpowiedniej zawartości, szczególnie w aplikacjach produkcyjnych. Rozważ zaimplementowanie filtrowania zawartości i moderowania.
  • Środowisko użytkownika: generowanie obrazów może potrwać kilka sekund. Zapewnij wskaźniki postępu i elegancko obsłuż limity czasu.
  • Zagadnienia prawne: Należy pamiętać o licencjach i prawach użytkowania do wygenerowanych obrazów. Zapoznaj się z warunkami świadczenia usługi dla dostawcy sztucznej inteligencji.

Uprzątnij zasoby

Jeśli zasób usługi Azure OpenAI nie jest już potrzebny, usuń go, aby uniknąć naliczania opłat:

  1. W witrynie Azure Portal przejdź do zasobu Azure OpenAI.
  2. Wybierz zasób, a następnie wybierz pozycję Usuń.

Dalsze kroki

Pomyślnie wygenerowano kilka różnych obrazów przy użyciu interfejsu IImageGenerator w pliku Microsoft.Extensions.AI. Następnie możesz zapoznać się z niektórymi dodatkowymi funkcjami, takimi jak:

  • Udoskonalanie wygenerowanego obrazu iteracyjnie.
  • Edytowanie istniejącego obrazu.
  • Personalizowanie obrazu, diagramu lub motywu.

Zobacz także