554325746@qq.com
2019-08-07 2539f53391765abb74b6fe63f46e5a2c701e950f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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<RecognizeFaceInfoView> 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;
    }
 
}