Windows 上の Microsoft Foundry は、Windows App SDK に付属する、人工知能に基づく安定した拡散型 (画像の処理に使用されるオープンソース AI モデル) API のセットを通じて、AI イメージ生成機能をサポートしています。 Windows アプリでこれらの API を使用すると、自然言語プロンプトとデバイス上の生成モデルを使用して、画像や写真を作成、変換、および強化できます。
AI イメージ生成は、Windows Copilot+ PC の効率とパフォーマンスのために最適化されています。
API の詳細については、AI イメージング機能の API リファレンスを参照してください。
Important
パッケージ マニフェストの要件: Windows AI イメージング API を使用するには、systemAIModelsで宣言されたPackage.appxmanifest機能を備えた MSIX パッケージとしてアプリをパッケージ化する必要があります。 さらに、マニフェストの MaxVersionTested 属性が最新の Windows バージョン ( 10.0.26226.0 以降など) に設定されていることを確認して、Windows AI 機能を適切にサポートします。 古い値を使用すると、モデルの読み込み時に "アプリによって宣言されていません" エラーが発生する可能性があります。
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
</Dependencies>
[前提条件]
- 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 を使用して Windows アプリでイメージを変更または生成する場合は、透明性やユーザーの信頼など、責任ある AI の推奨事項に従います。 生成または変更されたイメージの発生元と履歴をユーザーが理解できるように、コンテンツ の証明と信頼性のための連合 (C2PA) 標準で指定されているコンテンツ資格情報を指定します。
Windows アプリで AI 機能を実装する場合のベスト プラクティスについては、 Windows での責任ある生成 AI 開発 に関するページを参照してください。