CUDA対応OpenCV

はじめに

**OpenCV(Open Source Computer Vision Library)**は、コンピュータビジョンと画像処理のために設計されたオープンソースのソフトウェアライブラリです。画像やビデオ解析、オブジェクト検出、顔認識、特徴抽出、カメラキャリブレーション、3D再構成などのタスク向けに、何百もの最適化されたアルゴリズムを提供します。

JetPackにはreComputerデバイスにOpenCVがプレインストールされていますが、デフォルトバージョンにはCUDAアクセラレーションが含まれていません。これは、OpenCVを標準的な画像処理に使用できますが、GPU加速機能(cv::cuda::GpuMat操作、DNN推論、リアルタイムビデオ処理など)はJetsonのGPUの恩恵を受けないことを意味します。

OpenCVをソースからCUDAサポート付きでコンパイルすることで、多くのコンピュータビジョタスクにGPUを活用でき、パフォーマンスが大幅に向上します:

  • リアルタイムビデオ処理(例:高解像度カメラストリーム)
  • OpenCV DNNモジュールを使用したディープラーング推論
  • GPUで並列化できる画像変換とフィルタ
  • 低レイテンシーと高スループットが重要なロボット工学や自律システムにおけるコンピュータビジョンパイプライン

したがって、JetsonでCUDA対応のOpenCVをコンパイルすることで、加速されたコンピュータビジョンのワークロードにGPUを完全に活用でき、アプリケーションをより高速かつ効率的にできます。

このチュートリアルでは、CUDAをサポートするOpenCVのバージョンをインストールする方法をステップバイステップで説明します。

image-20250918172500287

注:デモ環境はJetpack 6.2です

CUDA対応のOpenCVをコンパイルする

ステップ1. Pythonパッケージとライブラリファイルをアンインストールします

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

ステップ2. コンパイルプロセスに必要な依存ライブラリをインストールします。

:以下の依存関係はJetpack 6.2 Ubuntu 22.04システム向けです。他の環境の依存関係の名前は異なる場合があります!

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

ステップ3. オフィシャルのソースコードをダウンロードします。

ここでは、OpenCVのバージョン4.10.0と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

ステップ4. 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 FFMPEGサポートを有効にすると、OpenCVは様々なビデオ形式(avi、mp4、mkv)の読み書きができるようになります。オフにすると、MJPEG/RAWビデオストリームのみにアクセスできます。

-DWITH_CUDA=ON CUDAアクセラレーションを有効にする

-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda CUDAインストールパスを指定

-DCUDA_ARCH_BIN=8.7 指定されたターゲットGPUの計算能力を示します。以下の表に異なるモジュールがリストされています。

JetsonモデルGPUアーキテクチャSM数計算能力 (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

Python3、ヘッダーファイル、ダイナミックライブラリの パスを指定します。仮想環境がインストールされている場合は、自分の仮想環境のコンパイラのパスに変更する必要があります。

CMakeプロセスの間に、いくつかの構成情報が表示されます。

image-20250919151723696

ステップ5. プロジェクトをビルドしてインストールします。

bash
#コンパイルプロセスには時間がかかる場合があります!辛抱強くお待ちください!
make -j4

5f2e3b7cb50af1e7c09fa111170bfd0d

bash
sudo make install

545c9f009141bf2d99fd8f37942328b4

ステップ6. インストールを確認します。

インストールが完了したら、jtopを開きます。「opencv with cuda」が「yes」に変わったことがわかります。

bash
jtop

image-20250920135806440

PythonがOpenCVを正常にインポートできるかテストします。以下のPythonテストスクリプトを使用してください:

python
#python
import cv2
import numpy as np

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

# OpenCVにCUDAモジュールがインストールされているか確認
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アクセラレーション機能をテスト
    print("Creating test image...")
    img = (np.random.rand(1080, 1920, 3) * 255).astype("uint8")
    print("Test image shape:", img.shape)

    # GPUにアップロード
    gpu_img = cv2.cuda_GpuMat()
    gpu_img.upload(img)
    print("Image uploaded to GPU successfully!")

    # 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)

    # 結果をダウンロード
    result = gpu_result.download()
    print("Gaussian blur completed on GPU!")
    print("Result shape:", result.shape)
    print("✅ OpenCV 4.10.0 with CUDA 12.6 support is working correctly!")

else:
    print("❌ No CUDA device found or OpenCV not built with CUDA.")

98c824a91fa3d3d677206575085f34dc

リソース

https://github.com/opencv

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