MATLAB: GPU Coder Error with OpenCV

Computer Vision ToolboxGPU CoderMATLABmatlab coderopencv error

I'm trying to use the example "Semantic Segmentation on NVIDIA DRIVE" just modifying it to be executing on a Jetson Nano board. I train my own network, then Ijust load my network instead of the one defined on the example, nevertheless when I try to deploy it to the Nano I have the following error:
/main.cu:10:10: fatal error: opencv2/opencv.hpp: No such file or directory
#include "opencv2/opencv.hpp"
I check on the nano to see if the installation of OpenCV is correct:
alvaro@alvaro-nano:~$ pkg-config –modversion opencv
2.4.9
The installation is correct, also when I call the code generation I pass the path as an -I command:
codegen -config cfg autoSemanticSegmentation -args {img} -I /usr/include/opencv4 -report -v
And I saw that this is inluded on the generated make file.
How can I fix this issue to be able to compile and execute the example on the Nano?

Best Answer

Hi Alvaro,
I believe the issue is due to the line below,
cfg.CustomInclude = fullfile('/usr/include/opencv4');
For hardware deployment workflow, cfg.CustomInclude prepends the host working directory structure to create the following structure
-I/home/alvaro/remoteBuildDir/MATLAB_ws/R2019b/usr/include/opencv4
-I/home/alvaro/remoteBuildDir/MATLAB_ws/R2019b/usr/include/opencv4/opencv2
Rather than,
-I/usr/include/opencv4
-I/usr/include/opencv4/opencv2
To resolve the issue you can try one of the two approaches
1) Rename /usr/include/opencv4/opencv2 to /usr/include/opencv2
mv /usr/include/opencv4/opencv2 /usr/include/opencv2
This should ensure that the compiler is able to find opencv2/opencv.hpp under /usr/include/
2) Use coder.updateBuildInfo('addIncludePaths', '/usr/include/opencv4/');
function out = segnet_predict(in)
%#codegen
% A persistent object mynet is used to load the DAG network object.
% At the first call to this function, the persistent object is constructed and
% setup. When the function is called subsequent times, the same object is reused
% to call predict on inputs, thus avoiding reconstructing and reloading the
% network object.
% Update buildinfo with the OpenCV library flags.
opencv_link_flags = '`pkg-config --cflags --libs opencv`';
coder.updateBuildInfo('addLinkFlags',opencv_link_flags);
coder.updateBuildInfo('addIncludePaths', '/usr/include/opencv4/');
persistent mynet;
if isempty(mynet)
mynet = coder.loadDeepLearningNetwork('SegNet.mat');
end
% pass in input
out = predict(mynet,in);
Hari