Armadilloフォーラム

Armadillo-loT G4で検知対象を録画する機能を追加した時の保存形式について

yuki.shigefuji

2023年3月17日 18時22分

お世話になっております。

表題の件でV4L2で出力しているUSBカメラで撮影している内容を.mp4形式で保存したいのですが、.avi形式でしか出力できず
(python3:285): GStreamer-CRITICAL **: 01:32:00.548: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' d
[ WARN:1@1.257] global ../modules/videoio/src/cap_gstreamer.cpp (2180) open OpenCV | GStreamer warning: cannot lins
[ INFO:1@1.257] global ../modules/videoio/src/backend_plugin.cpp (369) getPluginCandidates VideoIO plugin (INTEL_M)
[ INFO:1@1.268] global ../modules/videoio/src/backend_plugin.cpp (379) getPluginCandidates - /usr/lib/aarch64-0
[ INFO:1@1.268] global ../modules/videoio/src/backend_plugin.cpp (383) getPluginCandidates Found 0 plugin(s) for IX
[ERROR:1@1.269] global ../modules/videoio/src/cap.cpp (595) open VIDEOIO(CV_IMAGES): raised OpenCV exception:

OpenCV(4.5.5) ../modules/videoio/src/cap_images.cpp:267: error: (-215:Assertion failed) number < max_number in fun'

このようなエラーが発生しております。
armadilloで.mp4方式の動画データとして出力するためにはcv2の再インストールが必要なのでしょうか

コメント

> お世話になっております。
>
> 表題の件でV4L2で出力しているUSBカメラで撮影している内容を.mp4形式で保存したいのですが、.avi形式でしか出力できず
> (python3:285): GStreamer-CRITICAL **: 01:32:00.548: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' d
> [ WARN:1@1.257] global ../modules/videoio/src/cap_gstreamer.cpp (2180) open OpenCV | GStreamer warning: cannot lins
> [ INFO:1@1.257] global ../modules/videoio/src/backend_plugin.cpp (369) getPluginCandidates VideoIO plugin (INTEL_M)
> [ INFO:1@1.268] global ../modules/videoio/src/backend_plugin.cpp (379) getPluginCandidates - /usr/lib/aarch64-0
> [ INFO:1@1.268] global ../modules/videoio/src/backend_plugin.cpp (383) getPluginCandidates Found 0 plugin(s) for IX
> [ERROR:1@1.269] global ../modules/videoio/src/cap.cpp (595) open VIDEOIO(CV_IMAGES): raised OpenCV exception:
>
> OpenCV(4.5.5) ../modules/videoio/src/cap_images.cpp:267: error: (-215:Assertion failed) number < max_number in fun'
>
> このようなエラーが発生しております。
> armadilloで.mp4方式の動画データとして出力するためにはcv2の再インストールが必要なのでしょうか

opencvにmp4の圧縮機能は無いので、gstreamer(ライブラリとしてlibgstreamer)を呼び出していると思いますが
vpuenc_h264エレメントを使ってエンコードする必要があります。
製品マニュアルの図 9.92 GStreamer によるエンコード実行例に例がありますが、これをCVのコード内で呼び出す
必要がありますが、私も実装したことは無いので適切な例は持っていないですね。

さらに、エンコーダー(vpuenc_h264)にエンコードをさせつつ、画像処理等の別の用途に映像を使う場合は
エンコーダーに入れる前にgstreamerのteeエレメントでデータを2つに分岐させる必要があります。
これはgstreamerがパイプラインという”一続き”の処理を実行するデータの流れを処理するからです。

既に何かgstreamerをcvから呼び出しているようですが、どのようなコードを書いているでしょうか?