package com.basic.security.fragment.helper; import android.content.ContextWrapper; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.ImageFormat; import android.graphics.Rect; import android.graphics.YuvImage; import android.hardware.Camera; import android.os.SystemClock; import android.view.View; import android.widget.RelativeLayout; import android.widget.ScrollView; import com.basic.security.base.BaseFragment; import com.basic.security.manager.RecognizeManager; 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.ProcessImageAndDrawResults; import com.basic.security.utils.RotateUtil; import com.basic.security.utils.ThreadUtil; import com.basic.security.widget.RecognizeFaceInfoView; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import com.basic.security.widget.*; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @EFragment public class CfDetectFace extends BaseFragment { @ViewById public Preview rgb_camera, gray_camera; @ViewById public RelativeLayout faceOuterBorderViewParent; public List recognizeFaceInfoViewList = new ArrayList<>(); long prevDrawTime = System.currentTimeMillis(); public long lastTimeDetectedFaceInCamera; @Background public void clearAllFaceRectWhenTimeout() { 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); } } boolean drawFaceRectFinished = true; @UiThread public void drawFaceRect(DetectedResult detectedResult) { drawFaceRectFinished = false; prevDrawTime = System.currentTimeMillis(); if (faceOuterBorderViewParent == 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++; } drawFaceRectFinished = true; } }