VP影片結構化框架
- 2022 年 7 月 26 日
- 筆記
完成多路影片並行接入、解碼、多級推理、結構化數據分析、上報、編碼推流等過程,插件式/pipe式編程風格,功能上類似NVIDIA 的deepstream和華為的mxvision,但底層核心不依賴複雜難懂的gstreamer框架(少部分地方需要),框架主幹部分主要使用原生C++ STL實現,目標是平台高可移植性。框架可用於:影片結構化、以圖搜圖、目標行為分析等應用領域。
主要功能
- 影片接入,支援file/rtsp/udp/rtmp等主流影片流協議;
- 多級推理,自帶檢測/分類/特徵提取等推理插件。默認使用opencv.dnn實現,可基於其他類似tensorrt、甚至原生的pytorch/tensorflow擴展新的推理插件;
- 目標跟蹤,自帶基於iou的跟蹤插件,可基於其他演算法擴展新的跟蹤插件;
- 行為分析,自帶若干行為分析插件,比如目標跨線、擁堵/目標聚集判斷;
- 影像疊加,結構化數據和影片融合顯示;
- 消息推送,自帶基於kafka的消息推送插件,可基於其他消息中間件擴展新的插件;
- 錄像/截圖,自帶截圖/錄像插件;
- 編碼輸出,支援file/screen/rtmp/rtsp等主流方式輸出編碼結果;
主要特點
- 可視化調試,自帶pipe可視化功能,可在介面實時顯示pipe的運行狀態,如pipe中各個環節的fps/快取隊列大小,以及計算pipe起/止插件之間的時間延時,幫助程式設計師快速定位性能瓶頸位置;
- 插件與插件之間默認採用「smart pointer」傳遞數據,數據從頭到尾,只需創建一次,不存在拷貝操作。當然,可根據需要設置「深拷貝」方式在插件之間傳遞數據;
- pipe中各通道影片的fps、解析度、編碼方式、來源均可不同,並且可單獨暫停某一通道;
- pipe中可傳遞的數據只有兩種,一種frame_meta數據、一種control_meta數據,結構清晰明了;
- 插件組合方式自由,在滿足客觀邏輯的前提下,可合併、可拆分,根據需要設計不同的pipe結構。同時自帶pipe結構檢查功能,識別出不合規的pipe結構;
- pipe支援各種hook,外部通過hook可以實時獲取pipe的運行情況(第1點就是基於該特性實現);
- 基於指定基類,所有自帶插件全部可自定義重新實現;
- 框架主幹程式碼完全基於原生C++ STL實現,跨平台編譯部署簡單。
目前進度
- 2022/7/22:已完成主幹框架開發,預估佔總體進度的1/3。等基本完成後開源,有興趣的朋友可以關注。
下面第一張圖顯示pipe構建過程,第二張圖自動顯示pipe結構、並實時刷新pipe運行狀態: