【问题标题】:Compile OpenCV 3 for Windows 10 IoT Core ARM (Raspberry Pi)为 Windows 10 IoT Core ARM (Raspberry Pi) 编译 OpenCV 3
【发布时间】: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


    【解决方案1】:

    我在尝试为在 Raspberry Pi 3 上运行的 Windows 10 IoT Core (10.0.16299.0) 编译 OpenCV 3.4.1 时遇到了一些困难,因此我决定与社区分享我的经验。

    要求

    您只需要继续:

    • OpenCV 源代码(来自Github)。 opencv 用于核心功能,opencv_contrib 用于附加模块。
    • CMake-gui (here)
    • 带有 ARM 工具集和 Windows 10 SDK 的 Visual Studio。

    我使用了最新的 Visual Studio 2017 (15.6.2)。社区版就够了。确保您拥有所需的 Visual Studio 组件:

    • 适用于 UWP 的 Windows 10 SDK (10.0.16299.0):C++
    • UWP 的 Visual C++ 运行时
    • 用于 ARM 的 Visual C++ 编译器和库

    SDK 版本显然应与目标操作系统平台版本相匹配。截至今天,它是 10.0.16299.0。

    配置

    启动 CMake-gui。选择您的 OpenCV 源代码(根路径)在哪里以及您希望构建的位置(配置、临时和输出)存储在哪里。点击配置

    在弹出窗口中选择 Visual Studio 15 2017 ARM 作为生成器(工具集和架构版本)并选择“指定交叉编译选项”

    提供:

    • 操作系统:WindowsStore
    • 版本:10.0
    • 处理器:ARM

    成功生成(可能带有一些警告)应以“配置完成”消息结束并显示 make 选项。

    寻找OPENCV_EXTRA_MODULES_PATH 选项并提供opencv_contrib/modules 文件夹的路径。

    再次点击配置

    现在您可以选择要包含在构建中的模块。 在我的配置中,我有:

    • 启用构建 opencv-world 单一库 (BUILD_opencv_world)
    • 禁用构建测试和应用程序(BUILD_TESTSBUILD_PERF_TESTSBUILD_opencv_apps
    • 可选)启用 Raspberry Pi NEON 和 VFP3 优化(ENABLE_VPF3=ONENABLE_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 平台的库。

    此外 - 您可以使用相同的过程为 x64x86 平台构建自己的配置:重新启动 Cmake-gui,选择不同的构建文件夹,然后在配置的第一步选择 Visual Studio 15 2017 x64x86 作为生成器,然后在交叉编译选项中进行相应的处理。其余的配置过程看起来是一样的。

    要在 Windows 10 IoT Core 上进一步使用 OpenCV,您可以查看 Microsoft 自己提供的示例,例如here.

    【讨论】:

    • 感谢您的分发。对于其他感兴趣的人来说,在 ARM 上为 IoT Core 编译 OpenCV 3.4 非常有帮助。
    • 按照您的指导,我在列表中找不到ENABLE_VPF3ENABLE_NEON。 @Pawel
    • 在 Cmake-gui 中,您可以使用“添加条目”将这些选项添加为布尔值。不幸的是,OpenCV 上存在一些未解决的问题,它们通常无法按预期工作。
    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2015-11-14
    相关资源
    最近更新 更多