【G-streamer】USBカメラの情報を確認する方法

スポンサーリンク
【G-streamer】USBカメラの情報を確認する方法AIを作ってみる
この記事を読んで分かること
  • USBカメラの情報を確認する方法
  • g-streamerを使ってカメラの入力をディスプレイに表示する方法

 

実行環境

  • Jetson Xavier NX
  • jetpack4.5
  • GStreamer 1.14.5

 

カメラの接続状況を確認

Linuxではv4l2ドライバを使用してUSBカメラを制御しています。

v4l2を使ってカメラの情報を確認していきましょう。

v4l2のインストール

aptコマンドで「v4l2」をインストールします。

sudo apt install v4l-utils

 

接続されているデバイスの確認

v4l2」で認識されているデバイス一覧を表示します。

v4l2-ctl --list-devices
実行結果(クリックして表示)
HD USB Camera (usb-3610000.xhci-2.4): 
/dev/video0

 

HD USB Cameraが/dev/video0として認識されていることが分かりました。

今回はこちらのsonyのwebカメラを使用して動作確認しています。

 

カメラの対応フォーマットを確認

カメラの対応フォーマットは、「v4l2」もしくはg-streamerのコマンド「gst」で確認することが出来ます。

どちらでも結果は変わらないので、好きなコマンドを使ってください。

v4l2でカメラの対応フォーマットを確認

v4l2コマンドでカメラの情報を確認していきます。

v4l2-ctl --list-formats-ext
実行結果(クリックして表示)
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1600x1200
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 3264x2448
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.067s (15.000 fps)

Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1600x1200
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 3264x2448
Interval: Discrete 0.500s (2.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.333s (3.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.333s (3.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.100s (10.000 fps)

 

Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)

Index : 1 
Type : Video Capture 
Pixel Format: 'YUYV'

カメラが対応しているピクセルフォーマットが2種類あることが確認できました。

 

Size: Discrete 1600x1200 
Interval: Discrete 0.067s (15.000 fps)

例えばPixel Formatが「MJPG」の1600×1200画素の時に、最大15fpsとなることが分かります。

 

g-streamerでカメラの対応フォーマットを確認

続いて、g-streamerの機能でもカメラの情報を確認できるので試してみます。

 gst-device-monitor-1.0
実行結果(クリックして表示)
Probing devices...

Device found:

name : HD USB Camera
class : Video/Source
caps : video/x-raw, format=(string)YUY2, width=(int)3264, height=(int)2448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)2/1;
video/x-raw, format=(string)YUY2, width=(int)2592, height=(int)1944, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)3/1;
video/x-raw, format=(string)YUY2, width=(int)2048, height=(int)1536, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)3/1;
video/x-raw, format=(string)YUY2, width=(int)1600, height=(int)1200, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1;
video/x-raw, format=(string)YUY2, width=(int)1600, height=(int)1200, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1;
video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1;
video/x-raw, format=(string)YUY2, width=(int)1024, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1;
video/x-raw, format=(string)YUY2, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
image/jpeg, width=(int)3264, height=(int)2448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1;
image/jpeg, width=(int)2592, height=(int)1944, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1;
image/jpeg, width=(int)2048, height=(int)1536, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1;
image/jpeg, width=(int)1600, height=(int)1200, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1;
image/jpeg, width=(int)1600, height=(int)1200, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1;
image/jpeg, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1;
image/jpeg, width=(int)1024, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
image/jpeg, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
image/jpeg, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1;
properties:
udev-probed = true
device.bus_path = platform-3610000.xhci-usb-0:2.4:1.0
sysfs.path = /sys/devices/3610000.xhci/usb1/1-2/1-2.4/1-2.4:1.0/video4linux/video0
device.bus = usb
device.subsystem = video4linux
device.vendor.id = 32e4
device.vendor.name = "HD\\x20USB\\x20Camera"
device.product.id = 8830
device.product.name = "HD\ USB\ Camera"
device.serial = HD_USB_Camera_HD_USB_Camera_2020040501
device.capabilities = :capture:
device.api = v4l2
device.path = /dev/video0
v4l2.device.driver = uvcvideo
v4l2.device.card = "HD\ USB\ Camera"
v4l2.device.bus_info = usb-3610000.xhci-2.4
v4l2.device.version = 264649 (0x000409c9)
v4l2.device.capabilities = 2216689665 (0x84200001)
v4l2.device.device_caps = 69206017 (0x04200001)
gst-launch-1.0 v4l2src ! ...

 

v4l2と同様にピクセルフォーマットが2種類あることが確認できました。

 

カメラからのデータ入力を確認

カメラからデータを取得できているか、v4l2コマンドで確認します。

解像度ピクセルフォーマットを指定して、ストリームを取得していきます。

今回は「YUYV」の1600×1200を指定しました。

v4l2-ctl --set-fmt-video=width=1600,height=1200,pixelformat=1
v4l2-ctl --stream-mmap=3 --stream-count=300
<<<<<<<<<<< 9.43 fps
<<<<<<<<< 9.35 fps
︙

最大10fpsということだったので、問題なくカメラからの入力が取得できていることが分かります。

 

カメラの入力をディスプレイに表示する

g-streamerを使ってカメラの入力をディスプレイに表示します。

gst-launch-1.0 \
v4l2src device="/dev/video0" ! \
"video/x-raw, width=1600, height=1200, format=(string)YUY2" ! \
xvimagesink -e

 

g-streamerを使ってカメラの入力データをディスプレイに表示できました。

それぞれのコマンドの意味はこのようになっています。

g-streamerのコマンドの意味
  • gst-launch-1.0
    DeepStreamをコマンドラインで使用(デバッグ用ツール)
  • v4l2src device=”/dev/video0″
    デバイス(カメラ)の指定
  • “video/x-raw, width=1600, height=1200, format=(string)YUY2”
    メモリ上のデータを整形する
    capsfilter(解像度などの指定をするフィルタ)が省略されている
    capsfilter ! “video/x-raw,・・・という記述が本来の形
    フィルタを使用しているので、PCに負荷はかからない
  • xvimagesink
    画面に表示
  • -e
    ソースの終了

 

まとめ

v4l2を使ってカメラの情報を確認しました。

v4l2で認識されているデバイス一覧を表示し、カメラの対応フォーマットを確認していきました。

接続状況を確認したあとは、g-streamerを使ってカメラの入力をディスプレイに表示しました。

 

参考文献

Welcome — Jetson Linux<br/>Developer Guide 34.1 documentation
NVIDIA Jetson nanoで 4Kカメラは扱えるか?エンコード性能を徹底検証
Jetson nanoで4K動画がどこまで扱えるか、4Kカメラ(MJPG転送)の実機を使って検証してみました。4KとフルHD動画について、h264とh265を用いて検証しています。また4Kについは、jpegハードウェアデコーダ(NVJPG)を併用したパターンも検証しました。

コメント

タイトルとURLをコピーしました