使用 Windows ML 将模型集成到应用中

在本指南中,我们将介绍如何使用 Windows ML API 将模型集成到 Windows 应用中。 你也可以在想要使用 Windows ML 的自动代码生成器的情况下查看 mlgen

重要 APIWindows.AI.MachineLearning

我们将介绍 Windows ML 的基本构建基块,其中包括:

  • 模型
  • 会话
  • 设备
  • 绑定

我们将使用这些基块,通过 Windows ML 加载、绑定和评估模型。

我们还建议查看 GitHub 上的示例应用,了解端到端 Windows ML 代码示例。

以下视频介绍了在简短演示中操作的这些 API。


在 C++ 中使用 WinML API

尽管 WinML API 在 C++/CX 和 C++/WinRT 中都可用,但我们建议使用 C++/WinRT 版本,因为它允许进行更自然的 C++ 编码,将来可以在其中集中完成大多数开发工作。 可以按照下述与特定情况相关的说明来使用 C++/WinRT API:

  • 如果面向的是 Windows 1803 或更早版本,请参阅教程:将现有 WinML 应用移植到 NuGet 包
  • 如果要创建新的 C++ 应用程序,请参阅教程:创建 Windows 机器学习桌面应用程序 (C++),并按步骤操作,一直操作到“加载模型”
  • 如果有现有的 C++ 应用程序(尚未针对 C++/WinRT 进行设置),请按以下步骤设置适用于 C++/WinRT 的应用程序:
    1. 确保已安装最新版本的 Visual Studio 2019(任何版本)。
    2. 确保有用于 Windows 10 版本 1803 或更高版本的 SDK
    3. Visual Studio Marketplace 下载并安装 C++/WinRT Visual Studio 扩展 (VSIX)
    4. <CppWinRTEnabled>true</CppWinRTEnabled> 属性添加到项目的 .vcxproj 文件中:
      <Project ...>
          <PropertyGroup Label="Globals">
              <CppWinRTEnabled>true</CppWinRTEnabled>
      ...
      
    5. C++/WinRT 需要 C++17 标准版中的功能,因此,请在项目属性中设置“C/C++”>“语言”>“C++ 语言标准版”>“ISO C++17 标准版(/std:c++17)”
    6. 在项目属性中设置“符合性模式:是(/permissive-)”
    7. 要注意的另一个项目属性是“C/C++”>“常规”>“将警告视为错误”。 请根据喜好将此项设置为“是(/WX)”或“否(/WX-)”。 有时候,由 cppwinrt.exe 工具生成的源文件会生成警告,除非向其添加实现。
    8. VSIX 还提供 C++/WinRT 投影类型的 Visual Studio 本机调试可视化效果 (natvis),提供与 C# 调试类似的体验。 Natvis 对于调试版本是自动的。 可以通过定义 WINRT_NATVIS 符号选择加入其发布版本。
    9. 你的项目现在应该针对 C++/WinRT 设置好了。 有关详细信息,请参阅 C++/WinRT

注意

使用以下资源可获取有关 Windows ML 的帮助:

  • 若要提出或回答有关 Windows ML 的技术问题,请在 Stack Overflow 上使用 windows-machine-learning 标记。
  • 若要报告 bug,请在 GitHub 上提交问题。