眼睑闭合超过 3 秒时发出警报

Make an alert if eyelid closed more than 3 seconds

我想在用户的眼皮闭合超过 3 秒后发出警报,但我的代码有问题。如何让布尔值 right_eye 和布尔值 left_eye 在关闭 3 秒后触发警报?这是我写的一些代码。

public void eyeTracking(FirebaseVisionFace face){
    boolean right_eye = face.getRightEyeOpenProbability() < 0.5;
    boolean left_eye =  face.getLeftEyeOpenProbability() < 0.5;
    Handler mHandler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {

        }
    };

    if (right_eye && left_eye) {
        begin = System.currentTimeMillis();
        Log.d(TAG, "eyeTracking: " + sleep);
        mHandler.postDelayed(runnable, 3000);
        sleep = true;
    }
    else {
        sleep = false;
    }

    if(sleep){
        stop = System.currentTimeMillis();
        Log.d(TAG, "eyeTracking: " + begin + "stop" + stop);
        if(begin - stop >= 3000) {
            alertBox();
        }
    }
}

当我尝试记录我的开始和停止变量时 returns 相同的值 我做错了吗?

您不应该在每次检测到闭眼时都设置 begin 变量。在您的项目中尝试以下代码。希望这对您有所帮助:

  long begin=0;
  public void eyeTracking(FirebaseVisionFace face){
    boolean right_eye = face.getRightEyeOpenProbability() < 0.5;
    boolean left_eye =  face.getLeftEyeOpenProbability() < 0.5;

    if (right_eye && left_eye) {
        //if your begin variable is reset
        if(begin==0){
        begin = System.currentTimeMillis();
        }
        Log.d(TAG, "eyeTracking: " + sleep);
        sleep = true;
    }
    else {
        //reset your begin variable
        begin=0;
        sleep = false;
    }

    Log.d(TAG, "Eyes closed time: "+System.currentTimeMillis()-begin);
    if(sleep && System.currentTimeMillis()-begin>3000){
        Log.d(TAG, "Show alert");
            alertBox();
    }
}