#ifndef PERIMETERELEMENT #define PERIMETERELEMENT #include #include #include #include #include #include "TrackingTrigger.h" #include #include #include #include #include "DBStruct.h" #include #include "IntAreaCalcUtil.h" #include "SaveVideoRpc.h" class PerimeterElement : public basic::PipeElement { public: PerimeterElement():m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp"){} PerimeterElement(const SdkRule& rule); public: ~PerimeterElement(); //是否有矩形 bool hasRects(); //设置ROI区域 void setImage(const cv::Mat &value); void setYoloObjects(std::vector value); //将检测结果放到此单元中 //void setVptResults(const vector &value); void setObjsResults(const ::YoloDetect::ObjInfos &value); //设置置信度 void setSensitivity(float value); //获取矩形框 std::vector getRects() const; //获取YOLO检测的结果 std::vector getLastScoreRects() const; int getRealNum() const; bool getTriggerState() const; void setFdfs(FastFdsWithLock *p_fdfsClient) { fdfsClient = p_fdfsClient; } void setImage(const cv::Mat &value) const; private: //PerimeterElement(const SdkRule& rule); virtual void threadInitial()override; virtual void threadFunc()override; QJsonArray getJsonArrayFromQString(const QString& strJson); std::string uploadImgToFdfs(cv::Mat& image); bool saveInfoToEs(const std::string& imgUrl,const std::string& time,const std::string& imgKey); void setMask(std::string mask); bool isInWeek(const std::vector& ruleWeek); cv::Rect CutMask(); private: cv::Mat image; //cv::Mat mask; //vector vptResults; ::YoloDetect::ObjInfos m_objs; QPolygon mPolygon; TrackingTrigger *trackingTrigger; ::YoloDetect::stringData cocoData; int mRealNum; std::vector mObjs; TriggerElement m_triggerElement; FastFdsWithLock* fdfsClient; SdkRule m_sdkRule; EsDBTool* pManagerEsDB; int npts; std::vector m_recVec; bool m_bIsMask; std::vector poly1; bool m_bSetWH; cv::Point2i* pointArray; SaveVideoRpcClient_t m_rpcClient; }; #endif // PAELEMENT_H