このクイック スタートでは、 Microsoft.Extensions.AI (MEAI) ライブラリを使用して、AI モデルを使用してテキスト プロンプトから画像を生成します。 MEAI テキストからイメージへの機能を使用すると、一貫性のある拡張可能な API サーフェスを使用して、自然言語プロンプトまたは既存のイメージから画像を生成できます。
IImageGenerator インターフェイスには、さまざまなイメージ生成サービスを操作するための統合された拡張可能な API が用意されているため、テキストからイメージへの機能を .NET アプリに簡単に統合できます。 インターフェイスでは、次の機能がサポートされます。
- テキストからイメージへの生成。
- ミドルウェア (ログ記録、テレメトリ、キャッシュ) を使用したパイプラインの構成。
- 柔軟な構成オプション。
- 複数の AI プロバイダーのサポート。
注
IImageGenerator インターフェイスは現在、MEAI001診断 ID を持つ試験段階としてマークされています。 プロジェクト ファイルまたはコードでこの警告を抑制することが必要な場合があります。
[前提条件]
- .NET 8.0 SDK 以降 - .NET 8 SDKをインストールします。
- Azure サブスクリプション。無料で作成できます。
- Azure Developer CLI (省略可能) - Azure Developer CLIをインストールまたは更新します。
AI サービスを構成する
Azure portal を使用して Azure OpenAI サービスとモデルをプロビジョニングするには、「Azure OpenAI Service リソースの作成とデプロイ」 記事の手順を実行します。 [モデルのデプロイ] ステップで、 gpt-image-1 モデルを選択します。
注
gpt-image-1 は、DALL-E 3 よりもいくつかの改善を提供する新しいモデルです。 これは、限られたベースでOpenAIから利用可能です。 このフォームを使用してアクセスを申請します。
アプリケーションを作成する
テキスト プロンプトからイメージを生成する .NET コンソール アプリケーションを作成するには、次の手順を実行します。
新しいコンソール アプリケーションを作成します。
dotnet new console -o TextToImageAITextToImageAIディレクトリに移動し、必要なパッケージをアプリに追加します。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次のコマンドを実行して、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>任意のエディター (Visual Studio など) で新しいアプリを開きます。
基本的なイメージ生成を実装する
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拡張メソッドを使用して、IImageGeneratorをAsIImageGenerator(ImageClient)に変換します。
次のコードを追加して、基本的なテキストからイメージへの生成を実装します。
// 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); }前述のコード:
- ImageGenerationOptions.MediaTypeを設定して、要求されたイメージ ファイルの種類を設定します。
- テキスト プロンプトで GenerateImagesAsync(IImageGenerator, String, ImageGenerationOptions, CancellationToken) メソッドを使用して画像を生成します。
- 生成されたイメージをローカル ユーザー ディレクトリ内のファイルに保存します。
IDE または
dotnet runを使用して、アプリケーションを実行します。アプリケーションによってイメージが生成され、イメージへのファイル パスが出力されます。 ファイルを開いて、生成されたイメージを表示します。 次の図は、生成されたイメージの 1 つの例を示しています。
イメージ生成オプションを構成する
サイズ、応答形式、生成する画像の数などの他のオプションを提供することで、画像の生成をカスタマイズできます。 ImageGenerationOptions クラスを使用すると、次を指定できます。
- AdditionalProperties: プロバイダー固有のオプション。
- Count: 生成するイメージの数。
- ImageSize: 生成されたイメージの System.Drawing.Sizeとしての寸法。 サポートされているサイズについては、 OpenAI API リファレンスを参照してください。
- MediaType: 生成されたイメージのメディアの種類 (MIME の種類)。
- ModelId: モデル ID。
- RawRepresentationFactory: 基になる実装からイメージ生成オプションの生表現を作成するコールバック。
- ResponseFormat: オプションは、 Uri、 Data、および Hostedです。
ホスティング統合を使用する
Web アプリまたはホストされたサービスを構築するときに、依存関係の挿入とホスティング パターンを使用してイメージの生成を統合できます。 このアプローチにより、ライフサイクル管理、構成統合、およびテスト容易性が向上します。
ホスティング サービスを構成する
Aspire.Azure.AI.OpenAI パッケージには、Azure OpenAI サービスをアプリケーションの依存関係挿入コンテナーに登録するための拡張メソッドが用意されています。
必要なパッケージを Web アプリケーションに追加します。
dotnet add package Aspire.Azure.AI.OpenAI --prerelease dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prereleaseProgram.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" } }依存関係の挿入を使用して 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 エンドポイントに挿入できるシングルトン サービスとしてイメージ ジェネレーターを登録します。
オプションとログ記録の追加::
imageBuilder.ConfigureOptions(options => { options.MediaType = "image/png"; }).UseLogging();前述のコード:
- ConfigureOptions(ImageGeneratorBuilder, Action<ImageGenerationOptions>)でImageGeneratorBuilder拡張メソッドを呼び出してオプションを構成します。 このメソッドは、パイプライン内の次のジェネレーターに渡される ImageGenerationOptions を構成します。
- UseLogging(ImageGeneratorBuilder, ILoggerFactory, Action<LoggingImageGenerator>)拡張メソッドを呼び出して、イメージ ジェネレーター パイプラインにログ記録を追加します。
エンドポイントでイメージ ジェネレーターを使用する
登録が完了したら、エンドポイントまたはサービスに 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 リソースが不要になったら、料金が発生しないように削除します。
- Azure Portal で、Azure OpenAI リソースに移動します。
- リソースを選択し、[削除] を選択 します。
次のステップ
IImageGeneratorのMicrosoft.Extensions.AI インターフェイスを使用して、いくつかの異なるイメージが正常に生成されました。 次に、次のような追加機能の一部を確認できます。
- 生成されたイメージを繰り返し絞り込みます。
- 既存のイメージの編集。
- 画像、図、またはテーマをカスタマイズする。
こちらも参照ください
.NET