🎯 C++からMicrosoft.Windows.AI
を呼び出す方法【サンプルコード付き】
Windows 10以降、Windowsには標準でONNX形式のAIモデルを実行できるランタイムが搭載されています。それが Windows ML (Windows.AI.MachineLearning) です。
この記事では、C++(Win32アプリベース) から Microsoft.Windows.AI.MachineLearning
を呼び出す方法を、サンプルコード付きで具体的に解説します。
✅ 準備編
◾ 必要環境
- Windows 10 (1809+) または Windows 11
- Visual Studio 2019 以降(Community 版でOK)
- C++/WinRT サポート (
Microsoft.Windows.CppWinRT
) - Windows SDK 10.0.17763.0 以上
✅ プロジェクト構成
Visual Studio で以下のような構成のプロジェクトを作ります。
タイプ:C++ Windows デスクトップアプリケーション(空のプロジェクト)
サブシステム:Windows(
WinMain
)NuGet で以下のパッケージを追加
1
Microsoft.Windows.CppWinRT
✅ サンプルコード
以下は WinMain
を使い、Win32 APIと Windows.AI.MachineLearning
を組み合わせた最小構成のサンプルです。
※ 使用するONNXモデルは
model.onnx
とし、実行ファイルと同じフォルダに配置してください。
main.cpp
|
|
✅ 補足:入力・出力Tensorの指定方法
モデルによっては、推論前に Tensor の作成とバインドが必要です。
例:
|
|
出力も同様に、result.Outputs().Lookup(L"output_0")
で取得可能です。
✅ デバッグ時の注意点
- モデルファイルが実行フォルダに存在しないと
FileNotFoundException
が出ます。 - 入出力名が一致していないと
invalid_argument
エラーになります。 - モデルの正確なIO仕様は Netron などのツールで確認可能。
✅ まとめ
項目 | 内容 |
---|---|
使用API | Windows.AI.MachineLearning (WinRT) |
言語 | C++(Win32ベース) |
推奨手法 | C++/WinRT ヘッダー経由 |
利点 | ONNXモデルがネイティブで動作、GPU対応も可 |
注意 | モデルの入力名とTensor形状に注意 |
✅ 代替案:WinRTを使いたくない人へ
- Microsoft製の
ONNX Runtime
を使えば、完全にWinRTなしでC++からONNXモデルを扱えます。 - クロスプラットフォーム対応で、Windows/Linuxでも共通コードが可能です。
📌 おわりに
Windows ML(Microsoft.Windows.AI)は、C++からでもしっかり使える強力なAI推論エンジンです。Windowsネイティブでの推論が必要な方は、ぜひ試してみてください。
ONNXモデルの作成やTensorバインディングの具体例が欲しい方は、続編記事で解説予定です!