Aracılığıyla paylaş


Yapay zeka kullanarak metinden görüntü oluşturma

Bu hızlı başlangıçta, yapay zeka modeli kullanarak metin istemlerinden görüntü oluşturmak için (MEAI) kitaplığını kullanacaksınız Microsoft.Extensions.AI . MEAI metinden görüntüye özellikleri, tutarlı ve genişletilebilir bir API yüzeyi kullanarak doğal dil istemlerinden veya mevcut görüntülerden görüntüler oluşturmanıza olanak sağlar.

Arabirim IImageGenerator , çeşitli görüntü oluşturma hizmetleriyle çalışmak için birleşik, genişletilebilir bir API sağlayarak metinden görüntüye özelliklerini .NET uygulamalarınızla tümleştirmeyi kolaylaştırır. Arabirim aşağıdakileri destekler:

  • Metinden görüntüye oluşturma.
  • Orta katman yazılımı (günlüğe kaydetme, telemetri, önbelleğe alma) kullanarak işlem hattı oluşturma.
  • Esnek yapılandırma seçenekleri.
  • Birden çok yapay zeka sağlayıcısı desteği.

Uyarı

IImageGenerator arabirimi şu anda MEAI001 tanılama kimliğiyle deneysel olarak işaretlenmiştir. Proje dosyanızda veya kodunuzda bu uyarıyı gizlemeniz gerekebilir.

Önkoşullar

Yapay zeka hizmetini yapılandırma

Azure portalını kullanarak bir Azure OpenAI hizmeti ve modeli sağlamak için Azure OpenAI Hizmeti kaynağı oluşturma ve dağıtma makalesindeki adımları tamamlayın. "Model dağıtma" adımında gpt-image-1 modeli seçin.

Uyarı

gpt-image-1 DALL-E 3 üzerinde çeşitli iyileştirmeler sunan daha yeni bir modeldir. OpenAI'den sınırlı erişimle kullanılabilir; bu formla erişim için başvurun.

Uygulamayı oluşturma

Metin istemlerinden görüntü oluşturan bir .NET konsol uygulaması oluşturmak için aşağıdaki adımları tamamlayın.

  1. Yeni bir konsol uygulaması oluşturun:

    dotnet new console -o TextToImageAI
    
  2. TextToImageAI dizinine gidin ve gerekli paketleri uygulamanıza ekleyin:

    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 uç noktanız, model adınız ve API anahtarınız için uygulama gizli dizileri eklemek için aşağıdaki komutları çalıştırın:

    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. Yeni uygulamayı istediğiniz düzenleyicide (örneğin, Visual Studio) açın.

Temel görüntü oluşturmayı uygulama

  1. Program.cs dosyasını aşağıdaki kodla güncelleştirerek yapılandırma verilerini alın ve AzureOpenAIClient oluşturun:

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

    Önceki kod:

    • Kullanıcı gizli bilgilerinden yapılandırmayı yükler.
    • OpenAI SDK'sından bir ImageClient oluşturur.
    • uzantısı yöntemini kullanarak ImageClient öğesini IImageGenerator öğesine AsIImageGenerator(ImageClient) dönüştürür.
  2. Temel metinden görüntüye oluşturmayı uygulamak için aşağıdaki kodu ekleyin:

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

    Önceki kod:

  3. Uygulamayı IDE aracılığıyla veya kullanarak dotnet runçalıştırın.

    Uygulama bir görüntü oluşturur ve dosya yolunu görüntüye aktarır. Oluşturulan görüntüyü görüntülemek için dosyayı açın. Aşağıdaki görüntüde, oluşturulan görüntünün bir örneği gösterilmektedir.

    Ormandaki tenis kortunun yapay zeka tarafından oluşturulan görüntüsü.

Görüntü oluşturma seçeneklerini yapılandırma

Boyut, yanıt biçimi ve oluşturulacak görüntü sayısı gibi diğer seçenekleri sağlayarak görüntü oluşturmayı özelleştirebilirsiniz. ImageGenerationOptions sınıfı şunları belirtmenize olanak tanır:

Barındırma tümleştirmesi kullanma

Web uygulamaları veya barındırılan hizmetler oluştururken bağımlılık ekleme ve barındırma desenlerini kullanarak görüntü oluşturmayı tümleştirebilirsiniz. Bu yaklaşım daha iyi yaşam döngüsü yönetimi, yapılandırma tümleştirmesi ve test edilebilirlik sağlar.

Barındırma hizmetlerini yapılandırma

Paket, Aspire.Azure.AI.OpenAI Azure OpenAI hizmetlerini uygulamanızın bağımlılık ekleme kapsayıcısına kaydetmek için uzantı yöntemleri sağlar:

  1. Web uygulamanıza gerekli paketleri ekleyin:

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Dosyanızda Program.cs Azure OpenAI istemcisini ve görüntü oluşturucuyu yapılandırın:

    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>>) yöntemi, Azure OpenAI istemcisini bağımlılık enjeksiyonu ile kaydeder. Bağlantı dizesi (adlı "openai"), genellikle appsettings.json'den veya ortam değişkenlerinden yapılandırmadan alınır.

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. IImageGenerator Hizmeti bağımlılık enjeksiyonu ile kaydedin.

    // 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 yöntemi, görüntü oluşturucuyu denetleyicilere, hizmetlere veya en düşük API uç noktalarına ekleyebileceğiniz tek bir hizmet olarak kaydeder.

  4. Seçenekler ve kayıt ekleme::

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

    Önceki kod:

Uç noktalarda görüntü oluşturucuyu kullanma

Kaydedildikten sonra uç noktalarınıza veya hizmetlerinize ekleyebilirsiniz 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);
});

Bu barındırma yaklaşımı çeşitli avantajlar sağlar:

  • Yapılandırma yönetimi: Bağlantı dizeleri ve ayarları .NET yapılandırma sistemi üzerinden yönetilir.
  • Bağımlılık ekleme: Görüntü oluşturucu, uygulamanız genelinde DI aracılığıyla kullanılabilir.
  • Yaşam döngüsü yönetimi: Hizmetler, barındırma altyapısı tarafından düzgün bir şekilde başlatılır ve sonlandırılır.
  • Test edilebilirlik: Sahte uygulamalar, test için kolayca değiştirilebilir.
  • .NET Aspire ile tümleştirme: .NET Aspire kullanılırken, AddAzureOpenAIClient yöntem hizmet bulma ve telemetri ile tümleşir.

En iyi yöntemler

Uygulamalarınızda metinden görüntüye oluşturma uygularken şu en iyi yöntemleri göz önünde bulundurun:

  • İstem mühendisliği: İstenen görüntüyü açıklayan net ve ayrıntılı istemler yazın. Stil, kompozisyon, renkler ve öğeler hakkında belirli ayrıntıları ekleyin.
  • Maliyet yönetimi: Görüntü oluşturma pahalı olabilir. Mümkün olduğunda sonuçları önbelleğe alın ve maliyetleri denetlemek için hız sınırlaması uygulayın.
  • İçerik güvenliği: Özellikle üretim uygulamalarında her zaman uygun içerik için oluşturulan görüntüleri gözden geçirin. İçerik filtreleme ve moderasyonu uygulamayı göz önünde bulundurun.
  • Kullanıcı deneyimi: Görüntü oluşturma işlemi birkaç saniye sürebilir. İlerleme göstergeleri sağlayın ve zaman aşımlarını düzgün bir şekilde işleyin.
  • Yasal konular: Oluşturulan görüntüler için lisanslama ve kullanım haklarının farkında olun. Yapay zeka sağlayıcınız için hizmet koşullarını gözden geçirin.

Kaynakları temizle

Azure OpenAI kaynağına artık ihtiyacınız kalmadığında ücret yansıtılmasını önlemek için kaynağı silin:

  1. Azure Portalı'nda Azure OpenAI kaynağınıza gidin.
  2. Kaynağı ve ardından Sil'i seçin.

Sonraki Adımlar

IImageGenerator arabirimini Microsoft.Extensions.AI içinde kullanarak çeşitli farklı görüntüler başarıyla oluşturdunuz. Ardından, aşağıdakiler dahil olmak üzere bazı ek işlevleri keşfedebilirsiniz:

  • Oluşturulan görüntüyü yinelemeli olarak iyileştirme.
  • Var olan bir görüntüyü düzenleme.
  • Resmi, diyagramı veya temayı kişiselleştirme.

Ayrıca bakınız