// // 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) { pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); } JudgmentRetrogradeTool::~JudgmentRetrogradeTool() { if (pManagerEsDB) { delete pManagerEsDB; pManagerEsDB = nullptr; } } bool JudgmentRetrogradeTool::init(QString area, QString line) { //#todo string ->json QJsonArray arrayAreas = getJsonArrayFromQString(area); if (arrayAreas.isEmpty()) { return false; } QVector vec; for (int i = 0; i < arrayAreas.size(); ++i) { QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toDouble() * 4; int y = obj.value("y").toDouble() * 4; vec.push_back(QPoint(x, y)); } m_polygon = std::move(QPolygon(vec)); // QPoint left[]={QPoint(100,6),QPoint(100,1200),QPoint(850,1200),QPoint(850,6)} ; // QPoint right[]={QPoint(850,6),QPoint(1800,6),QPoint(1800,1200),QPoint(850,1200)} ; // for(auto &item:left) // { // m_UpPolygon<<(item); // } // for(auto &item:right) // { // m_DownPolygon<<(item); // } cv::Point start, end; QJsonArray arrayLine = getJsonArrayFromQString(line); if (arrayLine.size() == 2) { QJsonValue jsonValue = arrayLine[0]; QJsonObject obj = jsonValue.toObject(); start.x = obj.value("x").toDouble(); start.y = obj.value("y").toDouble(); QJsonValue jsonValue2 = arrayLine[1]; QJsonObject obj2 = jsonValue2.toObject(); end.x = obj2.value("x").toDouble(); end.y = obj2.value("y").toDouble(); } else { return false; } setUpBaseline(start, end); //setDownBaseline(start,end); // setUpBaseline(); // setUpDetectionArea(); return true; } void JudgmentRetrogradeTool::setYoloObjects(std::vector 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"] = "wait todo";// 抓拍照片名称 t_json["content"] = "wait todo";// 内容描述 t_json["personPicUrl"] = "";// 人员 地库图片 t_json["ChannlId"] = getProperty("ch_id"); // 通道id t_json["likeDate"] = AppUtil::getTimeSecString(); // 比对时间 t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 抓拍地址 DBG("picAddress="<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); }