Hi! Ive been trying to modify some Gstreamer Plugins (mainly cvsmooth) so it does some other stuff too but mainly for it to be accelerated on the Jetson Nano’s GPU
Ive installed OpenCV 4.5 with CUDA support
pkg-config --modversion opencv
4.5.0
The plugin compiles with no problem but whenever i try to run it i get this:
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.1.1) /home/nvidia/host/build_opencv/nv_opencv/modules/core/include/opencv2/core/private.cuda.hpp:107: error: (-216:No CUDA support) The library is compiled without CUDA support in function 'throw_no_cuda'
Seems the opencv-4.1.1 without CUDA support shipped with JetPack is used instead of your own opencv-4.5.0 build.
Your would build your plugin using:
-I <path_to_opencv-4.5.0>/include/opencv4
-L <path_to_opencv-4.5.0>/lib
or use pkg-config if it gives correct 4.5.0 flags.
Then, for execution, you would set environment variable LD_LIBRARY_PATH before running:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:<path_to_opencv-4.5.0>/lib
gst-launch-1.0 <your pipeline_with_cvsmooth>
I still dont get it to work
I cloned and built opencv in the home directory and added it to LD_LIBRAY_PATH
echo $LD_LIBRARY_PATH
/usr/local/cuda/lib64:/home/devkit/opencv/build/lib
Also i get this when i search for opencv libraries
dpkg -l | grep libopencv
ii libopencv 4.1.1-2-gd5a58aa75 arm64 Open Computer Vision Library
ii libopencv-core3.2:arm64 3.2.0+dfsg-4ubuntu0.1 arm64 computer vision core library
ii libopencv-dev 4.1.1-2-gd5a58aa75 arm64 Development files for Open Source Computer Vision Library
ii libopencv-python 4.1.1-2-gd5a58aa75 arm64 Python bindings for Open Source Computer Vision Library
ii libopencv-samples 4.1.1-2-gd5a58aa75 arm64 Samples for Open Source Computer Vision Library
EDIT:
Contents of /home/devkit/opencv/build/lib
libade.a libopencv_cudafeatures2d.so.4.5.0 libopencv_dnn.so.4.5.0 libopencv_highgui.so.4.5.0 libopencv_photo.so.4.5.0 libopencv_superres.so.4.5.0
libopencv_alphamat.so libopencv_cudafilters.so libopencv_dnn_superres.so libopencv_imgcodecs.so libopencv_plot.so libopencv_surface_matching.so
libopencv_alphamat.so.4.5 libopencv_cudafilters.so.4.5 libopencv_dnn_superres.so.4.5 libopencv_imgcodecs.so.4.5 libopencv_plot.so.4.5 libopencv_surface_matching.so.4.5
libopencv_alphamat.so.4.5.0 libopencv_cudafilters.so.4.5.0 libopencv_dnn_superres.so.4.5.0 libopencv_imgcodecs.so.4.5.0 libopencv_plot.so.4.5.0 libopencv_surface_matching.so.4.5.0
libopencv_aruco.so libopencv_cudaimgproc.so libopencv_dpm.so libopencv_img_hash.so libopencv_quality.so libopencv_text.so
libopencv_aruco.so.4.5 libopencv_cudaimgproc.so.4.5 libopencv_dpm.so.4.5 libopencv_img_hash.so.4.5 libopencv_quality.so.4.5 libopencv_text.so.4.5
libopencv_aruco.so.4.5.0 libopencv_cudaimgproc.so.4.5.0 libopencv_dpm.so.4.5.0 libopencv_img_hash.so.4.5.0 libopencv_quality.so.4.5.0 libopencv_text.so.4.5.0
libopencv_bgsegm.so libopencv_cudalegacy.so libopencv_face.so libopencv_imgproc.so libopencv_rapid.so libopencv_tracking.so
libopencv_bgsegm.so.4.5 libopencv_cudalegacy.so.4.5 libopencv_face.so.4.5 libopencv_imgproc.so.4.5 libopencv_rapid.so.4.5 libopencv_tracking.so.4.5
libopencv_bgsegm.so.4.5.0 libopencv_cudalegacy.so.4.5.0 libopencv_face.so.4.5.0 libopencv_imgproc.so.4.5.0 libopencv_rapid.so.4.5.0 libopencv_tracking.so.4.5.0
libopencv_bioinspired.so libopencv_cudaobjdetect.so libopencv_features2d.so libopencv_intensity_transform.so libopencv_reg.so libopencv_videoio.so
libopencv_bioinspired.so.4.5 libopencv_cudaobjdetect.so.4.5 libopencv_features2d.so.4.5 libopencv_intensity_transform.so.4.5 libopencv_reg.so.4.5 libopencv_videoio.so.4.5
libopencv_bioinspired.so.4.5.0 libopencv_cudaobjdetect.so.4.5.0 libopencv_features2d.so.4.5.0 libopencv_intensity_transform.so.4.5.0 libopencv_reg.so.4.5.0 libopencv_videoio.so.4.5.0
libopencv_calib3d.so libopencv_cudaoptflow.so libopencv_flann.so libopencv_line_descriptor.so libopencv_rgbd.so libopencv_video.so
libopencv_calib3d.so.4.5 libopencv_cudaoptflow.so.4.5 libopencv_flann.so.4.5 libopencv_line_descriptor.so.4.5 libopencv_rgbd.so.4.5 libopencv_video.so.4.5
libopencv_calib3d.so.4.5.0 libopencv_cudaoptflow.so.4.5.0 libopencv_flann.so.4.5.0 libopencv_line_descriptor.so.4.5.0 libopencv_rgbd.so.4.5.0 libopencv_video.so.4.5.0
libopencv_ccalib.so libopencv_cudastereo.so libopencv_freetype.so libopencv_mcc.so libopencv_saliency.so libopencv_videostab.so
libopencv_ccalib.so.4.5 libopencv_cudastereo.so.4.5 libopencv_freetype.so.4.5 libopencv_mcc.so.4.5 libopencv_saliency.so.4.5 libopencv_videostab.so.4.5
libopencv_ccalib.so.4.5.0 libopencv_cudastereo.so.4.5.0 libopencv_freetype.so.4.5.0 libopencv_mcc.so.4.5.0 libopencv_saliency.so.4.5.0 libopencv_videostab.so.4.5.0
libopencv_core.so libopencv_cudawarping.so libopencv_fuzzy.so libopencv_ml.so libopencv_shape.so libopencv_xfeatures2d.so
libopencv_core.so.4.5 libopencv_cudawarping.so.4.5 libopencv_fuzzy.so.4.5 libopencv_ml.so.4.5 libopencv_shape.so.4.5 libopencv_xfeatures2d.so.4.5
libopencv_core.so.4.5.0 libopencv_cudawarping.so.4.5.0 libopencv_fuzzy.so.4.5.0 libopencv_ml.so.4.5.0 libopencv_shape.so.4.5.0 libopencv_xfeatures2d.so.4.5.0
libopencv_cudaarithm.so libopencv_cudev.so libopencv_gapi.so libopencv_objdetect.so libopencv_stereo.so libopencv_ximgproc.so
libopencv_cudaarithm.so.4.5 libopencv_cudev.so.4.5 libopencv_gapi.so.4.5 libopencv_objdetect.so.4.5 libopencv_stereo.so.4.5 libopencv_ximgproc.so.4.5
libopencv_cudaarithm.so.4.5.0 libopencv_cudev.so.4.5.0 libopencv_gapi.so.4.5.0 libopencv_objdetect.so.4.5.0 libopencv_stereo.so.4.5.0 libopencv_ximgproc.so.4.5.0
libopencv_cudabgsegm.so libopencv_datasets.so libopencv_hdf.so libopencv_optflow.so libopencv_stitching.so libopencv_xobjdetect.so
libopencv_cudabgsegm.so.4.5 libopencv_datasets.so.4.5 libopencv_hdf.so.4.5 libopencv_optflow.so.4.5 libopencv_stitching.so.4.5 libopencv_xobjdetect.so.4.5
libopencv_cudabgsegm.so.4.5.0 libopencv_datasets.so.4.5.0 libopencv_hdf.so.4.5.0 libopencv_optflow.so.4.5.0 libopencv_stitching.so.4.5.0 libopencv_xobjdetect.so.4.5.0
libopencv_cudacodec.so libopencv_dnn_objdetect.so libopencv_hfs.so libopencv_phase_unwrapping.so libopencv_structured_light.so libopencv_xphoto.so
libopencv_cudacodec.so.4.5 libopencv_dnn_objdetect.so.4.5 libopencv_hfs.so.4.5 libopencv_phase_unwrapping.so.4.5 libopencv_structured_light.so.4.5 libopencv_xphoto.so.4.5
libopencv_cudacodec.so.4.5.0 libopencv_dnn_objdetect.so.4.5.0 libopencv_hfs.so.4.5.0 libopencv_phase_unwrapping.so.4.5.0 libopencv_structured_light.so.4.5.0 libopencv_xphoto.so.4.5.0
libopencv_cudafeatures2d.so libopencv_dnn.so libopencv_highgui.so libopencv_photo.so libopencv_superres.so python3
libopencv_cudafeatures2d.so.4.5 libopencv_dnn.so.4.5 libopencv_highgui.so.4.5 libopencv_photo.so.4.5 libopencv_superres.so.4.5
EDIT2:
Also i think this is important, since im modifying an existing plugin im using meson and ninja to build it. Im really new to meson and ninja, maybe im missing something there but i wouldnt know where to start.
When you’ve configured your opencv build with cmake, it has set CMAKE_INSTALL_PREFIX (for example /usr/local).
After building opencv, when you run:
sudo make install
…your opencv build will be installed at that location. pkg-config would use that location for opencv flags.
Check with:
pkg-config opencv4 --cflags --libs
I cannot tell about meson/ninja build.
I’m sure that if building your app or plugin with correct include paths and libs paths, and set these in LD_LIBRARY_PATH as you did it should work…for a C++ application or plugin.
Note that running from python may be different. If this is your case, try to display the opencv version that your python install uses:
python
Python 2.7.17 (default, Jul 20 2020, 15:37:01)
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.4.0-pre
This is the output i get from pkg-config opencv4 --cflags --libs
-I/usr/include/opencv4/opencv -I/usr/include/opencv4 -lopencv_dnn -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopenc
v_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
And as far as python goes:
python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.5.0-pre
Looks ok so far, but you’ve installed into /usr where the opencv-4.1.1 was. Also noted some 3.2 version above. Did you purge before ?
I use to install into /usr/local/my-version to get rid of that.
What gives:
ls -l /usr/include/opencv4/opencv2
ls /usr/lib/libopencv*
if you see mixed files (dates in headers, or suffixs for libs), you would purge and reinstall.