Main Content

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

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

必要条件

ターゲット ボード要件

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

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

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

  • コンパイラおよびライブラリ用のターゲット上の環境変数。詳細については、Install and Setup Prerequisites 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 TX2 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       : Logitech Webcam C925e
 Available GPUs          : NVIDIA Tegra X2
 Available Digital Pins  : 7  11  12  13  15  16  18  19  21  22  23  24  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');
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 12290.
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/R2023b/home/lnarasim/Documents/MATLAB/ExampleManager/lnarasim.Bdoc23b.j2232307/nvidia-ex91971069/fog_rectification.log')

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

jetsonfogRectificationOut.png

Copyright 2019-2023 The MathWorks, Inc.,