OpenCV CUDA - Jetpack 6 Support
Hello,
With the advent of Jetpack 6.0 and with it Ubuntu LTS 22.04, I was inquiring whether or not the scripts would be updated to support the newest edition.
Some of the packages have been superseded or are not available, though I think running the commands manually still works.
Noted. I will address the issue soon. Update 2-11-2023: I can't install the pre-released JetPack 6 on my Jetson Orin Nano. It loops during bootup. Let's wait a few weeks for the official version 6 release.
Ahh, you would need to follow this thread, if you installed via SD Image or regular Nvidia SDK then the QSPI won't recognize it. Been an error for months:
https://forums.developer.nvidia.com/t/unable-to-flash-r36-on-orin-nano-8gb-dev-kit-using-external-storage/275185
No problem though!
Hey there @starlight-traveler and @Qengineering, I have the AGX Orin running Jetpack 6-dp and was able to update the 4.9 script to work. Jetpack 6 uses Cuda 12.2 and I believe that is why 4.8 wouldn't work for me when I tried. Below is the updated script for 4.9. I hope this is helpful!
#!/bin/bash set -e install_opencv () {
Check if the file /proc/device-tree/model exists
if [ -e "/proc/device-tree/model" ]; then # Read the model information from /proc/device-tree/model and remove null bytes model=$(tr -d '\0' < /proc/device-tree/model) # Check if the model information contains "Orin" echo "" if [[ $model == "Orin" ]]; then echo "Detecting an NVIDIA Orin Device." # Use always "-j 4" NO_JOB=4 ARCH=8.7 PTX="sm_87" elif [[ $model == "Jetson Nano" ]]; then echo "Detecting a regular Jetson Nano." ARCH=5.3 PTX="sm_53" # Use "-j 4" only swap space is larger than 5.5GB FREE_MEM="$(free -m | awk '/^Swap/ {print $2}')" if [[ "FREE_MEM" -gt "5500" ]]; then NO_JOB=4 else echo "Due to limited swap, make only uses 1 core" NO_JOB=1 fi else echo "Unable to determine the Jetson model." exit 1 fi echo "" else echo "Error: /proc/device-tree/model not found. Are you sure this is a Jetson Product?" exit 1 fi
echo "Installing OpenCV 4.9.0 on your AGX Orin" echo "It will take 3.5 hours !"
reveal the CUDA location
cd ~ sudo sh -c "echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf.d/nvidia-tegra.conf" sudo ldconfig
install the Jetson Nano dependencies first
if [[ $model == "Jetson Nano" ]]; then sudo apt-get install -y build-essential git unzip pkg-config zlib1g-dev sudo apt-get install -y python3-dev python3-numpy sudo apt-get install -y python-dev python-numpy sudo apt-get install -y gstreamer1.0-tools libgstreamer-plugins-base1.0-dev sudo apt-get install -y libgstreamer-plugins-good1.0-dev sudo apt-get install -y libtbb2 libgtk-3-dev v4l2ucp libxine2-dev fi
install the common dependencies
sudo apt-get install -y cmake sudo apt-get install -y libjpeg-dev libjpeg8-dev libjpeg-turbo8-dev sudo apt-get install -y libpng-dev libtiff-dev libglew-dev sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install -y libgtk2.0-dev libgtk-3-dev libcanberra-gtk* sudo apt-get install -y python3-pip sudo apt-get install -y libxvidcore-dev libx264-dev sudo apt-get install -y libtbb-dev libdc1394-dev libxine2-dev sudo apt-get install -y libv4l-dev v4l-utils qv4l2 sudo apt-get install -y libtesseract-dev libpostproc-dev sudo apt-get install -y libswresample-dev libvorbis-dev sudo apt-get install -y libfaac-dev libmp3lame-dev libtheora-dev sudo apt-get install -y libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev sudo apt-get install -y liblapack-dev liblapacke-dev libeigen3-dev gfortran sudo apt-get install -y libhdf5-dev libprotobuf-dev protobuf-compiler sudo apt-get install -y libgoogle-glog-dev libgflags-dev
remove old versions or previous builds
cd ~ sudo rm -rf opencv*
download the latest version
git clone --depth=1 https://github.com/opencv/opencv.git git clone --depth=1 https://github.com/opencv/opencv_contrib.git
set install dir
cd ~/opencv mkdir build cd build
run cmake
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" ..
make -j ${NO_JOB}
directory="/usr/include/opencv4/opencv2" if [ -d "$directory" ]; then # Directory exists, so delete it sudo rm -rf "$directory" fi
sudo make install sudo ldconfig
cleaning (frees 320 MB)
make clean sudo apt-get update
echo "Congratulations!" echo "You've successfully installed OpenCV 4.9.0 on your NVIDIA Embedded Device" }
cd ~
if [ -d ~/opencv/build ]; then echo " " echo "You have a directory ~/opencv/build on your disk." echo "Continuing the installation will replace this folder." echo " "
printf "Do you wish to continue (Y/n)?" read answer
if [ "$answer" != "${answer#[Nn]}" ] ;then echo "Leaving without installing OpenCV" else install_opencv fi else install_opencv fi
@robbiesrobotics1 ,
Thanks for your contribution.
One question. Where is the difference? Both scripts look identical to me.
@Qengineering no problem at all! I just made a couple changes to the packages installed because there were two in the old script that aren't available for 22.04.
-
libdc1394-22-dev wasn't available so I used libdc1394-dev
-
libavresample-dev wasn't available so replaced with libswresample-dev
-
At first the script wouldn't run on my AGX because it wasn't a Nano so in the if statement when checking for device I just changed the device or "Orin" so that any orin series device would be detected. Post install I was able to verify opencv 4.9.0-dev with cuda in jtop. Additionally, after exposing the path to python3.10 I'm also able to see opencv with cuda in python.
@robbiesrobotics1 I've updated the script with your suggestions. Thanks!
@Qengineering no problem at all! I'm glad it was helpful.
Question. Are you using JetPack 6? And have you installed OpenCV with the script? It seems quite an ordeal to get it running. See issue #24. And https://forums.developer.nvidia.com/t/build-python-opencv2-with-cuda-support-for-jetpack-6-0/289016/3