Skip to content

OpenCV with cuda support on jetson

Build OpenCV with CUDA support on Jetson Pack it using DEB for future use.

Build scripts from Qengineering/Install-OpenCV-Jetson-Nano

1
2
3
4
5
>>> import cv2
>>> cv2.__version__
'4.10.0'
>>> cv2.cuda.getCudaEnabledDeviceCount()
1
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-D WITH_OPENCL=OFF \
-D CUDA_ARCH_BIN=${ARCH} \
-D CUDA_ARCH_PTX=${PTX} \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_NEON=ON \
-D WITH_QT=OFF \
-D WITH_OPENMP=ON \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_PROTOBUF=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF \
-D CMAKE_CXX_FLAGS="-march=native -mtune=native" \
-D CMAKE_C_FLAGS="-march=native -mtune=native" \
-D CPACK_BINARY_DEB=ON \
-D CPACK_PACKAGE_VERSION=4.10.0 \
-D CPACK_DEBIAN_PACKAGE_VERSION=4.10.0-1 \
..

CUDA_ARCH_BIN, CUDA_ARCH_PTX

DEB

The CPACK_BINARY_DEB option in OpenCV’s CMake configuration enables packaging OpenCV as a Debian (.deb) package using CPack.

1
2
3
-D CPACK_BINARY_DEB=ON
-D CPACK_PACKAGE_VERSION=4.10.0 
-D CPACK_DEBIAN_PACKAGE_VERSION=4.10.0-1
make package ..

Check installation

pull cuda runtime image
docker pull nvidia/cuda:12.6.0-runtime-ubuntu22.04
run and share cv build folder
1
2
3
4
5
6
# from build folder
docker run  --gpus all --runtime=nvidia \
    -it --rm --hostname test \
    -v `pwd`:/tmp/cv \
    nvidia/cuda:12.6.0-cudnn-runtime-ubuntu22.04  \
    /bin/bash

docker image

We can start with docker that the cudnn is preinstall

docker pull nvidia/cuda:12.6.0-cudnn-runtime-ubuntu22.04
docker pull  nvidia/cuda:12.6.0-runtime-ubuntu22.04 /bin/bash
install dependencies
1
2
3
4
5
6
7
8
apt update
apt install cudnn9 # skip if use the preinstall cudnn
apt install python3
apt install python3-numpy
#
#install all opencv debs
cd /tmp/cv
apt install ./*.deb
check cuda installation
1
2
3
4
5
>>> import cv2
>>> cv2.__version__
'4.10.0'
>>> cv2.cuda.getCudaEnabledDeviceCount()
1