2346204_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2346204_ja-JP

2346204_ja-JP

OpenCVでキャプチャしたISP Vivanteからのビデオストリームは、多くのCPUリソースを消費する。


私はIMX8MPlusのISPとMIPI CSIを使用したカメラを使っています。

v4l2ctl --list-devices

():
/dev/v4l-subdev0
/dev/v4l-subdev2
/dev/v4l-subdev3

(csi0):
/dev/v4l-subdev1

FSLキャプチャメディアデバイス(プラットフォーム:32c00000.bus:camera):
/dev/media0

mxc-isi_v1 (プラットフォーム:32e00000.isi:cap_devic):
/dev/video2

VIV(プラットフォーム:viv0):

/dev/video3

viv_media (プラットフォーム:vvcam-video.0):
/dev/media1


そこで、OpenCV GStreamerを使用してISI /dev/video2からビデオをキャプチャすると、CPU使用率が約90%になります。


しかし、同じビデオをISP /dev/video3からOpenCV GStreamerでキャプチャすると、CPU使用率が約125%になります。


perfを使って分析すると、SIMD命令で多くのCPUプロセッシングが無駄になっていると表示されます。

 

Screenshot 2026-04-07 173215.png


つまり、ISPを使用する際に、これらの追加命令が読み込まれるということです。

この方法でフレームをキャプチャします(GStreamerを使用)。

cv::VideoCapture cap(cam_index)

if (!cap.isOpened())
ヤージュ
std::cerr << "カメラを開けませんでした " << cam_index << "\n";
1を返す。
}

ISPとOpenCVを使用する際には、このオーバーヘッドを取り除く必要があります。


ISPストリームに関する追加情報


v4l2-ctl -d /dev/video3 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
タイプ: ビデオキャプチャ

[0]: 'YUYV' (YUYV 4:2:2)
サイズ:ステップワイズ 176x144 - 4096x3072、ステップ 16/8
[1]: 'NV12' (Y/UV 4:2:0)
サイズ:ステップワイズ 176x144 - 4096x3072、ステップ 16/8
[2]: 'NV16' (Y/UV 4:2:2)
サイズ:ステップワイズ 176x144 - 4096x3072、ステップ 16/8
[3]: 'BA12' (12ビットベイヤーGRGR/BGBG)
サイズ:ステップワイズ 176x144 - 4096x3072、ステップ 16/8

v4l2-ctl -d /dev/video3 --get-fmt-video
フォーマットビデオキャプチャ:
幅/高さ:1280/800
ピクセルフォーマット:'NV16'(Y/UV 4:2:2)
フィールド:なし
1行あたりのバイト数:1280
画像サイズ:2048000
カラースペース: Rec.709
伝達関数: 推奨。709
YCbCr/HSV エンコーディング: Rec.709
量子化:限定範囲
フラグ: set-csc


お知らせ下さい。

i.MX 8M | i.MX 8M Mini | i.MX 8M NanoマルチメディアRe: Video stream from ISP Vivante captured by openCV consumes lot of CPU

OpenCVの詳しい使用手順を教えてください。こちらで再現してみます。

Re: Video stream from ISP Vivante captured by openCV consumes lot of CPU

これは、OpenCVがデータ処理中に実行する変換処理が原因です。

そこで、純粋なGStreamerを使ってimxvideoconvertor_g2d 2D GPUでフレームを取得しようとしたところ、CPU使用率が約50%上昇しました。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎04-28-2026 03:43 AM
更新者: