package com.basic.security.fragment.helper; import android.os.SystemClock; import android.view.View; import android.widget.RelativeLayout; import com.basic.security.base.BaseApplication; import com.basic.security.base.BaseFragment; import com.basic.security.utils.Constants; import com.basic.security.utils.DetectedResult; import com.basic.security.utils.FacePosition; import com.basic.security.utils.Preview; import com.basic.security.utils.ThreadUtil; import com.basic.security.widget.RecognizeFaceInfoView; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.List; @EFragment public class CfDetectFace extends BaseFragment { public static DetectedResult lastDetectedResult = null; static boolean drawFaceRectFinished = true; @ViewById public Preview rgb_camera, gray_camera; @ViewById public RelativeLayout faceOuterBorderViewParent; public List recognizeFaceInfoViewList = new ArrayList<>(); public long lastTimeDetectedFaceInCamera; long prevDrawTime = System.currentTimeMillis(); public void clearAllFaceRectWhenTimeout() { BaseApplication.getApplication().executorService.execute(() -> { while (true) { try { SystemClock.sleep(400); ThreadUtil.printThreadInfo("clearAllFaceRectWhenTimeout"); if (System.currentTimeMillis() - lastTimeDetectedFaceInCamera > (Constants.USE_GRAY_CAMERA ? 500 : 400)) { hideAllFaceRects(); } } catch (Exception e) { e.printStackTrace(); } } }); } @UiThread public void hideAllFaceRects() { for (RecognizeFaceInfoView recognizeFaceInfoView : recognizeFaceInfoViewList) { recognizeFaceInfoView.setVisibility(View.INVISIBLE); } } @UiThread public void drawFaceRect(DetectedResult detectedResult) { try { lastDetectedResult = detectedResult; drawFaceRectFinished = false; prevDrawTime = System.currentTimeMillis(); if (faceOuterBorderViewParent == null || detectedResult == null) { drawFaceRectFinished = true; return; } for (RecognizeFaceInfoView recognizeFaceInfoView : recognizeFaceInfoViewList) { recognizeFaceInfoView.setVisibility(View.INVISIBLE); } int i = 0; for (FacePosition facePosition : detectedResult.facePositions) { RecognizeFaceInfoView recognizeFaceInfoView = null; if (recognizeFaceInfoViewList.size() - 1 < i) { recognizeFaceInfoView = new RecognizeFaceInfoView(getContext()); recognizeFaceInfoViewList.add(recognizeFaceInfoView); faceOuterBorderViewParent.addView(recognizeFaceInfoView, 3); } else { recognizeFaceInfoView = recognizeFaceInfoViewList.get(i); } recognizeFaceInfoView.showAtPosition(facePosition, rgb_camera.getHeight(), rgb_camera.getWidth(), detectedResult.width, detectedResult.height ); i++; } } catch (Exception e) { e.printStackTrace(); } finally { drawFaceRectFinished = true; } } }