#include "PersonElement.h" #include #include #include #include #include #include #include #include #include #include PersonElement::PersonElement(const SdkRule& sdkRule) : m_sdkRule(sdkRule), // rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), // appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), m_triggerElement(0, sdkRule.nTriggerDelay) { } PersonElement::~PersonElement() { } void PersonElement::threadFunc() { // ClockTimer ct("YoloRpcElement::threadFunc");. triggerMats.clear(); for (auto &obj: m_objs) { if (obj.score < m_sdkRule.fSensitivity) continue; auto t_image = image(obj.rect & cv::Rect(0, 0, image.cols, image.rows)).clone(); triggerMats.push_back(t_image); std::string strImgUrl = "http://"; if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) { fdfsClient->rwLock.rdlock(); std::vector buffer; CvUtil::cvMat2Buffer(t_image, buffer); std::string strImgUrlTmp = ""; fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg"); strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); strImgUrl.clear(); strImgUrl = strImgUrlTmp; // strImgUrl.append("/").append(strImgUrlTmp); fdfsClient->rwLock.unlock(); } //使用的时候将false改为ture { //#todo EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); string str_uuid; uuid_t t_uuid; char str[36]; uuid_generate(t_uuid); uuid_unparse(t_uuid, str); str_uuid = str; // jsonyolo.insert("HardCamId","");//硬盘摄像机id ???拿不到 // jsonyolo.insert("ChannlId","");//通道id ??? 拿不到 // jsonyolo.insert("Time","");//时间 可以获取当前时间 明确时间是获取当前的还是传过来的 ??? 拿不到 // jsonyolo.insert("ImgUrl","");//图像img路径 ??? 拿不到 // jsonyolo.insert("Image","");//快照 ??? 拿不到 // jsonyolo.insert("DataType",obj.type);//检测的类型 // jsonyolo.insert("Score",obj.prob);//检测的得分 Json::Value t_json; t_json["Id"] = str_uuid; //主键 //#todo t_json["picName"] = "wait todo"; t_json["DataType"] = obj.properties["type"]; t_json["Score"] = obj.score; t_json["personPicUrl"] = "wait todo";//人员图片 store t_json["likeDate"] = AppUtil::getTimeSecString();//比较时间 t_json["picAddress"] = m_sdkRule.strAddr.toStdString();//抓拍地址 t_json["picMaxUrl"] = "wait todo";//大图路径 t_json["picLocalUrl"] = "wait todo";//本地路径 t_json["picSmUrl"] = strImgUrl;//人员抓小图 // faceRpcElement.setProperty("frame_number", frame_number); t_json["picDate"] = obj.properties["time"]; t_json["content"] = "wait todo"; t_json["sdkType"] = std::to_string(m_sdkRule.nSdkType); //t_json["viType"] = "2";//只有4种类型 1:personface 2:personbody 3:car 4:bicycle 5:none 未知类型 t_json["personIsHub"] = "4";//1: 报警 2: 可疑 3: 安全 4: 未知 t_json["videoIp"] = getProperty("local_ip");//当前服务器IP地址 t_json["videoNum"] = getProperty("path");//Vide编号 外键 t_json["videoReqNum"] = getProperty("dev_id");//Video设备编号 t_json["ChannlId"] = getProperty("ch_id");//通道id t_json["isDelete"] = "1";//默认1 ,0无效 1有效 t_json["indeviceid"] = appPref.getStringData("fxDevID"); t_json["indevicename"] = appPref.getStringData("fxDevNAME"); DBG(t_json.toStyledString()); bool retface = false; retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid); if (retface) { INFO("facedb success"); } else { ERR("facedb fail"); } } } if (triggerMats.size() > 0)fireConnectors("YoloTrigger"); fireConnectors(); } void PersonElement::setObjsResults(const std::vector& objs) { m_objs = objs; } bool PersonElement::getTrigger() const { return (m_objs.size() > 0 ? true : false); } std::vector PersonElement::getTriggerMats() { return triggerMats; } std::vector PersonElement::getLastScoreRects() const { return m_objs; } void PersonElement::setImage(const cv::Mat &value) { value.copyTo(image); } bool PersonElement::getTriggerState() const { return m_triggerElement.getTriggerState(); }