次の方法で共有


AI を使用してテキストから画像を生成する

このクイック スタートでは、 Microsoft.Extensions.AI (MEAI) ライブラリを使用して、AI モデルを使用してテキスト プロンプトから画像を生成します。 MEAI テキストからイメージへの機能を使用すると、一貫性のある拡張可能な API サーフェスを使用して、自然言語プロンプトまたは既存のイメージから画像を生成できます。

IImageGenerator インターフェイスには、さまざまなイメージ生成サービスを操作するための統合された拡張可能な API が用意されているため、テキストからイメージへの機能を .NET アプリに簡単に統合できます。 インターフェイスでは、次の機能がサポートされます。

  • テキストからイメージへの生成。
  • ミドルウェア (ログ記録、テレメトリ、キャッシュ) を使用したパイプラインの構成。
  • 柔軟な構成オプション。
  • 複数の AI プロバイダーのサポート。

IImageGenerator インターフェイスは現在、MEAI001診断 ID を持つ試験段階としてマークされています。 プロジェクト ファイルまたはコードでこの警告を抑制することが必要な場合があります。

[前提条件]

AI サービスを構成する

Azure portal を使用して Azure OpenAI サービスとモデルをプロビジョニングするには、「Azure OpenAI Service リソースの作成とデプロイ」 記事の手順を実行します。 [モデルのデプロイ] ステップで、 gpt-image-1 モデルを選択します。

gpt-image-1 は、DALL-E 3 よりもいくつかの改善を提供する新しいモデルです。 これは、限られたベースでOpenAIから利用可能です。 このフォームを使用してアクセスを申請します。

アプリケーションを作成する

テキスト プロンプトからイメージを生成する .NET コンソール アプリケーションを作成するには、次の手順を実行します。

  1. 新しいコンソール アプリケーションを作成します。

    dotnet new console -o TextToImageAI
    
  2. TextToImageAI ディレクトリに移動し、必要なパッケージをアプリに追加します。

    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 エンドポイント、モデル名、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. 任意のエディター (Visual Studio など) で新しいアプリを開きます。

基本的なイメージ生成を実装する

  1. Program.cs ファイルを次のコードで更新して構成データを取得し、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();
    

    前述のコード:

    • ユーザー シークレットから構成を読み込みます。
    • OpenAI SDK から ImageClient を作成します。
    • ImageClient拡張メソッドを使用して、IImageGeneratorAsIImageGenerator(ImageClient)に変換します。
  2. 次のコードを追加して、基本的なテキストからイメージへの生成を実装します。

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

    前述のコード:

  3. IDE または dotnet runを使用して、アプリケーションを実行します。

    アプリケーションによってイメージが生成され、イメージへのファイル パスが出力されます。 ファイルを開いて、生成されたイメージを表示します。 次の図は、生成されたイメージの 1 つの例を示しています。

    ジャングル内のテニスコートの AI によって生成された画像。

イメージ生成オプションを構成する

サイズ、応答形式、生成する画像の数などの他のオプションを提供することで、画像の生成をカスタマイズできます。 ImageGenerationOptions クラスを使用すると、次を指定できます。

ホスティング統合を使用する

Web アプリまたはホストされたサービスを構築するときに、依存関係の挿入とホスティング パターンを使用してイメージの生成を統合できます。 このアプローチにより、ライフサイクル管理、構成統合、およびテスト容易性が向上します。

ホスティング サービスを構成する

Aspire.Azure.AI.OpenAI パッケージには、Azure OpenAI サービスをアプリケーションの依存関係挿入コンテナーに登録するための拡張メソッドが用意されています。

  1. 必要なパッケージを Web アプリケーションに追加します。

    dotnet add package Aspire.Azure.AI.OpenAI --prerelease
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    
  2. Program.cs ファイルで 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");
    

    AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>, Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>)メソッドは、依存関係の挿入に Azure OpenAI クライアントを登録します。 接続文字列 ( "openai" という名前) は構成から取得されます。通常は、 appsettings.json または環境変数から取得されます。

    {
      "ConnectionStrings": {
        "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key"
      }
    }
    
  3. 依存関係の挿入を使用して IImageGenerator サービスを登録します。

    // 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 メソッドは、コントローラー、サービス、または最小限の API エンドポイントに挿入できるシングルトン サービスとしてイメージ ジェネレーターを登録します。

  4. オプションとログ記録の追加::

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

    前述のコード:

エンドポイントでイメージ ジェネレーターを使用する

登録が完了したら、エンドポイントまたはサービスに 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);
});

このホスティング アプローチには、いくつかの利点があります。

  • 構成管理: 接続文字列と設定は、.NET 構成システムを介して管理されます。
  • 依存関係の挿入: イメージ ジェネレーターは、DI を介してアプリケーション全体で使用できます。
  • ライフサイクル管理: サービスは、ホスティング インフラストラクチャによって適切に初期化され、破棄されます。
  • テスト容易性: テストのためにモック実装を簡単に置き換えることができます。
  • .NET Aspire との統合: .NET Aspire を使用する場合、 AddAzureOpenAIClient メソッドはサービスの検出とテレメトリと統合されます。

ベスト プラクティス

アプリケーションでテキストからイメージへの生成を実装する場合は、次のベスト プラクティスを検討してください。

  • プロンプト エンジニアリング: 目的の画像を記述する明確で詳細なプロンプトを記述します。 スタイル、コンポジション、色、および要素に関する具体的な詳細を含めます。
  • コスト管理: イメージの生成にはコストがかかる場合があります。 可能な限り結果をキャッシュし、レート制限を実装してコストを制御します。
  • コンテンツの安全性: 生成された画像を、特に運用環境のアプリケーションで、適切なコンテンツについて常に確認します。 コンテンツのフィルター処理とモデレーションを実装することを検討してください。
  • ユーザー エクスペリエンス: 画像の生成には数秒かかることがあります。 進行状況インジケーターを提供し、タイムアウトを適切に処理します。
  • 法的な考慮事項: 生成されたイメージのライセンスと使用権に注意してください。 AI プロバイダーのサービス条件を確認します。

リソースをクリーンアップする

Azure OpenAI リソースが不要になったら、料金が発生しないように削除します。

  1. Azure Portal で、Azure OpenAI リソースに移動します。
  2. リソースを選択し、[削除] を選択 します

次のステップ

IImageGeneratorMicrosoft.Extensions.AI インターフェイスを使用して、いくつかの異なるイメージが正常に生成されました。 次に、次のような追加機能の一部を確認できます。

  • 生成されたイメージを繰り返し絞り込みます。
  • 既存のイメージの編集。
  • 画像、図、またはテーマをカスタマイズする。

こちらも参照ください