From d4f34483e55616b2a8a6ed75ea022d28a4537592 Mon Sep 17 00:00:00 2001 From: 11566hyc <123456789> Date: Sun, 22 Jun 2025 11:00:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8E=9F=E5=A7=8B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=A7=A3=E6=9E=90=EF=BC=8C=E8=A1=A5=E5=85=85=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=EF=BC=8C=E5=8E=BB=E9=99=A4=E9=87=8D?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 10 +++---- NeoTracker/src/Arith_Detector.h | 2 +- NeoTracker/src/Common/Arith_SysStruct.h | 2 +- NeoTracker/src/Log/Logger.cpp | 12 ++++---- NeoTracker/src/NeoArithStandardDll.cpp | 5 ++-- QGuideArithStudio/src/ArithInterface.cpp | 6 ++-- QGuideArithStudio/src/Project/S3315.cpp | 37 ++++++++++++++---------- QGuideArithStudio/src/Project/S3315.h | 18 +++++++++++- QGuideArithStudio/src/RawFileStream.cpp | 25 +++++++++++----- 9 files changed, 76 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4287a4b..98a157c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED True) set(BUILD_ARITH_STUDIO TRUE) # 设置是否构建算法平台 -set(BUILD_AI_ONNX_DETECT TRUE) # 设置是否基于ONNX构建AI识别模块 +set(BUILD_AI_ONNX_DETECT FALSE) # 设置是否基于ONNX构建AI识别模块 set(BUILD_AI_CUDA_DETECT FALSE) # 设置是否基于CUDA构建AI识别模块 set(BUILD_AI_TRACK FALSE) # 设置是否构建AI跟踪模块 @@ -61,8 +61,8 @@ ENABLE_TESTING() # opencv + TensorRT IF(WIN32) - set(OpenCV_DIR "D:/Opencv_v/4.8.1/build/install/x64/vc17/lib") - set(TRT_DIR "D:/TensorRT/TensorRT7") + set(OpenCV_DIR "D:/opencv/build/x64/vc15/lib") + #set(TRT_DIR "D:/TensorRT/TensorRT7") ELSE(WIN32) set(OpenCV_DIR "/home/wcw/opencv-3.4.16/install/share/OpenCV") ENDIF(WIN32) @@ -145,7 +145,7 @@ add_subdirectory(${ArithDIR}) IF(BUILD_ARITH_STUDIO) # ########################## Qt环境 ############################## IF(WIN32) - set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019_64") + set(CMAKE_PREFIX_PATH "D:/project/Qt/Qt/5.15.2/msvc2015_64") ELSE(WIN32) set(CMAKE_PREFIX_PATH "/home/wang/Qt/5.15.2/gcc_64") ENDIF(WIN32) @@ -192,7 +192,7 @@ IF(BUILD_ARITH_STUDIO) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/Bin) # 关闭控制台 - set_target_properties(QGuideArith PROPERTIES WIN32_EXECUTABLE TRUE) + set_target_properties(QGuideArith PROPERTIES WIN32_EXECUTABLE FALSE) # 链接模块 target_link_libraries(QGuideArith PRIVATE diff --git a/NeoTracker/src/Arith_Detector.h b/NeoTracker/src/Arith_Detector.h index cc44574..723e330 100644 --- a/NeoTracker/src/Arith_Detector.h +++ b/NeoTracker/src/Arith_Detector.h @@ -16,7 +16,7 @@ #include "Arith_ThreadPool.h" // 引入线程池头文件 // 定义检测器最大检测个数 -#define DT_TARGET_MAX_NUM 100 +//#define DT_TARGET_MAX_NUM 100 typedef struct diff --git a/NeoTracker/src/Common/Arith_SysStruct.h b/NeoTracker/src/Common/Arith_SysStruct.h index dee6c6c..1d8aa2a 100644 --- a/NeoTracker/src/Common/Arith_SysStruct.h +++ b/NeoTracker/src/Common/Arith_SysStruct.h @@ -68,7 +68,7 @@ #define GLB_UNLOCK_FOVOUT 5 //出视场解锁 -#define DT_TARGET_MAX_NUM 100 // 定义检测器最大检测个数 +//#define DT_TARGET_MAX_NUM 100 // 定义检测器最大检测个数 // 目标类型标记 #define TargetClass_Plane 98 diff --git a/NeoTracker/src/Log/Logger.cpp b/NeoTracker/src/Log/Logger.cpp index 7850fe9..2cbf134 100644 --- a/NeoTracker/src/Log/Logger.cpp +++ b/NeoTracker/src/Log/Logger.cpp @@ -140,32 +140,32 @@ void XLogger::setLevelByFileState() char resPath[256] = { 0 }; std::string path = GetDynamicLibraryPath(); fileState = true; - if (ACCESS(path.append("/LogT").c_str(), 0) == 0) + if (ACCESS((path + "/LogT").c_str(), 0) == 0) { setLevel(spdlog::level::trace); return; } - if (ACCESS(path.append("/LogD").c_str(), 0) == 0) + if (ACCESS((path + "/LogD").c_str(), 0) == 0) { setLevel(spdlog::level::debug); return; } - if (ACCESS(path.append("/LogI").c_str(), 0) == 0) + if (ACCESS((path + "/LogI").c_str(), 0) == 0) { setLevel(spdlog::level::info); return; } - if (ACCESS(path.append("/LogW").c_str(), 0) == 0) + if (ACCESS((path + "/LogW").c_str(), 0) == 0) { setLevel(spdlog::level::warn); return; } - if (ACCESS(path.append("/LogE").c_str(), 0) == 0) + if (ACCESS((path + "/LogE").c_str(), 0) == 0) { setLevel(spdlog::level::err); return; } - if (ACCESS(path.append("/LogC").c_str(), 0) == 0) + if (ACCESS((path + "/LogC").c_str(), 0) == 0) { setLevel(spdlog::level::critical); return; diff --git a/NeoTracker/src/NeoArithStandardDll.cpp b/NeoTracker/src/NeoArithStandardDll.cpp index b5212a9..15adcce 100644 --- a/NeoTracker/src/NeoArithStandardDll.cpp +++ b/NeoTracker/src/NeoArithStandardDll.cpp @@ -76,8 +76,9 @@ void ARIDLL_EOArithInitWithMode(ArithHandle hArith, int nWidth, int nHeight, GD_ int ARIDLL_RunController(ArithHandle hArithSrc, GD_VIDEO_FRAME_S img, ARIDLL_INPUTPARA stInputPara, ARIDLL_OUTPUT* pstOutput) { //算法输入信息整理【调试】 - LOG_DEBUG_INPUT("HI_Input:unFrmId:{}, nWidth:{},nHeight:{}, unFreq:{}, fServoAz:{}, fServoPt:{}, fAglReso:{}, nFocus:{}, fPixelSize:{}, unVideoType:{}", - stInputPara.unFrmId, img.u32Width, img.u32Height, stInputPara.unFreq, stInputPara.stServoInfo.fServoAz, stInputPara.stServoInfo.fServoPt, stInputPara.stCameraInfo.fAglReso, + LOG_DEBUG_INPUT("HI_Input:unFrmId:{}, nWidth:{},nHeight:{}, unFreq:{}, fServoAz:{}, fServoPt:{},st.Att.R:{},P:{},Y:{}, fAglReso:{},f, nFocus:{}, fPixelSize:{}, unVideoType:{}", + stInputPara.unFrmId, img.u32Width, img.u32Height, stInputPara.unFreq, stInputPara.stServoInfo.fServoAz, stInputPara.stServoInfo.fServoPt, stInputPara.stAirCraftInfo.stAtt.fRoll, + stInputPara.stAirCraftInfo.stAtt.fPitch,stInputPara.stAirCraftInfo.stAtt.fYaw, stInputPara.stCameraInfo.fAglReso, stInputPara.stCameraInfo.nFocus, stInputPara.stCameraInfo.fPixelSize, stInputPara.stCameraInfo.unVideoType); // 获取算法指针 Arith_EOController* pArith = (Arith_EOController*)hArithSrc; diff --git a/QGuideArithStudio/src/ArithInterface.cpp b/QGuideArithStudio/src/ArithInterface.cpp index cc3f2ef..291704f 100644 --- a/QGuideArithStudio/src/ArithInterface.cpp +++ b/QGuideArithStudio/src/ArithInterface.cpp @@ -433,10 +433,12 @@ void RunNeoTracker(std::vector streamVec) { ARIDLL_INPUTPARA stInputPara = { 0 }; BYTE* m_pParamData = m_stream->GetParamDataBuffer(); + BYTE* m_pResultData = m_stream->GetResultDataBuffer(); //复用结果行解析红外参数 memset(&m_stInputPara, 0, sizeof(ARIDLL_INPUTPARA)); memset(&m_stOutput, 0, sizeof(ARIDLL_OUTPUT)); - S3315GetImagePara(m_pParamData, &stInputPara); - //memcpy(&m_stInputPara, &stInputPara, sizeof(ARIDLL_INPUTPARA)); + S3315GetImagePara(m_pParamData, m_pResultData, &stInputPara); + memcpy(&m_stInputPara, &stInputPara, sizeof(ARIDLL_INPUTPARA)); + m_stInputPara.unFrmId = frameID; //memcpy(&m_stInputPara, m_pParamData, sizeof(ARIDLL_INPUTPARA));//读取可见光录像中算法输入 } diff --git a/QGuideArithStudio/src/Project/S3315.cpp b/QGuideArithStudio/src/Project/S3315.cpp index 34ebb6d..69a37c0 100644 --- a/QGuideArithStudio/src/Project/S3315.cpp +++ b/QGuideArithStudio/src/Project/S3315.cpp @@ -19,23 +19,28 @@ float calc_fov_by_mil(float mil, int mil_type) return (mil * 360.0f / mil_type); } -void S3315GetImagePara(unsigned char* pParamDataBuffer, ARIDLL_INPUTPARA* ImagePara) +void S3315GetImagePara(unsigned char* pParamDataBuffer, unsigned char* pResultDataBuffer, ARIDLL_INPUTPARA* ImagePara) { - ST_3315_152_NO110 pParamNO110DataBuffer = { 0 }; - ST_3315_152_NO149 pParamNO149DataBuffer = { 0 }; - //unsigned char* IR_para = { 0 }; - //memcpy(IR_para, pParamDataBuffer, 1280); - //memcpy(&pParamNO110DataBuffer, pParamDataBuffer + 1280, 640); - // memcpy(&pParamNO149DataBuffer, pParamDataBuffer + 1920, 640); - //ImagePara->stServoInfo.fServoAz = calc_fov_by_mil(pParamNO149DataBuffer.B1B0,6000); - //ImagePara->stServoInfo.fServoPt = calc_fov_by_mil(pParamNO149DataBuffer.B3B2,6000); - //std::cout << std::hex << std::setw(8) << "pParamDataBuffer" << std::setfill('0') << reinterpret_cast(pParamDataBuffer) << ": " ; - //for (int i = 0; i < 21; ++i) - //{ - // std::cout << std::hex << std::setw(4) << std::setfill('0') << static_cast(pParamDataBuffer[i]) << " " ; - //} - //std::cout << std::endl; + ST_3315_152_NO110* pParamNO110DataBuffer = (ST_3315_152_NO110*)calloc(640, sizeof(int)); + ST_3315_152_NO149* pParamNO149DataBuffer = (ST_3315_152_NO149*)calloc(640, sizeof(int)); + ST_3315_152_NO65* pParamNO65DataBuffer = (ST_3315_152_NO65*)calloc(640, sizeof(int)); + unsigned char* IR_para = { 0 }; + //memcpy(IR_para, pParamDataBuffer, 1280); + memcpy(pParamNO110DataBuffer, pParamDataBuffer, 640); + memcpy(pParamNO149DataBuffer, pParamDataBuffer+ 640, 640); + memcpy(pParamNO65DataBuffer, pParamDataBuffer + 1280, 640); + ImagePara->stServoInfo.fServoAz = calc_fov_by_mil(pParamNO65DataBuffer->B1B0 , 6000) * 6000.0f / 65536.0f; + ImagePara->stServoInfo.fServoPt = calc_fov_by_mil(pParamNO65DataBuffer->B3B2, 6000) * 6000.0f / 65536.0f; + ImagePara->stCameraInfo.fPixelSize = 25; + ImagePara->stCameraInfo.nFocus = 302; + ImagePara->unFreq = 50; + /*std::cout << std::hex << std::setw(8) << "pParamDataBuffer" << std::setfill('0') << reinterpret_cast(pParamDataBuffer) << ": "; + for (int i = 0; i < 640; ++i) + { + std::cout << std::hex << std::setw(4) << std::setfill('0') << static_cast(pParamDataBuffer[1280+i]) << " " ; + } + std::cout << std::endl;*/ //int w = uint8_t(pParamDataBuffer[20]); - //ImagePara->stServoInfo.fServoAz = pParamDataBuffer[258]; + // ImagePara->stServoInfo.fServoAz = pParamDataBuffer[258]; //ImagePara->stServoInfo.fServoPt = pParamDataBuffer[259]; } \ No newline at end of file diff --git a/QGuideArithStudio/src/Project/S3315.h b/QGuideArithStudio/src/Project/S3315.h index b7f3b7a..e39356d 100644 --- a/QGuideArithStudio/src/Project/S3315.h +++ b/QGuideArithStudio/src/Project/S3315.h @@ -17,6 +17,7 @@ typedef unsigned short USHORT; * 时序: 500HZ发送. */ typedef struct _3315_152_NO110 { + char Head[3]; /* 帧头 */ unsigned short B1B0; /* 方位角 */ unsigned short B3B2; /* 纵摇角 */ unsigned short B5B4; /* 横摇角 */ @@ -34,8 +35,23 @@ typedef struct _3315_152_NO110 { * 时序: 500HZ发送. */ typedef struct _3315_152_NO149 { + char Head[3]; /* 帧头 */ unsigned short B1B0; /* 方位角 */ unsigned short B3B2; /* 纵摇角 */ }ST_3315_152_NO149; -extern void S3315GetImagePara(unsigned char* pParamDataBuffer, ARIDLL_INPUTPARA* ImagePara); \ No newline at end of file + + +/* + * 转塔位置信息(149号) + * 链路: 通过PCIE ch2通道,转can. + * 时序: 500HZ发送. + */ +typedef struct _3315_152_NO65 { + char Head[3]; /* 帧头 */ + unsigned short B1B0; /* 方位角(车体系) */ + unsigned short B3B2; /* 纵摇角 (车体系)*/ + unsigned short B5B4; /* 方位角(稳定系) */ + unsigned short B7B6; /* 纵摇角 (稳定系)*/ +}ST_3315_152_NO65; +extern void S3315GetImagePara(unsigned char* pParamDataBuffer, unsigned char* pResultDataBuffer, ARIDLL_INPUTPARA* ImagePara); \ No newline at end of file diff --git a/QGuideArithStudio/src/RawFileStream.cpp b/QGuideArithStudio/src/RawFileStream.cpp index 8fef2d7..a357e25 100644 --- a/QGuideArithStudio/src/RawFileStream.cpp +++ b/QGuideArithStudio/src/RawFileStream.cpp @@ -98,10 +98,10 @@ bool RawFileStream::Open(const string & strStreamName) } m_lFrameDataSize = m_lParamDataSize + m_lImageDataSize + m_lArithReslutDataSize; - //if (m_ptPixelType == PT_Y16DATA && PROJECT::S3315_IR == m_ProjectName) - //{ - // m_lFrameDataSize = m_lParamDataSize + m_lImageDataSize + m_lArithReslutDataSize + 640 * 510; - //} + if (m_ptPixelType == PT_Y16DATA && PROJECT::S3315_IR == m_ProjectName) + { + m_lFrameDataSize = m_lParamDataSize + m_lImageDataSize + m_lArithReslutDataSize + 640 * 513; + } m_lFrameCount = long(m_binFile.tellg() / m_lFrameDataSize); @@ -247,10 +247,21 @@ bool RawFileStream::ReadFrame(BYTE* pFrameData, BYTE* pImageData, BYTE* pParamDa } if (m_ptPixelType == PT_Y16DATA && PROJECT::S3315_IR == m_ProjectName) { - //S3315存储数据格式为640*512*2--Y16 + 1280 -- 参数行 + 640 * 510 -- Y8 ? - memcpy(pParamData, pFrameData + m_lArithReslutDataSize + m_lImageDataSize, m_lParamDataSize); + //S3315存储数据格式为640*512*2--Y16 + 1280 -- 参数行 + 640 * 512 -- Y8 + 640 * 1 ? + /* + * 640 * 1024 0xA0000 Y16 + * 640 * 2 0xA0500 Y16 参数行 + * 640 * 512 0xF0500 Y8 + * 640 * 1 0xF0780 Y8 参数行(空) + * 640 * 1 0xF0A00 No110 + * 640 * 1 0xF0C80 No149 + * 640 * 1 0xF0F00 No65 + * 640 * 1 0xF1180 No56 + * (640 * 4 参数行) + */ + memcpy(pParamData, pFrameData + m_lArithReslutDataSize + m_lImageDataSize + 640 * 513, m_lParamDataSize); memcpy(pImageData, pFrameData + m_lArithReslutDataSize, m_lImageDataSize); - //memcpy(pResultData, pFrameData + m_lArithReslutDataSize + m_lImageDataSize, m_lParamDataSize); + memcpy(pResultData, pFrameData + m_lImageDataSize , m_lArithReslutDataSize); } unsigned short* pSrc = (unsigned short*)pImageData;