最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

NVIDIA Jetson TX2 開発者キットで不均一な背景の照度を除去するトップ ハット フィルター処理

この例では、GPU Coder™ Support Package for NVIDIA GPUs を使用して、Image Processing Toolbox™ アルゴリズムを NVIDIA® Jetson TX2 ボードに展開する方法を説明します。この概念を説明するための例として、関数 imtophat を使用します。この関数は、グレースケール イメージに対してモルフォロジー トップ ハット フィルター処理を実行します。トップハット フィルター処理を実行するとイメージのモルフォロジー オープニングが計算され (imopen を使用)、次に元のイメージから結果が減算されます。生成された CUDA コードでは、GPU での演算を高速化するために共有メモリが使用されます。

必要条件

ターゲット ボード要件

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

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

  • ボードにインストールされている NVIDIA CUDA ツールキット。

  • ターゲット上の OpenCV 3.0 (以上の) ライブラリ (イメージとビデオの読み取りおよび表示用)。

  • コンパイラおよびライブラリ用のターゲット上の環境変数。サポートされているコンパイラおよびライブラリのバージョンとそれぞれの設定の詳細は、Install and Setup Prerequisites for NVIDIA Borards を参照してください。

開発用ホスト要件

  • GPU Coder (コードを生成するため)。概要とチュートリアルについては、GPU Coder の製品ページを参照してください。

  • ホスト上の NVIDIA CUDA ツールキット。

  • コンパイラおよびライブラリ用のホスト上の環境変数。サポートされているコンパイラおよびライブラリのバージョンの詳細は、Third-party Products を参照してください。環境変数の設定は、Environment Variables を参照してください。

フォルダーの作成と関連ファイルのコピー

次のコード行は、現在の作業フォルダー (pwd) にフォルダーを作成し、すべての関連ファイルをこのフォルダーにコピーします。この操作を実行したくない、またはこのフォルダーにファイルを生成できない場合、現在の作業フォルダーを変更してください。

gpucoderdemo_setup('gpucoderdemo_topHatFilteringOnJetsonTX2');

ホストでの NVIDIA サポート パッケージのインストールの検証

関数 checkHardwareSupportPackageInstall を使用して、ホスト システムに、この例を実行するための互換性があることを確認します。

checkHardwareSupportPackageInstall();

NVIDIA ハードウェアへの接続

GPU Coder Support Package for NVIDIA GPUs は、生成された CUDA コードを Jetson プラットフォームでビルドおよび実行している間、TCP/IP 経由の SSH 接続を使用してコマンドを実行します。そのため、ターゲット プラットフォームをホスト コンピューターと同じネットワークに接続するか、イーサネット クロスオーバー ケーブルを使用してボードをホスト コンピューターに直接接続しなければなりません。ボードの設定および構成方法については NVIDIA のドキュメンテーションを参照してください。

NVIDIA ハードウェアと通信するには、関数 jetson を使用してライブ ハードウェア接続オブジェクトを作成しなければなりません。ライブ ハードウェア接続オブジェクトを作成するには、ターゲット ボードのホスト名または IP アドレス、ユーザー名、およびパスワードを知っている必要があります。

hwobj= jetson('host-name','username','password');

異なるターゲットに対する複数のライブ接続オブジェクトがある場合、コード ジェネレーターは最新のライブ オブジェクトが作成されたターゲットでリモート ビルドを実行します。リモート ビルドを実行するハードウェア ボードを選択するには、各ライブ ハードウェア オブジェクトの setupCodegenContext() メソッドを使用します。ライブ接続オブジェクトが 1 つしか作成されていない場合、このメソッドを呼び出す必要はありません。

hwobj.setupCodegenContext;

GPU 環境の検証

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

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

関数 'imtophat' について

imtophatDemo_gpu は内部で imtophat を呼び出します。関数 imtophat は、関数 imopen を使用してイメージに対してモルフォロジー オープニングを実行します。結果のイメージが元のイメージから減算されます。imopen 演算は、基本的に imerode 演算の後に imdilate が続きます。

入力グレースケール イメージでこの例を示します。

original = imread('rice.png');
imshow(original),title('Input to Top-Hat Filtering');

半径 12 の円盤型の構造化要素を作成します。この構造化要素の近傍 Nhood を関数 imtophat の入力引数として渡します。

se = strel('disk',12);
Nhood = se.Neighborhood;
type imtophatDemo_gpu
function [out]  = imtophatDemo_gpu(img,Nhood) %#codegen

%   Copyright 2019 The MathWorks, Inc.   

coder.gpu.kernelfun;

% This example uses OpenCV for reading an image 
% and displaying output image. Update buildinfo to link with 
% OpenCV library available on target.
opencv_link_flags = '`pkg-config --cflags --libs opencv`';
coder.updateBuildInfo('addLinkFlags',opencv_link_flags);
coder.updateBuildInfo('addCompileFlags','-std=c++11');

out = imtophat(img,Nhood);

end

ターゲットでの CUDA コードの生成と展開

このプログラムは、imtophatDemo_gpu.m をコード生成用のエントリポイント関数として使用します。CUDA 実行可能ファイルを生成するために、GPU コード構成オブジェクトを作成します。

cfg = coder.gpuConfig('exe');

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

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

カスタム メイン ファイルは、生成コード内で関数 imtophat を呼び出すラッパーです。後処理手順は OpenCV インターフェイスを使用してメイン ファイルに追加されています。関数 imtophatDemo_gpu.m には Build Flags for OpenCV Libraries が含まれています。

cfg.CustomSource = fullfile('main.cpp');

CUDA コードを生成するには、関数 codegen を使用して、入力引数と共に GPU コード構成オブジェクトを渡します。この手順で、CUDA コードがホストで生成され、生成されたファイルがターゲット上のワークスペース ディレクトリにコピーされてビルドされます。ワークスペース ディレクトリは、ハードウェア オブジェクト hwobj のプロパティ workspaceDir として利用できます。

codegen -args {original,coder.Constant(Nhood)} -config cfg imtophatDemo_gpu -report

ターゲットでのアプリケーションの実行

このアプリケーションはグレースケール イメージを入力として受け取ります。putFile コマンドを使用して、rice.png ファイルをホストからターゲット デバイスにコピーします。hwobj.putFile('rice.png',hwobj.workspaceDir);

ハードウェア オブジェクトの runApplication メソッドを使用して、ターゲット ハードウェアでアプリケーションを起動します。

hwobj.runApplication('imtophatDemo_gpu','rice.png');

Jetson TX2 でのトップハット フィルター済みイメージ

アプリケーションの強制終了

ハードウェア オブジェクトの killApplication メソッドを使用して、ターゲット上で実行中のアプリケーションを強制終了します。

hwobj.killApplication('imtophatDemo_gpu');

コマンドの実行: クリーンアップ

関数 cleanup を実行して生成されたファイルを削除し、元のフォルダーに戻します。

cleanup