// // Created by basic on 18-8-24. // #include "JudgmentRetrogradeTool.h" #include #include JudgmentRetrogradeTool::JudgmentRetrogradeTool(): TimerElement(1000), m_triggerElement(0,50) { } JudgmentRetrogradeTool::~JudgmentRetrogradeTool() { } bool JudgmentRetrogradeTool::init(QString area,QString line) { //#todo string ->json QJsonArray arrayAreas = getJsonArrayFromQString(area); if(arrayAreas.isEmpty()) { return false;//do not detect } QVector vec; for(int i = 0;i < arrayAreas.size();++i){ QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toInt()*2 ; int y = obj.value("y").toInt()*2 ; 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").toInt() ; start.y = obj.value("y").toInt() ; QJsonValue jsonValue2 = arrayLine[1]; QJsonObject obj2 = jsonValue2.toObject(); end.x = obj2.value("x").toInt() ; end.y = obj2.value("y").toInt() ; }else{ return false; } setUpBaseline(start,end); //setDownBaseline(start,end); // setUpBaseline(); // setUpDetectionArea(); return true; } void JudgmentRetrogradeTool::setYoloObjects(std::vector value) { mObjs=value; for(auto & item :value){ setPerRect(item.id,item.rect); } } 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="<