贵州西洋修改版

This commit is contained in:
zhangwei 2025-07-12 17:16:46 +08:00
parent 34061d64d5
commit b46d2730cc
10 changed files with 35 additions and 10 deletions

View File

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>

View File

@ -195,5 +195,7 @@ inline int64_t volume(const nvinfer1::Dims& d);
extern std::atomic<int> g_identify_type;
// -1 = 未知方向; 1 = 向左行驶; 2 = 向右行驶
extern std::atomic<int> g_come_direction;
// 0 = 无车; 1 = 有车;
extern std::atomic<int> g_car_type;
#endif

View File

@ -10,7 +10,7 @@ engines:
VideoDecodeEngine: 1
VideoDecodeEngine: 2
ControlEngine: 0
# SaveMoveImageEngine: 0
SaveMoveImageEngine: 0
SaveMoveInfoEngine: 0
ContainerStep1InferenceEngine: 0
CornerInferenceEngine: 0
@ -38,7 +38,7 @@ connects:
ControlEngine_0_1: "ContainerStep1InferenceEngine_0_0 1024"
ControlEngine_0_2: "CornerInferenceEngine_0_0 1024"
ControlEngine_0_3: "SaveMoveInfoEngine_0_0 1024"
ControlEngine_0_4: "SaveMoveImageEngine_0_0 1024"
ControlEngine_0_4: "SaveMoveImageEngine_0_0 1024"
ContainerStep1InferenceEngine_0_0: "Step1MergeEngine_0_0 1024"
CornerInferenceEngine_0_0: "Step1MergeEngine_0_1 1024"
Step1MergeEngine_0_0: "ContainerStep2InferenceEngine_0_0 1024"

File diff suppressed because one or more lines are too long

View File

@ -72,7 +72,7 @@ void ControlEngine::endIdentify(int iDataSource)
void ControlEngine::sendWSEngine(std::string msg)
{
msg = "{\"status\":\"normal\",\"msg\":" + msg +"}";
msg = "{\"containerNo\":\"\",\"detectDate\":\"\",\"detectTime\":\"\",\"id\":\"\",\"images\":\"\",\"imagesDir\":\"\",\"status\":\"normal\",\"msg\":\"" + msg +"\"}";
// 传给websocket引擎
outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(std::make_shared<std::string>(msg)));
}
@ -132,6 +132,7 @@ void ControlEngine::detectControl(std::shared_ptr<std::string> pWSServerOrder)
break;
}
this->mapIdentifyType_ = {{0, IDENTIFY_START}, {1, IDENTIFY_START}, {2, IDENTIFY_START}};
g_car_type = 1;
break;
case IDENTIFY_STOP:
if (!this->isDetecting())
@ -142,6 +143,7 @@ void ControlEngine::detectControl(std::shared_ptr<std::string> pWSServerOrder)
break;
}
this->mapIdentifyType_ = {{0, IDENTIFY_INIT}, {1, IDENTIFY_INIT}, {2, IDENTIFY_INIT}};
g_car_type = 0;
break;
case IDENTIFY_RECORD:
if (!jvOrder.isMember("containerNo"))
@ -190,6 +192,14 @@ APP_ERROR ControlEngine::Process()
if (pProcessData->bIsEnd)
{
if (!this->isDetecting()) continue;
// if (this->strDetectDate_.empty())
// {
// std::string msg = "数据源:" + std::to_string(pProcessData->iDataSource) + " 摄像头读取画面失败,停止识别!";
// this->sendWSEngine(msg);
// this->mapIdentifyType_[pProcessData->iDataSource] = IDENTIFY_INIT;
// continue;
// }
this->endIdentify(pProcessData->iDataSource);
LogInfo << "数据源:" << pProcessData->iDataSource << " 画面读取结束:停止识别!";
continue;
@ -267,7 +277,7 @@ APP_ERROR ControlEngine::Process()
pSaveImgData->bIsEnd = pProcessData->bIsEnd;
outputQueMap_[strPort4_]->push(std::static_pointer_cast<void>(pSaveImgData), true);
}
}

View File

@ -384,7 +384,7 @@ APP_ERROR ContainerDivideEngine::Process()
if (pVStep2OutputData->bIsEnd)
{
if (this->bLastIsEnd == pVStep2OutputData->bIsEnd) continue;
// if (this->bLastIsEnd == pVStep2OutputData->bIsEnd) continue;
std::shared_ptr<VSelectBestData> pVSelectBestData = std::make_shared<VSelectBestData>();
pVSelectBestData->bIsEnd = true;

View File

@ -1 +1 @@
#include "SaveResultCSVEngine.h" using namespace ai_matrix; SaveResultCSVEngine::SaveResultCSVEngine() {} SaveResultCSVEngine::~SaveResultCSVEngine() {} APP_ERROR SaveResultCSVEngine::Init() { strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0"; strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1"; this->baseConfig_ = Config::getins()->getBaseConfig(); LogInfo << "SaveResultCSVEngine Init ok"; return APP_ERR_OK; } APP_ERROR SaveResultCSVEngine::DeInit() { LogInfo << "SaveResultCSVEngine DeInit ok"; return APP_ERR_OK; } /** * 保存车厢的最优结果到CSV中 * inParam : std::shared_ptr<Train> pTrain :列车信息 * outParam: * return : true/false */ bool SaveResultCSVEngine::saveTrainCsv(std::shared_ptr<DetectResultData> pDetectResultData) { //1. 创建保存路径 (固定路径/YYYY-MM-DD/hh-mm-ss/) if (!FileUtil::getins()->createDirPath(this->baseConfig_.strResultPath)) { LogError << "日期:" << pDetectResultData->strDetectDate << " csv save err"; return false; } //2. 保存csv std::string strCsvName = pDetectResultData->strDetectDate + ".csv"; std::string strCsvPath = this->baseConfig_.strResultPath + "/" + pDetectResultData->strDetectDate + "/" + strCsvName; LogInfo << strCsvPath; bool bIsExsit = false; if (access(strCsvPath.c_str(), F_OK) != -1) { bIsExsit = true; } try { // 写文件 std::ofstream outFile; outFile.open(strCsvPath, std::ios::app); if (!bIsExsit) { outFile << "Time" << ',' << "Container" << ',' << "Image" << std::endl; } std::string strContainerNo; for (const auto & containerNo_it : pDetectResultData->vecContainerNO) { strContainerNo += "["; strContainerNo += containerNo_it; strContainerNo += "]"; } std::string strImage; for (const auto & image_it : pDetectResultData->vecImage) { strImage += "["; strImage += image_it; strImage += "]"; std::string strDebugImage = this->baseConfig_.strDebugResultPath + "/" + pDetectResultData->strDetectDate + "/" + StringUtil::getins()->replace_all_distinct(pDetectResultData->strDetectTime, ":", "-") + "/" + image_it; std::string strResultImage = this->baseConfig_.strResultPath + "/" + pDetectResultData->strDetectDate + "/" + StringUtil::getins()->replace_all_distinct(pDetectResultData->strDetectTime, ":", "-") + "/" + image_it; FileUtil::getins()->copyFile(strDebugImage, strResultImage); } outFile << pDetectResultData->strDetectTime << ',' << strContainerNo << ',' << strImage << ',' << std::endl; outFile.close(); } catch (const std::exception &) { LogError << "strCsvPath:" << strCsvPath << " train savecsv fail!"; return false; } return true; } APP_ERROR SaveResultCSVEngine::Process() { int iRet = APP_ERR_OK; while (!isStop_) { //pop端口0 车厢信息 std::shared_ptr<void> pVoidData0 = nullptr; iRet = inputQueMap_[strPort0_]->pop(pVoidData0); if (nullptr == pVoidData0) { usleep(1000); continue; } std::shared_ptr<DetectResultData> pDetectResultData = std::static_pointer_cast<DetectResultData>(pVoidData0); this->saveTrainCsv(pDetectResultData); } return APP_ERR_OK; }
#include "SaveResultCSVEngine.h" using namespace ai_matrix; SaveResultCSVEngine::SaveResultCSVEngine() {} SaveResultCSVEngine::~SaveResultCSVEngine() {} APP_ERROR SaveResultCSVEngine::Init() { strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0"; strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1"; this->baseConfig_ = Config::getins()->getBaseConfig(); LogInfo << "SaveResultCSVEngine Init ok"; return APP_ERR_OK; } APP_ERROR SaveResultCSVEngine::DeInit() { LogInfo << "SaveResultCSVEngine DeInit ok"; return APP_ERR_OK; } /** * 保存车厢的最优结果到CSV中 * inParam : std::shared_ptr<Train> pTrain :列车信息 * outParam: * return : true/false */ bool SaveResultCSVEngine::saveTrainCsv(std::shared_ptr<DetectResultData> pDetectResultData) { //1. 创建保存路径 (固定路径/YYYY-MM-DD/hh-mm-ss/) if (!FileUtil::getins()->createDirPath(this->baseConfig_.strResultPath)) { LogError << "日期:" << pDetectResultData->strDetectDate << " csv save err"; return false; } if (pDetectResultData->strDetectDate.empty()) { return true; } //2. 保存csv std::string strCsvName = pDetectResultData->strDetectDate + ".csv"; std::string strCsvPath = this->baseConfig_.strResultPath + "/" + pDetectResultData->strDetectDate + "/" + strCsvName; // LogInfo << strCsvPath; bool bIsExsit = false; if (access(strCsvPath.c_str(), F_OK) != -1) { bIsExsit = true; } try { // 写文件 std::ofstream outFile; outFile.open(strCsvPath, std::ios::app); if (!bIsExsit) { outFile << "Time" << ',' << "Container" << ',' << "Image" << std::endl; } std::string strContainerNo; for (const auto & containerNo_it : pDetectResultData->vecContainerNO) { strContainerNo += "["; strContainerNo += containerNo_it; strContainerNo += "]"; } std::string strImage; for (const auto & image_it : pDetectResultData->vecImage) { strImage += "["; strImage += image_it; strImage += "]"; std::string strDebugImage = this->baseConfig_.strDebugResultPath + "/" + pDetectResultData->strDetectDate + "/" + StringUtil::getins()->replace_all_distinct(pDetectResultData->strDetectTime, ":", "-") + "/" + image_it; std::string strResultImage = this->baseConfig_.strResultPath + "/" + pDetectResultData->strDetectDate + "/" + StringUtil::getins()->replace_all_distinct(pDetectResultData->strDetectTime, ":", "-") + "/" + image_it; FileUtil::getins()->copyFile(strDebugImage, strResultImage); } outFile << pDetectResultData->strDetectTime << ',' << strContainerNo << ',' << strImage << ',' << std::endl; outFile.close(); } catch (const std::exception &) { LogError << "strCsvPath:" << strCsvPath << " train savecsv fail!"; return false; } return true; } APP_ERROR SaveResultCSVEngine::Process() { int iRet = APP_ERR_OK; while (!isStop_) { //pop端口0 车厢信息 std::shared_ptr<void> pVoidData0 = nullptr; iRet = inputQueMap_[strPort0_]->pop(pVoidData0); if (nullptr == pVoidData0) { usleep(1000); continue; } std::shared_ptr<DetectResultData> pDetectResultData = std::static_pointer_cast<DetectResultData>(pVoidData0); this->saveTrainCsv(pDetectResultData); } return APP_ERR_OK; }

View File

@ -49,7 +49,6 @@ void SelectBestEngine::sendWSServer(DetectResultData &detectResultData)
std::string data;
Json::Value jsonData;
strImageDir = detectResultData.strDetectDate + "/" + ai_matrix::StringUtil::getins()->replace_all_distinct(detectResultData.strDetectTime, ":", "-") + "/";
for (int i = 0; i < detectResultData.vecImage.size(); ++i)
{
strImage += detectResultData.vecImage[i];
@ -58,7 +57,11 @@ void SelectBestEngine::sendWSServer(DetectResultData &detectResultData)
strImage += ",";
}
}
if (!detectResultData.vecImage.empty())
{
LogInfo << " 图片数: " << detectResultData.vecImage.size();
strImageDir = detectResultData.strDetectDate + "/" + ai_matrix::StringUtil::getins()->replace_all_distinct(detectResultData.strDetectTime, ":", "-") + "/";
}
std::string strContainerNo;
for (int i = 0; i < detectResultData.vecContainerNO.size(); ++i)
@ -217,6 +220,7 @@ APP_ERROR SelectBestEngine::Process()
this->strDetectTime_ = pVSelectBestData->strDetectTime;
}
LogInfo << " --- >>> " << this->iEndCount_ << " 数据源: " << pVSelectBestData->iDataSource;
this->iEndCount_++;
if (!(this->iEndCount_ % this->vecDataSourceConfig_.size()))
{
@ -225,7 +229,8 @@ APP_ERROR SelectBestEngine::Process()
}
continue;
}
this->iEndCount_ = 0;
LogInfo << " --- >>> 有数据 数据源: " << pVSelectBestData->iDataSource;
if (g_car_type) this->iEndCount_ = 0;
if (this->strImagePath_.empty())
{

View File

@ -143,10 +143,14 @@ void WSServerEngine::stop()
std::string WSServerEngine::onCMD(CMDConnData &conn, int argc, const char **argv)
{
std::string msg = argv[0];
if (msg == "heartbeat") return "";
std::string strShow = "VCarContainer 收到 " + conn.ip + " 的信息:" + msg;
LogInfo << strShow;
outputQueMap_[strPort0_]->push(std::static_pointer_cast<std::string>(std::make_shared<std::string>(msg)), true);
this->sendAllClient(strShow);
return "";
}
void WSServerEngine::sendAllClient(const std::string &msg)

View File

@ -28,6 +28,7 @@ std::atomic_bool app_flag(true);
std::atomic<int> g_identify_type(0);
std::atomic<int> g_come_direction(0);
std::atomic<int> g_car_type(0);
void SigHandler(int iSigno)
{