Integrate a model into your app with Windows ML
In this guide, we'll cover how to use the Windows ML APIs to integrate a model into your Windows app. Alternatively, if you'd like to use Windows ML's automatic code generator, check out mlgen.
Important APIs: Windows.AI.MachineLearning
We'll go over the basic building blocks of Windows ML, which are:
You'll use these to load, bind, and evaluate your models with Windows ML.
We also recommend taking a look at our sample apps on GitHub to see end-to-end Windows ML code examples.
The following video shows these APIs in action in a short demo.
Using WinML APIs in C++
While the WinML APIs are available in both C++/CX and C++/WinRT, we recommend using the C++/WinRT version, as it allows for more natural C++ coding and is where most development efforts will be focused going forward. You can follow the instructions below that pertain to your particular situation to use the C++/WinRT APIs:
- If you are targeting Windows 1803 or earlier, see Tutorial: Port an Existing WinML App to NuGet Package.
- If you are creating a new C++ application, see Tutorial: Create a Windows Machine Learning Desktop application (C++) and follow the steps up to Load the model.
- If you have an existing C++ application (which is not already set up for C++/WinRT), follow these steps to set up your application for C++/WinRT:
- Make sure you have the latest version of Visual Studio 2019 installed (any edition).
- Make sure you have the SDK for Windows 10, version 1803 or later.
- Download and install the C++/WinRT Visual Studio Extension (VSIX) from the Visual Studio Marketplace.
- Add the
<CppWinRTEnabled>true</CppWinRTEnabled>property to the project's .vcxproj file:
<Project ...> <PropertyGroup Label="Globals"> <CppWinRTEnabled>true</CppWinRTEnabled> ...
- C++/WinRT requires features from the C++17 standard, so in your project properties, set C/C++ > Language > C++ Language Standard > ISO C++17 Standard (/std:c++17).
- Set Conformance mode: Yes (/permissive-) in your project properties.
- Another project property to be aware of is C/C++ > General > Treat Warnings As Errors. Set this to Yes (/WX) or No (/WX-) to taste. Sometimes, source files generated by the cppwinrt.exe tool generate warnings until you add your implementation to them.
- The VSIX also gives you Visual Studio native debug visualization (natvis) of C++/WinRT projected types, providing an experience similar to C# debugging. Natvis is automatic for debug builds. You can opt into its release builds by defining the symbol WINRT_NATVIS.
- Your project should now be setup for C++/WinRT. See C++/WinRT for more information.