前回の動画エンコードに続いて、今回は動画デコードを取り上げさせていただきます。エンコードと同様、Jetsonは動画デコード専用のハードウェアアクセラレーター NVIDIA Video Decoder Engine(NVDEC)も内蔵します。Jetsonを効率的に利用するには、デコードはこのNVDECにより実行する必要があります。そのために利用できるAPIはエンコードの場合と同じくGStreamerとJetson Multimedia APIです。
[Jetsonビデオ処理プログラミング]
第1話 NVIDIA提供 JetPackとSDKでできること
第2話 ビデオ入力(CSI接続のLibargus準拠カメラ)
第7話 動画デコード
実装方法
NVDECによる動画デコードを実装する方法は以下のとおりです。
| API | プログラミング言語 | コメント | 
| GStreamer | 
 | 
 | 
| Jetson Multimedia API | 
 | 
 | 
GStreamerを利用
GStreamerパイプラインのプロトタイピング
エンコードの場合と同様に、gst-launch-1.0コマンドでデコード処理のプロトタイピングができます。
たとえば、H.264コーデックでエンコードされ、MP4コンテナに格納されているtest.mp4というファイルをデコードして、モニターへ表示するパイプラインは以下のとおりです。
gst-launch-1.0 -e \
filesrc location=test.mp4 ! \
qtdemux name=demux demux.video_0 ! \
queue ! \
h264parse ! \
nvv4l2decoder ! \
nvegltransform ! \
nveglglessinkGStreamer API
エンコードの場合と同様、コマンドラインでプロトタイピングの後は、GStreamer APIでアプリケーションへ組み込みます。
OpenCVからGStreamerを利用
JetPackでインストールされるデフォルトのOpenCVはJetson固有のハードウェアアクセラレーターが有効になっていませんが、OpenCV VideoCaptureのバックエンドをGStreamerとすることで、OpenCVからNVDECによる高速動画デコードが利用できます。
appsinkプラグインで、デコードしたストリームデータをOpenCVへ渡すことができます。
import cv2
import sys
FILE = 'test.mp4'
GST_COMMAND = 'filesrc location={} ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw,format=(string)I420 ! videoconvert ! appsink'.format(FILE)
cap = cv2.VideoCapture(GST_COMMAND)
if not cap.isOpened():
    print("Cannot open stream")
    sys.exit()
while True:
    ret, frame = cap.read()
    if ret == False:
        break
    cv2.imshow("Test", frame)
    key = cv2.waitKey(1)
    if key == 27: # ESC
        break
cv2.destroyAllWindows()
cap.release()
sys.exit()Multimedia APIを利用
Jetson Multimedia APIに含まれるV4L2 Video DecoderでもNVDECを利用した動画デコードが利用可能です。
利用方法は、JetPackに含まれるサンプルコードを参照ください。サンプルコードはJetson上の以下のパスに存在します。
/usr/src/jetson_multimedia_api/samples
次回は、画像処理について解説します!
連載記事「Jetsonビデオ処理プログラミング」の第7話、動画デコードについてご紹介しましたがいかがでしたでしょうか。
次回は、画像処理についてご紹介します。
お困りのことがあれば、ぜひお問い合わせください
弊社ではハードウェアのNVIDIA GPUカードやGPUワークステーションの選定やサポート、また顔認証、導線分析、骨格検知のアルゴリズム、さらに学習環境構築サービスなどを取り揃えております。お困りの際は、ぜひお問い合わせください。



 
				![[AI画像解析アプリ開発に必要な知識] 第1話 NVIDIA DeepStream SDKとはのサムネイル画像](/business/semiconductor/articles/134117_thumb_r_18.png)


