メインコンテンツ

NVIDIA Jetson でのビデオの霧修正の展開および実行

この例では、ビデオベースの霧修正アプリケーション向け CUDA® 実行可能ファイルを生成して展開する方法を示します。この例では、MATLAB® Coder™ Support Package for NVIDIA® Jetson™ and NVIDIA DRIVE™ Platforms が MATLAB のVideoReader関数用に提供する展開可能なコード生成機能を示します。この例では、ビデオ ファイルの内容を読み取り、霧修正を実行し、出力ビデオを NVIDIA ハードウェアに表示する CUDA アプリケーションを生成します。

前提条件

ターゲット ボード要件

  • NVIDIA Jetson 組み込みプラットフォーム。

  • ターゲット ボードとホスト PC を接続するイーサネット クロスオーバー ケーブル (ターゲット ボードをローカル ネットワークに接続できない場合)。

  • ターゲットの GStreamer ライブラリと SDL ライブラリ。

  • コンパイラおよびライブラリ用のターゲット上の環境変数。詳細については、Prerequisites for Generating Code for NVIDIA Boardsを参照してください。

  • ターゲットのディスプレイ ポートに接続されたモニター。

開発用ホスト要件

NVIDIA Jetson への接続

このサポート パッケージは、生成された CUDA コードを Jetson プラットフォームでビルドおよび実行している間、TCP/IP による SSH 接続を使用してコマンドを実行します。ターゲット プラットフォームをホスト コンピューターと同じネットワークに接続するか、イーサネット クロス ケーブルを使用してボードをホスト コンピューターに直接接続します。ボードを設定して構成する方法については、NVIDIA のドキュメントを参照してください。

Jetson オブジェクトの作成

NVIDIA ハードウェアと通信するには、jetson関数を使用してライブ ハードウェア接続オブジェクトを作成します。

hwobj = jetson('jetson-board-name','ubuntu','ubuntu');

ターゲット ボードに初めて接続するときは、ターゲット ボードのホスト名 (または IP アドレス)、ユーザー名、およびパスワードを提供しなければなりません。以降の接続では、アドレス、ユーザー名、パスワードを入力する必要はありません。ハードウェア オブジェクトは、直近で NVIDIA ボードに正常に接続されたときの設定を再利用します。

既定で、この例では、直近で NVIDIA Jetson ボードに正常に接続されたときの設定を再利用します。

hwobj = jetson;
### Checking for CUDA availability on the target...
### Checking for 'nvcc' in the target system path...
### Checking for cuDNN library availability on the target...
### Checking for TensorRT library availability on the target...
### Checking for prerequisite libraries is complete.
### Gathering hardware details...
### Checking for third-party library availability on the target...
### Gathering hardware details is complete.
Board name              : NVIDIA Jetson Nano Developer Kit
CUDA Version            : 10.2
cuDNN Version           : 8.2
TensorRT Version        : 8.2
GStreamer Version       : 1.14.5
V4L2 Version            : 1.14.2-1
SDL Version             : 1.2
OpenCV Version          : 4.1.1
Available Webcams       :  
Available GPUs          : NVIDIA Tegra X1
Available Digital Pins  : 7  11  12  13  15  16  18  19  21  22  23  24  26  29  31  32  33  35  36  37  38  40

ハードウェア ライブ オブジェクトの作成時、サポート パッケージはハードウェアとソフトウェアのチェックを実行し、ターゲット ボードに MATLAB IO サーバーをインストールし、ターゲットに接続されている周辺デバイスの情報を収集します。この情報はコマンド ウィンドウに表示されます。接続に失敗した場合は、MATLAB コマンド ラインで診断エラー メッセージが報告されます。接続が失敗した場合に最も可能性が高い原因は、IP アドレスまたはホスト名が誤っていることです。

ターゲット ボードでの GPU 環境の検証

この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証するために、関数coder.checkGpuInstallを使用します。

envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);

fog_rectification エントリポイント関数

エントリポイント関数 fog_rectification は、霧のかかったビデオを入力として受け取り、霧が取り除かれたビデオを表示します。

type fog_rectification.m
function fog_rectification() %#codegen
% Copyright 2019-2021 The MathWorks, Inc.

coder.gpu.kernelfun;
hwobj = jetson();
width = 600;
height = 404;
videoFileName = 'foggy.mp4';
vobj = VideoReader(hwobj,videoFileName,'Width',width,'Height',height);
dispObj = imageDisplay(hwobj);

while vobj.hasFrame
    input = vobj.readFrame;
    
    % Run fog rectification on the frame
    outrectifiedImage = fog_rectification_algorithm (input,width,height);
    reshapedImg = cat(3, outrectifiedImage(:,:,1).', ...
        outrectifiedImage(:,:,2)',outrectifiedImage(:,:,3)');
    image(dispObj,reshapedImg);
end
end

ビデオ ファイル名の入力は、絶対パスと相対パスを受け入れます。コード生成用に、ターゲット上のビデオ ファイル パスを指定します。たとえば、ビデオ ファイルが '/home/ubuntu/video/foggy.mp4' の場所にある場合は、このパスを指定しなければなりません。

GPU Coder を使用したターゲット ボード向けの CUDA コードの生成

NVIDIA ターゲットに展開できる CUDA 実行可能ファイルを生成するには、実行可能ファイルを生成するための GPU コード構成オブジェクトを作成します。

cfg = coder.gpuConfig('exe');

Jetson プラットフォーム用の構成オブジェクトを作成し、それをコード構成オブジェクト cfgHardware プロパティに割り当てるために、関数coder.hardwareを使用します。

cfg.Hardware = coder.hardware('NVIDIA Jetson');

ターゲット ボードでリモート ビルド プロセスを実行するフォルダーを指定するには、BuildDir プロパティを使用します。指定したビルド フォルダーがターゲット ボード上にない場合は、指定した名前でフォルダーが作成されます。値が cfg.Hardware.BuildDir に代入されない場合は、リモート ビルド プロセスは最後に指定されたビルド フォルダーで発生します。格納されているビルド フォルダー値がない場合、ビルド プロセスはホーム フォルダーで行われます。

cfg.Hardware.BuildDir = '~/remoteBuildDir';

C++ メイン ファイルの例を生成してコンパイルするために、GenerateExampleMain プロパティを設定します。この例では、生成されたメイン ファイルを変更する必要はありません。

cfg.GenerateExampleMain = 'GenerateCodeAndCompile';

CUDA コードを生成するには、関数codegenを使用して、GPU コード構成、入力サイズ、およびエントリポイント関数 fog_rectification を渡します。ホストでコード生成が行われた後、生成されたファイルがターゲットにコピーされてビルドされます。

codegen('-config ',cfg,'fog_rectification','-report');
### Checking for CUDA availability on the target...
### Checking for 'nvcc' in the target system path...
Code generation successful: View report

ターゲット ボードへのビデオ ファイルのコピー

ターゲット ボードにビデオ ファイルを移動します。

putFile(hwobj,'foggy.mp4', hwobj.workspaceDir);

ターゲット ボードでの霧修正の実行

生成された実行可能ファイルをターゲット ボードで実行するには、MATLAB 関数 runApplication を使用します。

pid = runApplication(hwobj,'fog_rectification');
### Launching the executable on the target...
Executable launched successfully with process ID 20066.
Displaying the simple runtime log for the executable...

Note: For the complete log, run the following command in the MATLAB command window:
system(hwobj,'cat /home/ubuntu/remoteBuildDir/MATLAB_ws/R2026a/C/Users/user/OneDrive_-_MathWorks/Documents/MATLAB/ExampleManager/user.Sept29/nvidia-ex91971069/fog_rectification.log')

ターゲット ハードウェアのディスプレイ上にウィンドウが開き、録画されたビデオの霧修正出力が表示されます。

jetsonfogRectificationOut.png

参考

トピック