// // Created by basic on 18-8-24. // #include "JudgmentRetrogradeTool.h" #include #include #include #include #include #include JudgmentRetrogradeTool::JudgmentRetrogradeTool(const SdkRule &rule) : m_triggerElement(0, 0), m_sdkRule(rule), pManagerEsDB(nullptr), m_bSetWH(false), pointArray(nullptr), npts(0), m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp") { pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); } JudgmentRetrogradeTool::~JudgmentRetrogradeTool() { if (pManagerEsDB) { delete pManagerEsDB; pManagerEsDB = nullptr; } if(pointArray) { delete pointArray; pointArray=nullptr; } } bool JudgmentRetrogradeTool::init(QString area, QString line) { m_area=area; m_line=line; } bool JudgmentRetrogradeTool::setMask(QString area, QString line) { //#todo string ->json QJsonArray arrayAreas = getJsonArrayFromQString(area); if (arrayAreas.isEmpty()) { return false; } int size=arrayAreas.size(); QVector vec; float sizeW=(float)appPref.getIntData(m_sdkRule.strCamId.toStdString()+"width")/480; float sizeH=(float)appPref.getIntData(m_sdkRule.strCamId.toStdString()+"height")/270; for (int i = 0; i < arrayAreas.size(); ++i) { pointArray=new cv::Point2i[size]; QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toDouble() *sizeW; int y = obj.value("y").toDouble() *sizeH; vec.push_back(QPoint(x, y)); DBG("width="< value) { mObjs = value; } void JudgmentRetrogradeTool::setPerRect(const long &id, cv::Rect rect) { setPerPoint(id, getCenterPoint(rect)); } void JudgmentRetrogradeTool::setPerPoint(const long &id, cv::Point2f result) { auto &listCache = m_mapPerPoint[id]; cv::Point2f vp; vp.x = result.x; vp.y = result.y; listCache.push_back(vp); if (listCache.size() >= 2) { VectorPoint tt; tt.start_Point = listCache.front(); tt.end_Point = listCache.back(); auto &temp = m_mapPerDirection[id]; //#TODO tt.end_Point in UP Area QPoint center(tt.end_Point.x, tt.end_Point.y); if (m_polygon.containsPoint(center, Qt::OddEvenFill)) { temp.push_back(JRTOOL::low_filter(temp.back(), getTheta(m_UpBaseLine, tt))); //DBG("ID="<fastFds != nullptr) { fdfsClient->rwLock.rdlock(); std::vector buffer; CvUtil::cvMat2Buffer(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(); } return strImgUrl; } bool JudgmentRetrogradeTool::saveInfoToEs(const std::string &imgUrl, const ScoredRect &obj) { string str_uuid; uuid_t t_uuid; char str[36]; uuid_generate(t_uuid); uuid_unparse(t_uuid, str); str_uuid = str; Json::Value t_json; t_json["Id"] = str_uuid; //主键 //#todo t_json["videoReqNum"] = m_sdkRule.strCamId.toStdString(); t_json["sdkType"] = to_string(m_sdkRule.nSdkType); // t_json["Gender"] = obj.score; t_json["picName"] = "";// 抓拍照片名称 t_json["content"] = "";// 内容描述 t_json["personPicUrl"] = "";// 人员 地库图片 t_json["ChannlId"] = getProperty("ch_id"); // 通道id t_json["likeDate"] = AppUtil::getTimeSecString(); // 比对时间 t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 抓拍地址 DBG("picAddress="<recordVideo(imgKey); } catch (std::exception &e) { ERR("Record Video Err: "<insertData("personaction", "perVideoAction", t_json.toStyledString(), str_uuid); if (retface) { INFO("perVideoAction db success"); } else { ERR("personaction db fail"); } } bool JudgmentRetrogradeTool::isInWeek(const std::vector &ruleWeek) { int nWeek = QDate::currentDate().dayOfWeek(); for (int i = 0; i < ruleWeek.size(); ++i) { if (ruleWeek[i].m_nType == nWeek) { QString strCurrent = QDateTime::currentDateTime().toString("hh:mm"); if (strCurrent >= ruleWeek[i].m_strBegin && strCurrent <= ruleWeek[i].m_strEnd) { return true; } } } return false; } QJsonArray JudgmentRetrogradeTool::getJsonArrayFromQString(const QString strJson) { QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit()); if (jsonDocument.isNull()) { qDebug() << "please check the string" << strJson.toLocal8Bit(); return QJsonArray(); } QJsonArray jsonArray = jsonDocument.array(); return jsonArray; } void JudgmentRetrogradeTool::setUpDetectionArea() { } void JudgmentRetrogradeTool::setDownDetectionArea() { } bool JudgmentRetrogradeTool::getTriggerState() const { return m_triggerElement.getTriggerState(); } void JudgmentRetrogradeTool::setImage(const cv::Mat &value) { value.copyTo(image); if(!m_bSetWH) { setMask(m_area,m_line); m_bSetWH=true; } }