2024-06-19 05:57:23 +00:00
|
|
|
#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:"
|