【发布时间】:2018-03-18 17:16:30
【问题描述】:
使用 Windows 操作系统上托管的 Visual Studio 为 Windows 10 IoT Core ARM (Raspberry Pi) 编译 OpenCV 3.* 的最简单方法是什么?
我可以在其他贡献模块中使用 DNN(深度神经网络)模块吗?
【问题讨论】:
标签: opencv arm raspberry-pi3 windowsiot windows-iot-core-10
使用 Windows 操作系统上托管的 Visual Studio 为 Windows 10 IoT Core ARM (Raspberry Pi) 编译 OpenCV 3.* 的最简单方法是什么?
我可以在其他贡献模块中使用 DNN(深度神经网络)模块吗?
【问题讨论】:
标签: opencv arm raspberry-pi3 windowsiot windows-iot-core-10
我在尝试为在 Raspberry Pi 3 上运行的 Windows 10 IoT Core (10.0.16299.0) 编译 OpenCV 3.4.1 时遇到了一些困难,因此我决定与社区分享我的经验。
您只需要继续:
我使用了最新的 Visual Studio 2017 (15.6.2)。社区版就够了。确保您拥有所需的 Visual Studio 组件:
SDK 版本显然应与目标操作系统平台版本相匹配。截至今天,它是 10.0.16299.0。
启动 CMake-gui。选择您的 OpenCV 源代码(根路径)在哪里以及您希望构建的位置(配置、临时和输出)存储在哪里。点击配置。
在弹出窗口中选择 Visual Studio 15 2017 ARM 作为生成器(工具集和架构版本)并选择“指定交叉编译选项”。
提供:
成功生成(可能带有一些警告)应以“配置完成”消息结束并显示 make 选项。
寻找OPENCV_EXTRA_MODULES_PATH 选项并提供opencv_contrib/modules 文件夹的路径。
再次点击配置。
现在您可以选择要包含在构建中的模块。 在我的配置中,我有:
BUILD_opencv_world)BUILD_TESTS、BUILD_PERF_TESTS、BUILD_opencv_apps)ENABLE_VPF3=ON、ENABLE_NEON=ON)。您可以使用 Cmake 中的“添加条目”(作为布尔值)添加它们,但目前一些 OpenCV 会在处理这些选项时出现问题。我不得不禁用描述符 (BUILD_opencv_line_descriptor) 和显着性模块 (BUILD_opencv_saliency),因为它们在 Microsoft 特定的 __popcnt 上存在问题,这在 ARM 平台上无法用于 MS 编译器。
我使用了一个技巧来为 Windows 启用 DNN 模块。在/modules/dnn/CMakeList.txt 中,您必须评论前三行:
#if(WINRT)
# ocv_module_disable(dnn)
#endif()
再次配置并点击生成。在 Visual Studio 中打开项目 (.SLN)。
默认项目是 ALL_BUILD,这是要构建的项目。选择要构建的配置(发布或调试)。请注意,生成的导入库 (.lib) 和 dll (.dll) 对于不同的配置会有不同的名称。
就是这样!这些库可以链接到 UWP 应用程序 (C++/CX) 和 ARM 平台的库。
此外 - 您可以使用相同的过程为 x64 或 x86 平台构建自己的配置:重新启动 Cmake-gui,选择不同的构建文件夹,然后在配置的第一步选择 Visual Studio 15 2017 x64 或 x86 作为生成器,然后在交叉编译选项中进行相应的处理。其余的配置过程看起来是一样的。
要在 Windows 10 IoT Core 上进一步使用 OpenCV,您可以查看 Microsoft 自己提供的示例,例如here.
【讨论】:
ENABLE_VPF3 和ENABLE_NEON。 @Pawel