What is the easiest way compile OpenCV 3.* for Windows 10 IoT Core ARM (Raspberry Pi) using Visual Studio hosted on Windows OS?
Can I use DNN (Deep Neural Network) module among other contrib modules?
I struggled a bit trying to compile OpenCV 3.4.1 for Windows 10 IoT Core (10.0.16299.0) running on Raspberry Pi 3, so I decided to share my experience with the community.
All you need to proceed is:
I used most recent Visual Studio 2017 (15.6.2). Community Edition is enough. Make sure you have required Visual Studio components:
Version of SDK obviously shall match target OS platform version. As of today it's 10.0.16299.0.
Start CMake-gui. Select where are your OpenCV source codes (root path) and where you want you build (configuration, temp and output) to be stored. Click Configure.
In the popup window select Visual Studio 15 2017 ARM as a generator (toolset and architecture version) and select "Specify options for cross-compiling".
Provide:
Successful generation (possibly with some warnings) shall end up with "Configuration done" message and showing make options.
Look for OPENCV_EXTRA_MODULES_PATH
option and provide path to you opencv_contrib/modules
folder.
Click Configure again.
Now you can select modules you wish to include in your build. In my configuration I have:
BUILD_opencv_world
)BUILD_TESTS
, BUILD_PERF_TESTS
, BUILD_opencv_apps
)ENABLE_VPF3=ON
, ENABLE_NEON=ON
). You can add them using 'add entry' in Cmake (as boolean), but there currently some OpenCV make issues processing those options.I had to disable descriptor (BUILD_opencv_line_descriptor
) and saliency modules (BUILD_opencv_saliency
) cause they have problems with Microsoft specific __popcnt, which is no available on ARM platform for MS compiler.
And I used a trick to enable DNN module for Windows. In /modules/dnn/CMakeList.txt you have to comment first three lines:
#if(WINRT)
# ocv_module_disable(dnn)
#endif()
Configure again and click Generate. Open Project (.SLN) in Visual Studio.
Default project is ALL_BUILD is this is the one to be build. Select configuration you want to build (Release or Debug). Pay attention that resulting import libraries (.lib) and dlls (.dll) will have different names for different configurations.
That's it! Those libraries may be link against UWP applications (C++/CX) and libraries for ARM platform.
Moreover - you can use the same process to build your own configuration for x64 or x86 platforms: Start over Cmake-gui again, select different build folder and in the very first step of the configuration choose Visual Studio 15 2017 x64 or x86 as your generator and then processor accordingly in the cross-compiling options. The rest of the configuration process looks the same.
To play further with OpenCV on Windows 10 IoT Core you may have a look at samples provided by Microsoft itself, e.g. here.