| | |
| | | // rpcClient("faceServer","",10002,"tcp"), |
| | | sharedMemory(nullptr), |
| | | trackingTrigger(nullptr), |
| | | m_sdkRule(rule) |
| | | m_sdkRule(rule), |
| | | m_bIsMask(true), |
| | | m_bSetWH(false) |
| | | { |
| | | sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); |
| | | if (!sharedMemory->create(4608 * 2592 * 4)) { |
| | |
| | | t_score = t_score / 100; |
| | | |
| | | trackingTrigger = new TrackingTrigger(t_score); |
| | | setMask(m_sdkRule.strAreas.toStdString()); |
| | | // setMask(m_sdkRule.strAreas.toStdString()); |
| | | } |
| | | |
| | | FaceRpcElement::~FaceRpcElement() { |
| | |
| | | } |
| | | |
| | | void FaceRpcElement::threadFunc() { |
| | | INFO("MYH Run Here"); |
| | | // ClockTimer ct("FaceRpcElement::threadFunc"); |
| | | // { |
| | | // |
| | |
| | | // cv::imwrite(string1, image); |
| | | // } |
| | | if(!isInWeek(m_sdkRule.weekRuleVec)) |
| | | { |
| | | ERR("In Week"); |
| | | return; |
| | | } |
| | | triggerMats.clear(); |
| | | triggerFaces.clear(); |
| | | triggerScoredRects.clear(); |
| | |
| | | int h = face.rcFace.bottom - face.rcFace.top; |
| | | QRect re(x,y,w,h); |
| | | QPoint center = re.center(); |
| | | if(!mPolygon.containsPoint(center,Qt::OddEvenFill)) |
| | | if(m_bIsMask && !mPolygon.containsPoint(center,Qt::OddEvenFill)) |
| | | { |
| | | ERR("m_bIsMask :"<<m_bIsMask) |
| | | return; |
| | | } |
| | | scoredRect.rect = {x, y, w, h}; |
| | |
| | | trackingTrigger->getLastRect().properties["smile"] = to_string(property.smile_level); |
| | | trackingTrigger->getLastRect().properties["race"] = to_string(property.race); |
| | | trackingTrigger->getLastRect().properties["time"] = getProperty("time"); |
| | | |
| | | trackingTrigger->getLastRect().properties["detectscore"] = scoredRect.score; |
| | | trackingTrigger->getLastRect().properties["imgKey"] = getProperty("imgKey"); |
| | | INFO("FaceRpcElement SaveToES: "<<getProperty("imgKey")); |
| | | triggerFaces.push_back(face); |
| | | triggerMats.push_back(image( |
| | | CvUtil::zoomRectEqual(scoredRect.rect, 1.5, 1.5) & cv::Rect(0, 0, image.cols, image.rows)).clone()); |
| | | triggerScoredRects.push_back(trackingTrigger->getLastRect()); |
| | | } else { |
| | | INFO("No Face Find: "<<getProperty("imgKey")); |
| | | // DBG("trackingTrigger->triggerOnce(scoredRect) is false "); |
| | | } |
| | | } |
| | | if(faces.empty()) |
| | | { |
| | | INFO("No Face Find: "<<getProperty("imgKey")); |
| | | } |
| | | trackingTrigger->triggerLine(); |
| | | // DBG("faces.size " << faces.size()); |
| | |
| | | image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data()); |
| | | } |
| | | value.copyTo(image); |
| | | if(!m_bSetWH) |
| | | { |
| | | setMask(m_sdkRule.strAreas.toStdString()); |
| | | m_bSetWH=true; |
| | | } |
| | | } |
| | | |
| | | bool FaceRpcElement::getTriggerState() const { |
| | |
| | | QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask)); |
| | | if(arrayAreas.isEmpty()) |
| | | { |
| | | m_bIsMask=false; |
| | | return;//do not detect |
| | | } |
| | | 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) |
| | | { |
| | | QJsonValue jsonValue = arrayAreas[i]; |
| | | QJsonObject obj = jsonValue.toObject(); |
| | | int x = obj.value("x").toDouble()*4; |
| | | int y = obj.value("y").toDouble()*4; |
| | | int x = obj.value("x").toDouble() *sizeW ; |
| | | int y = obj.value("y").toDouble() *sizeH; |
| | | mPolygon<<(QPoint(x,y)); |
| | | DBG("width="<<sizeW); |
| | | DBG("height="<<sizeH); |
| | | |
| | | } |
| | | } |