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<RecognizeFaceInfoView> 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;
|
}
|
|
}
|
|
}
|