背景
當前項目需求是使用GPU進行多路視頻解碼處理,解碼幀繼續進行ORB特徵提取,然後生成vlad聚合特徵,最後對其數據進行檢索
問題
- NVIDIA Video Codec庫提供的解碼實例中對於頭部有些許問題的視頻無法處理
這個還沒有解決 想要從ffmpeg入手看看能否搞定 因爲解封裝的操作是ffmepg庫的接口調用實現
- NVIDIA多線程處理結束後從GPU取出cv::cuda::GpuMat時發生內存錯誤
這個已經解決
1、多線程中每個線程需要使用獨立的一個CuContext cuda上下文進行處理 之前沒有注意到這個問題
2、使用全局變量stl的容器進行緩存時,vector的push_back操作是淺拷貝 導致出現問題
push_back的 參數使用 GpuMat.clone() 函數進行深拷貝 解決
- ORB處理數據使用的是灰度圖像,所以當Video Codec庫解碼數據是NV12類型時,直接提取Y分量即可,不用做YUV–>RGB的轉換,前期浪費了一個星期研究這個用不到的轉換
需求開發的時候有時候需要兼顧前後流程,不然白白浪費時間
參考
1、NVIDIA Video Codec 9.1
2、Opencv 3.4.4
3、DBoW3
4、Faiss 1.5.3
5、Cuda 10.1