VideoPipeフレームワークの新機能解説

VideoPipeはオープンソース化されてから1ヶ月が経過し、多くの開発者の参加を得ました。以下にこの期間で追加された主な機能をまとめます。 プロジェクトURL: GitHubリポジトリ ### トラッキングプラグイン 新しいトラッキングプラグインが導入され、デフォルトではSORTアルゴリズムを使用しています。将来的にはDeep SORTへの拡張も容易です。以下は車両トラッキングの結果(下部にパイプラインの実行状態が表示されています): さらに顔認識のトラッキング例も以下のように動作します。 ### 録画およびスクリーンショットプラグイン 録画とスクリーンショット用のプラグインが追加されました。また、録画やスクリーンショットのコントロールインターフェースも提供されています。ユーザーがパイプラインに録画・スクリーンショットのコマンドを送信すると、プラグインが非同期で処理を行います。以下の図はその非同期録画の原理を示しています。 ### ログライブラリ 軽量なログライブラリが追加され、マルチスレッド対応の非同期ログ記録や自動ファイル分割がサポートされています。外部ライブラリを使用せず、独自に実装されています。以下はログ設定と使用例です。

1 // ログレベル設定
2 VP_SET_LOG_LEVEL(_log_level);
3 // ログディレクトリ設定
4 VP_SET_LOG_DIR(_log_dir);
5 
6 // コンソール出力の有効/無効
7 VP_SET_LOG_TO_CONSOLE(_log_to_console);
8 // ファイル出力の有効/無効
9 VP_SET_LOG_TO_FILE(_log_to_file);
10 // 予定されているKafkaへの送信設定
11 VP_SET_LOG_TO_KAFKA(_log_to_kafka);
12 
13 // ログレベルを含めるかどうか
14 VP_SET_LOG_INCLUDE_LEVEL(_include_level);
15 // コード位置情報を含めるかどうか
16 VP_SET_LOG_INCLUDE_CODE_LOCATION(_include_code_location);
17 // スレッドIDを含めるかどうか
18 VP_SET_LOG_INCLUDE_THREAD_ID(_include_thread_id);
19 
20 // メモリキャッシュ警告の閾値設定
21 VP_SET_LOG_CACHE_WARN_THRES(_log_cache_warn_threshold);
ログ出力のサンプルは次の通りです。

1 [2022-11-04 14:12:47.218][Info ] [file_src_0] フレーム読み込み完了, 合計フレーム数==>354
2 [2022-11-04 14:12:47.219][Info ] [file_src_0] サイクルフラグがtrueなので継続!
3 [2022-11-04 14:15:23.416][Warn ][../nodes/vp_infer_node.cpp:39] [vehicle_detector] cv::dnn::readNetによるネットワーク読み込み失敗!
### サンプルコード 新たに13個のサンプルコードが追加され、それぞれ独立して実行可能です。以下は「1-1-1」サンプルのコードとその結果です。

1 #include "VP.h"
2 #include "../nodes/vp_file_src_node.h"
3 #include "../nodes/infers/vp_yunet_face_detector_node.h"
4 #include "../nodes/osd/vp_face_osd_node_v2.h"
5 
6 /*
7 * ## 1-1-1 サンプル ##
8 * 1つのビデオ入力、1つの推論タスク、1つの出力を備えたパイプライン。
9 */
10 
11 int main() {
12     VP_SET_LOG_INCLUDE_CODE_LOCATION(false);
13     VP_SET_LOG_INCLUDE_THREAD_ID(false);
14     VP_LOGGER_INIT();
15 
16     // ノード作成
17     auto video_input = std::make_shared("video_input", 0, "./test_video/sample.mp4", 0.6);
18     auto face_detection = std::make_shared("face_detection", "./models/face_detection_model.onnx");
19     auto osd_renderer = std::make_shared("osd_renderer");
20 
21     // パイプライン構築
22     face_detection->attach_to({video_input});
23     osd_renderer->attach_to({face_detection});
24 
25     video_input->start();
26 
27     // デバッグ用分析ボード表示
28     vp_utils::vp_analysis_board board({video_input});
29     board.display();
30 }
上記コードにより生成されるパイプラインの構造は次のようになります。

タグ: C++ VideoProcessing opensource

6月11日 18:15 投稿