AI イメージ生成機能は、Windows App SDK に付属する一連の人工知能ベースの安定した拡散型 (画像の処理に使用されるオープンソース AI モデル) API を通じて、Windows 上の Microsoft Foundry によってサポートされます。 これらの API は、Windows アプリで、自然言語プロンプトとデバイス上の生成モデルを使用して、画像や写真を作成、変換、および強化するために使用できます。
AI イメージ生成は、Windows Copilot+ PC の効率とパフォーマンスのために最適化されています。
API の詳細については、AI イメージング機能の API リファレンスを参照してください。
[前提条件]
- Windows バージョン: Windows 11 バージョン 24H2 (ビルド 26100) 以降
- WinAppSDK バージョン:バージョン 2.0 試験段階 (2.0.0-Experimental3)
- ハードウェア: NPU 対応 PC の推奨
AI イメージ生成でできること
AI イメージ生成を使用して、プロンプトを視覚的な成果物に変換します。 サポートされる機能は次のとおりです。
テキストからイメージへ
説明テキスト プロンプトから画像を生成します。 図、デザイン、カスタマイズされた背景、概念の視覚化に役立ちます。
画像から画像へ
構造を維持しながら、テキストガイダンスに基づいて既存の画像を変換します。 スタイル設定、テーマ設定、その他のバリエーションに役立ちます。
マジック フィル
画像のマスクされた領域に AI によって生成されたコンテンツを埋めます。 オブジェクトの削除、リージョンの修復、直感的な編集 (手動ツールではなくテキスト プロンプトによる複雑な変更) に役立ちます。
塗り絵のスタイル
画像を簡略化されたアウトラインに変換し、塗り絵や同様の教育体験に使用できます。
リスタイル
構造を維持しながら、既存の画像にアートスタイルまたはビジュアルスタイルを適用します。 クリエイティブ フィルター、アート モード、テーマ変換に役立ちます。
例示
AI イメージ生成 API を使用する場合は、次の基本的な手順に従います。
- EnsureReadyAsync を使用してモデルの準備ができていることを確認します。
- ImageGenerator インスタンスを作成します。
- 適切な生成ワークフロー (テキスト プロンプト、画像入力、またはマスク) を選択します。
- 対応する生成メソッドを呼び出します。
- 表示、編集、または保存用の ImageBuffer として出力を受け取ります。
テキスト プロンプトから画像を生成する (テキストからイメージへ)
この例では、テキスト プロンプトから画像を生成する方法を示します。 具体的には「山の湖に沈む美しい夕日」。
using Microsoft.Windows.AI.Imaging;
using Microsoft.Graphics.Imaging;
public async Task GenerateImageFromText()
{
// Check if models are ready
var readyState = ImageGenerator.GetReadyState();
if (readyState != AIFeatureReadyState.Ready)
{
// Download models if needed
var result = await ImageGenerator.EnsureReadyAsync();
if (result.Status != AIFeatureReadyResultState.Success)
{
Console.WriteLine("Failed to prepare models");
return;
}
}
// Create ImageGenerator instance
using var generator = await ImageGenerator.CreateAsync();
// Configure generation options
var options = new ImageGenerationOptions
{
MaxInferenceSteps = 6,
Creativity = 0.8,
Seed = 42
};
// Generate image
var result = generator.GenerateImageFromTextPrompt("A beautiful sunset over a mountain lake", options);
if (result.Status == ImageGeneratorResultStatus.Success)
{
var imageBuffer = result.Image;
// Use the generated image (save to file, display, etc.)
await SaveImageBufferAsync(imageBuffer, "generated_image.png");
}
else
{
Console.WriteLine($"Image generation failed: {result.Status}");
}
}
画像のスタイルを変換する (画像間の変換)
この例では、テキスト プロンプトに基づいて写真を油彩画に変換する方法を示します。 具体的には、"油彩スタイル、太いブラシストローク、芸術的"。
public async Task RestyleImage()
{
using var generator = await ImageGenerator.CreateAsync();
// Load input image
var inputImage = await LoadImageBufferAsync("photo.jpg");
var options = new ImageGenerationOptions();
var styleOptions = new ImageFromImageGenerationOptions
{
Style = ImageFromImageGenerationStyle.Restyle,
ColorPreservation = 0.7f
};
var result = generator.GenerateImageFromImageBuffer(
inputImage,
"oil painting style, thick brush strokes, artistic",
options,
styleOptions);
if (result.Status == ImageGeneratorResultStatus.Success)
{
await SaveImageBufferAsync(result.Image, "restyled_image.png");
}
}
画像スタイルを変換する (画像から画像への複合転送)
この例では、テキスト プロンプトに基づいて写真を油彩画に変換する方法を示します。 具体的には、「油彩、太いブラシストローク、豊富なカラーパレット、伝統的なキャンバステクスチャ、リアルな照明、古典的なファインアートスタイル、レイヤードペイント、ハイディテール、劇的なコントラスト、インパスト、テクスチャキャンバス」。
using Microsoft.Windows.AI.Imaging;
public async Task CreateImageFromPrompt()
{
using ImageGenerator model = await ImageGenerator.CreateAsync();
// Using default values
var options = new ImageGenerationOptions();
// Set ImageFromImageGenerationOptions fields
var imageFromImageOptions = new ImageFromImageGenerationOptions();
imageFromImageOptions.Style = ImageFromImageGenerationStyle.Restyle;
imageFromImageOptions.ColorPreservation = 0.5f; // range [0.0f, 1.0f]
// Load an input image buffer
using var inputImage = await Utils.LoadSampleImageBufferAsync("sdxl_input_horse.png");
var textPrompt = "An oil painting, thick brush strokes, rich color palette, traditional canvas texture, realistic lighting, classical fine art style, layered paint, high detail, dramatic contrast, impasto, textured canvas";
var result = model.GenerateImageFromImageBuffer(inputImage, textPrompt, options, imageFromImageOptions);
if (result.Status == ImageGeneratorResultStatus.Success)
{
// Image generated successfully
var imageBuffer = result.Image;
// Process the imageBuffer as needed, e.g., save to file or display
}
else
{
// Handle error cases based on result.Status
Console.WriteLine($"Image generation failed with status: {result.Status}");
}
}
マスクを使ったマジックフィル
この例では、マスクを使用してイメージの領域を塗りつぶす方法を示します。 具体的には「赤いスポーツカー」。
public async Task FillMaskedRegion()
{
using var generator = await ImageGenerator.CreateAsync();
var inputImage = await LoadImageBufferAsync("scene.jpg");
var maskImage = await LoadImageBufferAsync("mask.png"); // GRAY8 format
var options = new ImageGenerationOptions();
var result = generator.GenerateImageFromImageBufferAndMask(
inputImage,
maskImage,
"a red sports car",
options);
if (result.Status == ImageGeneratorResultStatus.Success)
{
await SaveImageBufferAsync(result.Image, "filled_image.png");
}
}
塗り絵スタイルの画像を生成する
この例では、塗り絵スタイルで画像を生成する方法を示します。 具体的には、"宇宙船内の猫" です。
using Microsoft.Windows.AI.Imaging;
public async Task CreateImageFromPrompt()
{
using ImageGenerator model = await ImageGenerator.CreateAsync();
// Using default values
var options = new ImageGenerationOptions();
// Set ImageFromTextGenerationOptions fields
var imageFromTextOptions = new ImageFromTextGenerationOptions();
imageFromTextOptions.Style = ImageFromTextGenerationStyle.ColoringBook;
var result = model.GenerateImageFromTextPrompt("Cat in spaceship", options, imageFromTextOptions);
if (result.Status == ImageGeneratorResultStatus.Success)
{
// Image generated successfully
var imageBuffer = result.Image;
// Process the imageBuffer as needed, e.g., save to file or display
}
else
{
// Handle error cases based on result.Status
Console.WriteLine($"Image generation failed with status: {result.Status}");
}
}
カスタム ImageGenerationOptions パラメーターを使用してイメージを生成する
この例では、一連のコンテンツ フィルターと制限に基づいてイメージを生成する方法を示します。 具体的には、TextContentFilterSeverity を 低 に、ImageContentFilterSeverity を 最低 に設定した宇宙船内の猫です。
using Microsoft.Windows.AI.Imaging;
using Microsoft.Windows.AI.ContentSafety;
public async Task CreateImageFromPromptAndCustomOptions()
{
using ImageGenerator model = await ImageGenerator.CreateAsync();
// Using default values
var options = new ImageGenerationOptions();
// Set custom ImageGenerationOptions fields
options.MaxInferenceSteps = 6;
options.Creativity = 0.8;
options.Seed = 1234;
ContentFilterOptions contentFilterOptions = new ContentFilterOptions();
contentFilterOptions.PromptMaxAllowedSeverityLevel = TextContentFilterSeverity(SeverityLevel.Low);
contentFilterOptions.ImageMaxAllowedSeverityLevel = ImageContentFilterSeverity(SeverityLevel.Minimium);
options.ContentFilterOptions = contentFilterOptions;
var result = model.GenerateImageFromTextPrompt("Cat in spaceship", options);
if (result.Status == ImageGeneratorResultStatus.Success)
{
// Image generated successfully
var imageBuffer = result.Image;
// Process the imageBuffer as needed, e.g., save to file or display
}
else
{
// Handle error cases based on result.Status
Console.WriteLine($"Image generation failed with status: {result.Status}");
}
}
責任ある AI
これらのイメージング API が信頼でき、安全で、責任を持って構築されていることを確認するために、次の手順を組み合わせて使用しました。 アプリで AI 機能を実装する場合は、「Windows での責任ある生成 AI 開発」で説明されているベスト プラクティスを確認することをお勧めします。