#include "feature_model.h" #include "mutex" using namespace std; namespace trt_vehicle { std::mutex mtx_feature; FeatureModel::FeatureModel(const std::string& modelPath) { m_inputType = NetworkInputType::CHW; auto ret = m_predictor.init(modelPath); assert(ret == 0); setSize(); m_score = new float[m_batch*m_outputSizeC]; m_scoreCuda = nullptr; cudaMalloc(&m_scoreCuda,m_batch*m_outputSizeC*sizeof(float)); m_imageDataCuda= nullptr; cudaMalloc(&m_imageDataCuda, m_batch*m_inputSizeW*m_inputSizeH*m_inputSizeC*sizeof(float)); } FeatureModel::~FeatureModel(){ if(m_score){ delete [] m_score; } if(m_scoreCuda){ cudaFree(m_scoreCuda); } if(m_imageDataCuda){ cudaFree(m_imageDataCuda); } } int FeatureModel::setSize(){ int tmp1,tmp2; m_predictor.getSize(m_batch,m_inputSizeC,m_inputSizeH,m_inputSizeW,m_outputSizeC,tmp1,tmp2, m_inputType); return 0; } int FeatureModel::extractFeature(std::vector imgs) { vector imageData; for(int i=0;i buffers = { m_imageDataCuda, m_scoreCuda }; m_predictor.infer(buffers, m_batch); return 0; } std::vector> FeatureModel::predictNoPadding(std::vector imgs){ std::vector> scores; mtx_feature.lock(); int ret = 0; try{ ret = extractFeature(imgs); }catch(...){ std::cout<<"errcode : "< score; for(int i=0;i> FeatureModel::predictPadding(std::vector imgs,int paddingValue){ std::vector imgPaddings; for(int i=0;ih){ s = w; } cv::Mat imgPadding = cv::Mat::zeros(s,s,CV_8UC3)+paddingValue; // imgPadding.setTo(paddingValue); int wStart = int((s-w)/2); int hStart = int((s-h)/2); cv::Rect roi = cv::Rect(wStart,hStart,w,h); img.copyTo(imgPadding(roi)); imgPaddings.push_back(imgPadding); } return predictNoPadding(imgPaddings); } }