Train_Identify/nvidia_ascend_engine/common_engine/TrainAnaEngine/TrainParationMgr.cpp

1 line
10 KiB
C++
Raw Normal View History

#include "TrainParationMgr.h" using namespace ai_matrix; TrainParationMgr::TrainParationMgr() {} TrainParationMgr::~TrainParationMgr() {} APP_ERROR TrainParationMgr::Init() { strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0"; strResultPath_ = MyYaml::GetIns()->GetPathValue("gc_result_path"); //获取主摄像头信息 mainCfg_ = MyYaml::GetIns()->GetDataSourceConfigById(0); nFrameRate = 25; InitParam(); nTailPixOffset = getTailPixOffset(); LogInfo << "TrainParationMgr Init ok"; return APP_ERR_OK; } APP_ERROR TrainParationMgr::DeInit() { LogInfo << "TrainParationMgr DeInit ok"; return APP_ERR_OK; } int TrainParationMgr::getTailPixOffset() { LogInfo << "TrainParationMgr getTailPixOffset start"; // 单位计算 // 帧宽像素/米 float fframewidth_meter = ((METHOD_BASE_WIDTH * 1.0) / (TRAIN_IN_CAMERA_WIDTH)); // 车尾车钩像素位置 float fOffsetPosistion = TRAIN_WIDTH * fframewidth_meter; int nretOffset = (int)fOffsetPosistion; return nretOffset; } /** * 参数初始化(列车结束时需调用) * inParam : N/A * outParam: N/A * return : N/A */ void TrainParationMgr::InitParam() { } /** * 计算车钩移动的像素值 * inParam : 行车速度(单位:米/秒) * inParam : 宽度 * inParam : 相机帧率(单位:帧/秒) * outParam: N/A * return : 间隔帧 */ int TrainParationMgr::getCouplerOffsetPosition(float fspeed, int nframeindex) { LogInfo << "TrainAnaEngine getCouplerOffsetPosition start"; //单位换算 // 米/秒 -> 米/帧 // 米/帧 = 米/秒 * 秒/帧(即:1/帧率) float fmeter_frame = fspeed / nFrameRate; // 米/帧 -> 像素/帧 // 像素/帧 = 米/帧 * 像素/米 float fpix_frame = fmeter_frame * (METHOD_BASE_WIDTH / TRAIN_IN_CAMERA_WIDTH); int nretPixOffet = (int)fpix_frame; nretPixOffet = nretPixOffet * nframeindex; LogInfo << "TrainAnaEngine getCouplerOffsetPosition nretPixOffet:" << nretPixOffet; LogInfo << "TrainAnaEngine getCouplerOffsetPosition end"; return nretPixOffet; } /** * 计算车钩移动的像素值 * inParam : 行车速度(单位:米/秒) * inParam : 宽度 * inParam : 相机帧率(单位:帧/秒) * outParam: N/A * return : 间隔帧 */ int TrainParationMgr::getCouplerOffsetPix(float fspeed, int noffsetPix) { LogInfo << "TrainAnaEngine getCouplerOffsetPix start"; LogInfo << "TrainAnaEngine getCouplerOffsetPix fspeed:" << fspeed; // LogInfo << "TrainAnaEngine getCouplerOffsetPix start:" << nframeindex; //单位换算 // 米/秒 -> 米/帧 // 米/帧 = 米/秒 * 秒/帧(即:1/帧率) float fmeter_frame = fspeed / nFrameRate; LogInfo << "TrainAnaEngine getCouplerOffsetPix fmeter_frame:" << fmeter_frame; // 米/帧 -> 像素/帧 // 像素/帧 = 米/帧 * 像素/米 float fpix_frame = fmeter_frame * (METHOD_BASE_WIDTH / TRAIN_IN_CAMERA_WIDTH); LogInfo << "TrainAnaEngine getCouplerOffsetPix fpix_frame:" << fpix_frame; int nretPixOffet = (int)fpix_frame; nretPixOffet = (noffsetPix - (METHOD_BASE_WIDTH / 2)) / nretPixOffet; LogInfo << "TrainAnaEngine getCouplerOffsetPix nretPixOffet:" << nretPixOffet; LogInfo << "TrainAnaEngine getCouplerOffsetPix end"; return nretPixOffet; } /** * 计算车钩从中间到边缘的间隔帧 * inParam : 行车速度(单位:米/秒) * inParam : 宽度 * inParam : 相机帧率(单位:帧/秒) * outParam: N/A * return : 间隔帧 */ int TrainParationMgr::getOffsetFrame(float fspeed, int width, int nFrameRate) { LogInfo << "TrainAnaEngine getOffsetFrame start"; LogInfo << "TrainAnaEngine getOffsetFrame fspeed:" << fspeed; LogInfo << "TrainAnaEngine getOffsetFrame width:" << width; LogInfo << "TrainAnaEngine getOffsetFrame nFrameRate:" << nFrameRate; //LogInfo << "TrainAnaEngine getOffsetFrame nLatestFrame:" << nLatestFrame; //偏移值 = (中间到边缘的宽度(米) / 速度(米/秒)->时间(秒))* 帧率(帧/秒) float ftmp = width * (float) nFrameRate; LogInfo << "TrainAnaEngine getOffsetFrame start end:"