/* * @Author: your name * @Date: 2022-04-20 15:49:50 * @LastEditTime: 2025-10-09 18:21:49 * @LastEditors: xiewenji 527774126@qq.com * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: /ZCXD_MonitorPlatform/src/CoreLogicModule/include/CamDeal.h */ #ifndef ImageAllResult_H_ #define ImageAllResult_H_ #include #include #include #include #include #include #include #include #include #include #include "Define_Product.hpp" #include "CheckErrorCodeDefine.hpp" #include "ImgCheckConfig.h" #include "ImageDetConfig.h" #include "DetLog.h" #include "CheckResultJson.h" using namespace std; using namespace cv; // 包含所有的图片检测结果,如 返回的结果,临时结果, 其他检测结果 class ImageAllResult { public: enum DetStep { DetStep_NotDet, DetStep_Deting, DetStep_Complet, }; struct AI_Det_MaskImg { cv::Rect roi; cv::Mat AI_inImg; cv::Mat AI_mask; }; struct Config_Update { bool bUpdate = false; bool wait_DP= false; bool wait_UP= false; }; // AI MaskImg 的相关使用的参数信息。 struct AI_MaskImg_BlobParam { unsigned char *imgBlobHFlagData = NULL; // mask 图片在 Y方向是否有餐点,用以加速 blob 分析。 std::queue> AIMaskImgBLobQueue; // AI 中间结果 队列 std::mutex mtx_AIMaskImgBLobQueue; int ndatalen; AI_MaskImg_BlobParam() { Init(); } void Init() { if (imgBlobHFlagData != NULL) { delete[] imgBlobHFlagData; imgBlobHFlagData = NULL; } ndatalen = 0; } void InitBLobHData(int ndataLen) { if (imgBlobHFlagData != NULL) { delete[] imgBlobHFlagData; imgBlobHFlagData = NULL; } ndatalen = ndataLen; imgBlobHFlagData = new unsigned char[ndataLen]; } ~AI_MaskImg_BlobParam() { Init(); } }; // 图片的AI 检测相关结果。 // 兼容多种AI模型输出结果的。 struct Image_AI_Det_Result { bool bDet; // 是否有检测 int Model_in_Image_width; // AI 检测图片的宽度 int Model_in_Image_height; // AI 检测图片的高度 int Model_out_Image_width; // AI 推理后的图片的宽度 int Model_out_Image_height; // AI 推理后的图片的宽度 cv::Mat AI_MaskImg; // AI 推理的mask图片 std::vector> AI_Qx_MaskList; // AI 推理 输出中间结果信息。 std::shared_ptr blobDetParam; // BLob 检测要用到的一些 参数 。 Image_AI_Det_Result() { Init(); } void Init() { bDet = false; Model_in_Image_width = 0; Model_in_Image_height = 0; Model_out_Image_width = 0; Model_out_Image_height = 0; if (AI_MaskImg.empty()) { AI_MaskImg.release(); } AI_Qx_MaskList.clear(); blobDetParam = std::make_shared(); } void InitBLobHData(int ndataLen) { blobDetParam->InitBLobHData(ndataLen); } ~Image_AI_Det_Result() { Init(); } }; struct WTB_Check_Result_ { cv::Rect roi_src; cv::Rect roi_show; WTB_Check_Result_() { Init(); } void Init() { roi_src = cv::Rect(0, 0, 0, 0); roi_show = cv::Rect(0, 0, 0, 0); } }; private: /* data */ public: ImageAllResult(/* args */); ~ImageAllResult(); void AddLog(std::string str); // 添加图片信息 int AddDetImage(std::shared_ptr p); DetStep getStep(); void setStep(DetStep step); bool IsNotDet(); bool IsChannel(std::string strChannelName); public: // 裁切大小 cv::Rect CropRoi = cv::Rect(0, 0, 0, 0); // 检测的原始图片 cv::Mat detImg; // 专用于 AI 检测的图片,如果 AI的输入尺寸 大于原始图片的尺寸,则 AIDetImg 要进行合理的扩展。 cv::Mat AI_detImg; // AI 推理的mask图片 cv::Mat AIMaskImg; // AI 127Cell推理的mask图片 cv::Mat AI_127CellMaskImg; std::shared_ptr qx_DetAIResult; // BLob 检测要用到的一些 参数 。 std::shared_ptr cell127_DetAIResult; // 127 cell 检测要用到的一些 参数 。 // 结果图片 cv::Mat resultImg; // 屏蔽图片 = 搜索边界的 屏蔽区域 +字符的屏蔽区 + 界面绘制的屏蔽区域 cv::Mat shieldImg; // 专用于 AI 检测的屏蔽图片,如果 AI的输入尺寸 大于原始图片的尺寸,则 AI_shieldImg 要进行合理的扩展。 cv::Mat AI_shieldImg; // 异显mask图片 cv::Mat YX_MaskImg; // 缺失polmask图片 cv::Mat LcakPol_MaskImg; float fscale_detToresult_x = 0; float fscale_detToresult_y = 0; int NG_num = 0; int YS_num = 0; int Ok_num = 0; int NoJudge_num = 0; int AI_Det_Img_Width = 0; // AI 检测图片的宽度 int AI_Det_Img_Height = 0; // AI 检测图片的宽度 bool bChangeSize = false; // 是否改变尺寸 bool bWhiteOrBlackImg = false; // 是否是白底黑字图片 bool bOnlyBlob = false; Config_Update config_update; public: DetStep m_step = DetStep_NotDet; std::string strBaseInfo = ""; std::string strChannel = ""; std::vector LogList; std::shared_ptr detlog; std::shared_ptr result; // 返回检测结果 std::shared_ptr pDetResult; // 检测结果 后续主要对pDetResult 继续分析 std::shared_ptr productBaseResult; // 产品相关的基本结果信息 std::shared_ptr cameraBaseResult; // 相机相关的基本结果信息 std::shared_ptr pWTB_Check_Result; std::vector> AI_Qx_MaskList; std::mutex mtx_Det; // 互斥量 private: PRINT_LOG_ m_PrintLog; CheckResultJson m_CheckResultJson; }; #endif