在C ++中重置窗口重复时钟的问题

时间:2019-05-28 06:54:59

标签: c++ openpose

在c ++上重复时钟时出现重置窗口的问题

我尝试使用时间chrono重置时间。但是,未经初始化的代码执行时间继续增加。

你好,我是韩国技术学院的学生。使用翻译器。 请原谅我尴尬的讲话。

我正在设计一个程序,该程序使用C ++ OpenPose库来衡量正确的PC用户税。 基本上,我们已经完成了浮动弹出窗口的功能,可以在您的右肩或左肩弯曲时提供反馈。 但是,我想在一秒钟后发出警报,而不是在错误的位置发送反馈。

  1. 应该在不执行仰卧功能时,而是在用户坐在错误位置时测量时间。时间将从执行姿势功能的时间开始计算。如果将同一座位从错误的座位拿起20秒钟,就会发生事件。

  2. 该事件将在20秒后发生,如果未初始化时间,则将其识别为错误的姿势后立即发生。我认为是因为什么时候。如果该库从何处中断,则以0代码结尾。

一旦我解决了与时间有关的功能,我将要问你一个问题,因为我很难完成程序。 谢谢。


while (!userWantsToExit)
        {
 // start frame

std::shared_ptr<std::vector<UserDatum>> datumProcessed;

  if (opWrapper.waitAndPop(datumProcessed))
  {

    userWantsToExit = userOutputClass.display(datumProcessed);
    userOutputClass.printKeypoints(datumProcessed);
....

//string to int

int subShoulder = stoi(rShoulderY) - stoi(lShoulderY);

//clac keypoint values for posedata

if (50 < subShoulder || -50 > subShoulder)
 {

  if (stoi(rShoulderY) < stoi(lShoulderY)) {

    clock_t t_start, t_end;
        int time;
    t_start = clock(); //start clock
    time = t_start / CLOCKS_PER_SEC;
    op::log(time);
    if (time > 20) {
      t_end = clock(); //end clock
      time = (int)(t_end - t_start) / CLOCKS_PER_SEC;
      cv::imshow("SUPOSE", imgLshoulderDown);
      std::string id = "hjw";
      std::string pose = "leftShoulder";
      httpRequestPose(id, pose);        
      }
    }
    else if (stoi(rShoulderY) > stoi(lShoulderY)) {
    clock_t t_start, t_end;
    int time;
    t_start = clock(); //start clock
    time = t_start / CLOCKS_PER_SEC;
    op::log(time);
    if (time > 20) {
      cv::imshow("SUPOSE", imgRshoulderDown);
      std::string id = "hjw";
      std::string pose = "rightShoulder";
      httpRequestPose(id, pose);

    }
    t_end = clock();
    time = (int)(t_end - t_start) / CLOCKS_PER_SEC;
     }
     else {
    clock_t t_start, t_end;
    int time;

    t_end = clock();
    time = (int)(t_end - t_start) / CLOCKS_PER_SEC;
     }
  }

 }


else {}

 //op::log("Processed datum could not be emplaced.", op::Priority::High, __LINE__, __FUNCTION__, __FILE__);

}

*图像

enter image 1

enter image 2

enter image 3

enter image 4

1 个答案:

答案 0 :(得分:0)

老实说,我很难完全理解您的问题。但是,我是一个学生,英语不好(即使现在),我知道在Google翻译的段落中寻求帮助是多么艰难。因此,我会尝试。

据我了解,如果肩膀保持向左倾斜超过20秒(与向右倾斜相同),您想触发警报。正确吗?

如果正确,我认为问题是您将变量 t_start 保留在poseDetect函数中。这意味着每次检测到姿势时, t_start 就是一个新姿势。值 (t_end-t_start) 始终为0。应在该函数外部声明 t_start 并使用标志以检查是否是第一次。我想用下面的伪代码建议

bool isLeftIncline = false;
clock_t startLeft=clock(); //get current time

void poseDetect()
{
    if (50 < subShoulder || -50 > subShoulder){
        if (stoi(rShoulderY) < stoi(lShoulderY)){ // should is inclined to the left 
            if(!isLeftIncline){ // the first time 
                startLeft=clock(); // get the starting time
                isLeftIncline=true;
                //trigger for the first time here
            }else {  // after the first time
                clock_t current=clock();
                int timeDiff=current-startLeft;
                if(timeDiff>20){ //after 20 second with same pose
                    // issue an alert
                }

                //or trigger alert every nearly 20 seconds 
                //if(timeDiff%20<3){
                    //trigger
                //}
            }

        }else {
            // the shoulder no longer inclines to the left
            // reset isLeftIncline time
            isLeftIncline = false;
        }

        // you can apply the same for the right incline here
    }

}