You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
3.9 KiB
C++
181 lines
3.9 KiB
C++
#include "MA_TRTInferAlgoBase.h"
|
|
#include "ML_Log.h"
|
|
#include <time.h>
|
|
|
|
MA_TRTInferAlgoBase::MA_TRTInferAlgoBase(const trtUtils::InitParameter& param)
|
|
{
|
|
mStream = nullptr;
|
|
m_param = param;
|
|
|
|
// ³õʼ»¯ÈÕÖ¾
|
|
mLogPtr = std::make_shared<ML_Log>();
|
|
std::string logFile = "./logFiles/vision_log-20240418.txt";
|
|
|
|
if (mLogPtr)
|
|
{
|
|
mLogPtr->Init(logFile.c_str());
|
|
}
|
|
|
|
}
|
|
|
|
MA_TRTInferAlgoBase::~MA_TRTInferAlgoBase()
|
|
{
|
|
mLogPtr->UnInit();
|
|
}
|
|
|
|
bool MA_TRTInferAlgoBase::initEngine(const std::string& _onnxFileName)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool MA_TRTInferAlgoBase::check()
|
|
{
|
|
if (m_engine == nullptr || m_context == nullptr)
|
|
{
|
|
LOG_ERROR("do check, engine or context dose not engine. \n");
|
|
return false;
|
|
}
|
|
|
|
int idx;
|
|
nvinfer1::Dims dims;
|
|
|
|
//sample::gLogInfo << "the engine's info:" << std::endl;
|
|
LOG_INFO("The engine's info:");
|
|
for (auto layer_name : m_param.input_output_names)
|
|
{
|
|
idx = m_engine->getBindingIndex(layer_name.c_str());
|
|
dims = m_context->getBindingDimensions(idx);
|
|
sample::gLogInfo << "idx = " << idx << ", " << layer_name << ": ";
|
|
LOG_INFO("idx = " + std::to_string(idx) + ", " + layer_name);
|
|
for (int i = 0; i < dims.nbDims; i++)
|
|
{
|
|
sample::gLogInfo << dims.d[i] << ", ";
|
|
}
|
|
sample::gLogInfo << std::endl;
|
|
LOG_INFO("\n");
|
|
}
|
|
sample::gLogInfo << "the context's info:" << std::endl;
|
|
LOG_INFO("The context's info:");
|
|
for (auto layer_name : m_param.input_output_names)
|
|
{
|
|
idx = m_engine->getBindingIndex(layer_name.c_str());
|
|
dims = m_context->getBindingDimensions(idx);
|
|
sample::gLogInfo << "idx = " << idx << ", " << layer_name << ": ";
|
|
for (int i = 0; i < dims.nbDims; i++)
|
|
{
|
|
sample::gLogInfo << dims.d[i] << ", ";
|
|
}
|
|
sample::gLogInfo << std::endl;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool MA_TRTInferAlgoBase::doTRTInfer(const std::vector<MN_VisionImage::MS_ImageParam>& _bufImgs, std::vector<trtUtils::MR_Result>* _detectRes, int* _user)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool MA_TRTInferAlgoBase::doTRTInfer(const std::vector<cv::Mat>& _bufImgs, std::vector<trtUtils::MR_Result>* _detectRes, int* _user)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
std::string MA_TRTInferAlgoBase::getError()
|
|
{
|
|
return " ";
|
|
}
|
|
|
|
void MA_TRTInferAlgoBase::freeMemeory()
|
|
{
|
|
return;
|
|
}
|
|
|
|
bool MA_TRTInferAlgoBase::measureAxis(std::vector<double>& measureRes, const MN_VisionImage::MS_ImageParam& _bufImg)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
int MA_TRTInferAlgoBase::loadTRTModelData(const std::string& _trtFile, std::vector<uchar>& _modelData)
|
|
{
|
|
std::ifstream in(_trtFile, std::ios::in | std::ios::binary);
|
|
if (!in.is_open())
|
|
{
|
|
return {};
|
|
}
|
|
|
|
in.seekg(0, std::ios::end);
|
|
size_t len = in.tellg();
|
|
|
|
if (len > 0)
|
|
{
|
|
in.seekg(0, std::ios::beg);
|
|
_modelData.resize(len);
|
|
|
|
in.read((char*)&_modelData[0], len);
|
|
}
|
|
in.close();
|
|
|
|
return 0;
|
|
}
|
|
|
|
int MA_TRTInferAlgoBase::copyToDevice(const std::vector<cv::Mat>& _imgsBatch)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int MA_TRTInferAlgoBase::preProcess(const std::vector<cv::Mat>& _imgsBatch)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int MA_TRTInferAlgoBase::infer()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int MA_TRTInferAlgoBase::copyFromDevice(const std::vector<cv::Mat>& _imgsBatch)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int MA_TRTInferAlgoBase::postProcess(const std::vector<cv::Mat>& _imgsBatch)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
bool MA_TRTInferAlgoBase::buffer2Mat(const MN_VisionImage::MS_ImageParam& _inImg, cv::Mat& _mat)
|
|
{
|
|
uchar* pBuf = _inImg.m_data.get(); //»ñȡͼÏñÊý¾ÝÊ×µØÖ·
|
|
int nW = _inImg.m_width; // ͼÏñ¿í¶È
|
|
int nH = _inImg.m_height; // ͼÏñ¸ß¶È
|
|
int nChannel = _inImg.m_channels; // ͼÏñͨµÀÊý
|
|
|
|
if (pBuf == nullptr || nW <= 1 || nH <= 1)
|
|
{
|
|
LOG_ERROR("convert buffer to mat, input image error. \n");
|
|
return false;
|
|
}
|
|
|
|
if (_inImg.mImgType == MN_VisionImage::ME_ImageType::E_GRAY)
|
|
{
|
|
_mat = cv::Mat(nH, nW, CV_8UC1, pBuf);
|
|
}
|
|
else if (_inImg.mImgType == MN_VisionImage::ME_ImageType::E_RGBA)
|
|
{
|
|
_mat = cv::Mat(nH, nW, CV_8UC4, pBuf);
|
|
}
|
|
else
|
|
{
|
|
_mat = cv::Mat(nH, nW, CV_8UC3, pBuf);
|
|
}
|
|
|
|
if (_mat.data == nullptr || _mat.cols <= 1 || _mat.rows <= 1)
|
|
{
|
|
LOG_ERROR("convert buffer to mat, convert image failed. \n");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|