OpenCV mit CUDA

Einführung

OpenCV (Open Source Computer Vision Library) ist eine Open-Source-Softwarebibliothek für Computer Vision und Bildverarbeitung. Sie bietet Hunderte von optimierten Algorithmen für Aufgaben wie Bild- und Videoanalyse, Objekterkennung, Gesichtserkennung, Merkmalsextraktion, Kamerakalibrierung und 3D-Rekonstruktion.

JetPack wird mit vorinstalliertem OpenCV auf reComputer-Geräten ausgeliefert, aber die Standardversion enthält keine CUDA-Beschleunigung. Das bedeutet, dass Sie OpenCV zwar für Standard-Bildverarbeitung verwenden können, GPU-beschleunigte Funktionen (wie cv::cuda::GpuMat-Operationen, DNN-Inferenz oder Echtzeit-Videoverarbeitung) nicht von der GPU des Jetson profitieren werden.

Durch das Kompilieren von OpenCV aus dem Quellcode mit CUDA-Unterstützung können Sie die GPU für viele Computer-Vision-Aufgaben nutzen, was die Leistung erheblich verbessert für:

  • Echtzeit-Videoverarbeitung (z.B. hochauflösende Kamera-Streams)
  • Deep-Learning-Inferenz mit dem OpenCV DNN-Modul
  • Bildtransformationen und Filter, die auf der GPU parallelisiert werden können
  • Computer-Vision-Pipelines in Robotik oder autonomen Systemen, wo niedrige Latenz und hoher Durchsatz kritisch sind

Das Kompilieren von OpenCV mit CUDA auf Jetson ermöglicht es Ihnen, die GPU für beschleunigte Computer-Vision-Workloads vollständig zu nutzen, was Anwendungen schneller und effizienter macht.

Dieses Tutorial führt Sie Schritt für Schritt durch die Installation der Version von OpenCV, die CUDA unterstützt.

image-20250918172500287

Hinweis:Die Demonstrationsumgebung ist Jetpack 6.2

OpenCV mit CUDA kompilieren

Schritt 1. Deinstallieren Sie die Python-Pakete und Bibliotheksdateien

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

Schritt 2. Installieren Sie die erforderlichen Abhängigkeitsbibliotheken für den后续Kompilierungsprozess.

Hinweis:Die folgenden Abhängigkeiten gelten für das Jetpack 6.2 Ubuntu 22.04-System. Die Namen der Abhängigkeiten in anderen Umgebungen können unterschiedlich sein!

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

Schritt 3. Laden Sie den offiziellen Quellcode herunter.

Hier verwenden wir Version 4.10.0 von OpenCV und 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

Schritt 4. OpenCV erstellen und installieren.

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 Das Aktivieren der FFMPEG-Unterstützung ermöglicht OpenCV das Lesen und Schreiben verschiedener Videoformate (avi, mp4, mkv). Wenn es deaktiviert ist, können nur MJPEG/RAW-Videostreams zugegriffen werden.

-DWITH_CUDA=ON CUDA-Beschleunigung aktivieren

-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda CUDA-Installationspfad angeben

-DCUDA_ARCH_BIN=8.7 Rechenleistung der designated Ziel-GPU angeben. Verschiedene Module sind in der folgenden Tabelle aufgeführt.

Jetson-ModellGPU-ArchitekturSM-AnzahlCompute-Kapazität (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

Geben Sie den Pfad von Python3, Header-Dateien und dynamischen Bibliotheken an. Wenn eine virtuelle Umgebung installiert ist, müssen Sie diese auf den Pfad des Compilers Ihrer eigenen virtuellen Umgebung ändern.

Während des CMake-Prozesses werden einige Konfigurationsinformationen angezeigt.

image-20250919151723696

Schritt 5. Das Projekt erstellen und installieren.

bash
#Der Kompilierungsprozess kann eine Weile dauern! Bitte warten Sie geduldig!
make -j4

5f2e3b7cb50af1e7c09fa111170bfd0d

bash
sudo make install

545c9f009141bf2d99fd8f37942328b4

Schritt 6. Installation überprüfen.

Nachdem die Installation abgeschlossen ist, öffnen Sie jtop. Sie werden sehen, dass "opencv with cuda" sich zu "yes" geändert hat.

bash
jtop

image-20250920135806440

Testen Sie, ob Python OpenCV erfolgreich importieren kann. Verwenden Sie das folgende Python-Testskript:

python
#python
import cv2
import numpy as np

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

# Überprüfen, ob OpenCV mit dem CUDA-Modul installiert wurde
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")

    # GPU-Beschleunigungsfunktion testen
    print("Creating test image...")
    img = (np.random.rand(1080, 1920, 3) * 255).astype("uint8")
    print("Test image shape:", img.shape)

    # Auf GPU hochladen
    gpu_img = cv2.cuda_GpuMat()
    gpu_img.upload(img)
    print("Image uploaded to GPU successfully!")

    # Gaußsche Unschärfe auf der GPU durchführen
    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)

    # Ergebnis herunterladen
    result = gpu_result.download()
    print("Gaussian blur completed on GPU!")
    print("Result shape:", result.shape)
    print("✅ OpenCV 4.10.0 mit CUDA 12.6-Unterstützung funktioniert korrekt!")

else:
    print("❌ Kein CUDA-Gerät gefunden oder OpenCV wurde nicht mit CUDA erstellt.")

98c824a91fa3d3d677206575085f34dc

Ressourcen

https://github.com/opencv

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