Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenCV CUDA - Jetpack 6 Support #17

Open
starlight-traveler opened this issue Feb 10, 2024 · 8 comments
Open

OpenCV CUDA - Jetpack 6 Support #17

starlight-traveler opened this issue Feb 10, 2024 · 8 comments

Comments

@starlight-traveler
Copy link

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.

@Qengineering
Copy link
Owner

Qengineering commented Feb 10, 2024

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.

@starlight-traveler
Copy link
Author

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!

@robbiesrobotics1
Copy link

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

@Qengineering
Copy link
Owner

@robbiesrobotics1 ,

Thanks for your contribution.

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

@robbiesrobotics1
Copy link

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

@Qengineering
Copy link
Owner

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

@robbiesrobotics1
Copy link

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

@Qengineering
Copy link
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants