Install-OpenCV-Jetson-Nano icon indicating copy to clipboard operation
Install-OpenCV-Jetson-Nano copied to clipboard

OpenCV CUDA - Jetpack 6 Support

Open starlight-traveler opened this issue 2 years ago • 8 comments

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.

starlight-traveler avatar Feb 10 '24 00:02 starlight-traveler

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.

Qengineering avatar Feb 10 '24 09:02 Qengineering

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!

starlight-traveler avatar Feb 11 '24 19:02 starlight-traveler

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 avatar Apr 22 '24 02:04 robbiesrobotics1

@robbiesrobotics1 ,

Thanks for your contribution.

One question. Where is the difference? Both scripts look identical to me.

Qengineering avatar Apr 22 '24 08:04 Qengineering

@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.

  1. libdc1394-22-dev wasn't available so I used libdc1394-dev

  2. libavresample-dev wasn't available so replaced with libswresample-dev

  3. 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 avatar Apr 22 '24 13:04 robbiesrobotics1

@robbiesrobotics1 I've updated the script with your suggestions. Thanks!

Qengineering avatar Apr 24 '24 08:04 Qengineering

@Qengineering no problem at all! I'm glad it was helpful.

robbiesrobotics1 avatar Apr 25 '24 02:04 robbiesrobotics1

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

Qengineering avatar Apr 30 '24 09:04 Qengineering