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