画像処理の前処理として、リサイズ(拡大/縮小)とフォーマット変換は一般的な処理です。そのため、これらの処理が非効率な実装であると、予想外に計算リソースを消費してしまい、スループットが上がりません。連載記事第4話は、リサイズとフォーマット変換をJetsonで実装する手段について考えてみましょう。
[Jetsonビデオ処理プログラミング]
第1話 NVIDIA提供 JetPackとSDKでできること
第2話 ビデオ入力(CSI接続のLibargus準拠カメラ)
第4話 リサイズとフォーマット変換
実装方法の比較
リサイズ、フォーマット変換、共に、複数の方法で実装できます。下表はそれらの比較です。
API |
プログラミング言語 |
長所 |
短所/課題 |
GStreamer |
C Python |
|
|
OpenCV |
C Python |
|
|
VPI |
C++ Pythonも対応予定 |
|
|
Multimedia API | C++ |
|
|
NVIDIA Performance Primitives(NPP) | C |
|
|
GStreamerを利用する場合
nvvidconvプラグインで実装できます。以下に例を示します。この例は、コマンドラインで実行できますが、アプリケーションに組み込むときは、GStreamer API(CまたはPython)を利用してプログラムする必要があります。
注:テストに利用したウェブカメラ(ロジクールC270n HDウェブカメラ)の出力形式(YUYV)が、nvvidconvプラグインへの入力(sink)形式に対応していないため、videoconvertプラグインでnvvidconvプラグインの対応形式(本例ではNV12)へ変換しています。
$ gst-launch-1.0 -e \
v4l2src device="/dev/video0" ! \
"video/x-raw, width=(int)640, height=(int)480" ! \
videoconvert ! \
"video/x-raw, format=(string)NV12" ! \
nvvidconv interpolation-method=Bilinear flip-method=horizontal-flip ! \
"video/x-raw(memory:NVMM), format=(string)RGBA, width=(int)1280, height=(int)960" ! \
nv3dsink
OpenCVを利用する場合
JetPackに含まれているOpenCVはCUDA無効でビルドされています。CUDA版の関数を利用する場合は、CUDAを有効にしてビルド、インストールする必要があります。
VPIを利用する場合
Vision Programming Interface(VPI)を利用することで、バックエンド(CPU / CUDA / PVA / VIC)が異なる処理を、同じAPIで記述できます。
リサイズとフォーマット変換の詳細はConvert Image Formatで確認できます。
Image Resamplingサンプルプログラムで使い方を理解することができます。このサンプルプログラムの実行方法を以下にご紹介します。
$ cp -r /opt/nvidia/vpi1/samples/04-rescale/ ./
$ cd 04-rescale/
$ mkdir build
$ cd build
$ cmake ..
$ ./vpi_sample_04_rescale cuda /opt/nvidia/vpi1/samples/assets/kodim08.png
Multimedia APIを利用する場合
07_video_convertサンプルコードで使い方を確認できます。サンプルプログラムは以下のパスに存在します。
/usr/src/jetson_multimedia_api/samples/07_video_convert
NPPを利用する場合
NVIDIA Performance Primitives(NPP)を利用することで、非常に高いスループットのリサイズやフォーマット変換を実現できます。
次回、画像表示方法を解説!
連載記事「Jetsonビデオ処理プログラミング」の第4話、リサイズとフォーマット変換ついてご紹介しましたがいかがでしたでしょうか。
次回の第5話は画像表示の方法ついてご紹介します。
お困りのことがあれば、ぜひお問い合わせください
弊社ではハードウェアのNVIDIA GPUカードやGPUワークステーションの選定やサポート、また顔認証、導線分析、骨格検知のアルゴリズム、さらに学習環境構築サービスなどを取り揃えております。お困りの際は、ぜひお問い合わせください。