OpenCV avec CUDA

Introduction

OpenCV (Open Source Computer Vision Library) est une bibliothèque de logiciels open-source conçue pour la vision par ordinateur et le traitement d'images. Elle fournit des centaines d'algorithmes optimisés pour des tâches telles que l'analyse d'images et de vidéos, la détection d'objets, la reconnaissance faciale, l'extraction de caractéristiques, l'étalonnage de caméras et la reconstruction 3D.

JetPack est livré avec OpenCV préinstallé sur les appareils reComputer, mais la version par défaut ne comprend pas l'accélération CUDA. Cela signifie que bien que vous puissiez utiliser OpenCV pour le traitement d'images standard, les fonctions accélérées par GPU (comme les opérations cv::cuda::GpuMat, l'inférence DNN ou le traitement vidéo en temps réel) ne bénéficieront pas du GPU du Jetson.

En compilant OpenCV à partir du code source avec support CUDA, vous pouvez exploiter le GPU pour de nombreuses tâches de vision par ordinateur, ce qui améliore considérablement les performances pour:

  • Le traitement vidéo en temps réel (par exemple, les flux de caméra haute résolution)
  • L'inférence d'apprentissage profond en utilisant le module DNN d'OpenCV
  • Les transformations d'images et les filtres qui peuvent être parallélisés sur le GPU
  • Les pipelines de vision par ordinateur en robotique ou systèmes autonomes, où une faible latence et un haut débit sont critiques

Ainsi, compiler OpenCV avec CUDA sur Jetson vous permet d'utiliser pleinement le GPU pour les charges de travail de vision par ordinateur accélérées, rendant les applications plus rapides et plus efficaces.

Ce tutoriel vous guidera étape par étape sur la façon d'installer la version d'OpenCV qui supporte CUDA.

image-20250918172500287

Remarque:L'environnement de démonstration est Jetpack 6.2

Compiler OpenCV avec CUDA

Étape 1. Désinstallez les paquets Python et les fichiers de bibliothèque

bash
pip list | grep opencv
pip3 uninstall opencv-python
sudo apt purge libopencv*
sudo apt autoremove
sudo apt update

Étape 2. Installez les bibliothèques de dépendances requises pour le processus de compilation ultérieur.

Remarque:Les dépendances suivantes sont pour le système Jetpack 6.2 Ubuntu 22.04. Les noms des dépendances dans d'autres environnements peuvent être différents!

bash
sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran
sudo apt update
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libjpeg8-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libv4l-dev libdc1394-dev libopenjp2-7-dev
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
sudo apt install -y \
  python3-dev python3-numpy \
  libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
  libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
  libxvidcore-dev libx264-dev libgtk-3-dev libcanberra-gtk3-dev \
  libatlas-base-dev gfortran

Étape 3. Téléchargez le code source officiel.

Ici, nous utilisons la version 4.10.0 de OpenCV et OpenCV_contrib.

image-20250920135447788

bash
wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip
unzip 4.10.0.zip
rm 4.10.0.zip
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.10.0.zip
unzip 4.10.0.zip -d opencv-4.10.0/
cd opencv-4.10.0

Étape 4. Construire et installer OpenCV.

bash
mkdir build 
cd build
export PATH=/usr/local/cuda-12.6/bin:$PATH && export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH 

cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=ON \
-DWITH_FFMPEG=ON \
-DWITH_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.6 \
-DCUDA_ARCH_BIN=8.7 \
-DCUDA_ARCH_PTX="" \
-DENABLE_FAST_MATH=ON \
-DCUDA_FAST_MATH=ON \
-DWITH_CUBLAS=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DPYTHON3_EXECUTABLE=$(which python3) \
-DPYTHON3_INCLUDE_DIR=$(python3 -c "from sysconfig import get_paths as gp; print(gp()['include'])") \
-DPYTHON3_LIBRARY=$(python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/libpython' + sysconfig.get_python_version() + '.so')") \
-DOPENCV_EXTRA_MODULES_PATH=/home/seeed/Downloads/opencv_contrib/modules \
..

-DWITH_FFMPEG=ON Activer le support FFMPEG permet à OpenCV de lire et écrire divers formats vidéo (avi, mp4, mkv). S'il est désactivé, seuls les flux vidéo MJPEG/RAW peuvent être accédés.

-DWITH_CUDA=ON Activer l'accélération CUDA

-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda Spécifier le chemin d'installation de CUDA

-DCUDA_ARCH_BIN=8.7 Spécifier la puissance de calcul du GPU cible désigné. Différents modules sont listés dans le tableau ci-dessous.

Modèle JetsonArchitecture GPUSM CountCapacité de Calcul (CUDA_ARCH_BIN)
Jetson NanoMaxwell1285.3
Jetson TX1Maxwell2565.3
Jetson TX2Pascal2566.2
Jetson Xavier NXVolta3847.2
Jetson AGX XavierVolta5127.2
Jetson Orin NanoAmpere5128.7
Jetson Orin NXAmpere10248.7
Jetson AGX OrinAmpere20488.7

-DPYTHON3_EXECUTABLE=$(which python3) -DPYTHON3_INCLUDE_DIR -DPYTHON3_LIBRARY

Spécifiez le chemin de Python3, les fichiers d'en-tête et les bibliothèques dynamiques. Si un environnement virtuel est installé, vous devez le modifier vers le chemin du compilateur de votre propre environnement virtuel.

Pendant le processus CMake, certaines informations de configuration sont affichées.

image-20250919151723696

Étape 5. Construire le projet et installer.

bash
#Le processus de compilation peut prendre un certain temps! Veuillez attendre patiemment!
make -j4

5f2e3b7cb50af1e7c09fa111170bfd0d

bash
sudo make install

545c9f009141bf2d99fd8f37942328b4

Étape 6. Vérifier l'installation.

Une fois l'installation terminée, ouvrez jtop. Vous verrez que "opencv with cuda" a changé en "yes".

bash
jtop

image-20250920135806440

Testez si Python peut importer OpenCV avec succès. Utilisez le script de test Python suivant:

python
#python
import cv2
import numpy as np

print("OpenCV version:", cv2.__version__)

# Vérifier si OpenCV a le module CUDA installé
print("CUDA available in OpenCV:", cv2.cuda.getCudaEnabledDeviceCount() > 0)

if cv2.cuda.getCudaEnabledDeviceCount() > 0:
    print("Number of CUDA devices:", cv2.cuda.getCudaEnabledDeviceCount())
    cv2.cuda.setDevice(0)
    print("CUDA device set to 0")

    # Tester la fonction d'accélération GPU
    print("Creating test image...")
    img = (np.random.rand(1080, 1920, 3) * 255).astype("uint8")
    print("Test image shape:", img.shape)

    # Télécharger sur GPU
    gpu_img = cv2.cuda_GpuMat()
    gpu_img.upload(img)
    print("Image uploaded to GPU successfully!")

    # Effectuer le flou gaussien sur le GPU
    print("Performing Gaussian blur on GPU...")
    gaussian = cv2.cuda.createGaussianFilter(gpu_img.type(), gpu_img.type(), (15, 15), 0)
    gpu_result = gaussian.apply(gpu_img)

    # Télécharger le résultat
    result = gpu_result.download()
    print("Gaussian blur completed on GPU!")
    print("Result shape:", result.shape)
    print("✅ OpenCV 4.10.0 avec support CUDA 12.6 fonctionne correctement!")

else:
    print("❌ Aucun appareil CUDA trouvé ou OpenCV non compilé avec CUDA.")

98c824a91fa3d3d677206575085f34dc

Ressources

https://github.com/opencv

https://docs.opencv.org/4.10.0/d2/dbc/cuda_intro.html