liuxiaolong
2019-05-06 573d1e33a32da5c55c638df2ee622d972976c1d0
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.basic.security.fragment;
 
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.graphics.Outline;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewOutlineProvider;
import android.widget.ScrollView;
 
import com.basic.security.R;
import com.basic.security.activity.MainActivity;
import com.basic.security.fragment.helper.CfCompareFeature;
import com.basic.security.manager.RecognizeManager;
import com.basic.security.utils.Constant;
import com.basic.security.utils.Constants;
import com.basic.security.utils.DetectListener;
import com.basic.security.utils.DetectedResult;
import com.basic.security.utils.FaceId;
import com.basic.security.utils.Preview;
import com.basic.security.widget.H264Player;
 
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
 
@EFragment(R.layout.fragment_camera)
public class CameraFragment extends CfCompareFeature {
 
    private static final int CAMERA_OK = 1024;
 
    private boolean initCamera = false;
 
    @ViewById
    public View overlay;
 
    @Override
    public void show() {
        rgb_camera.setVisibility(View.VISIBLE);
    }
 
    @Override
    public void hide() {
        rgb_camera.setVisibility(View.INVISIBLE);
    }
 
    @UiThread
    public void showOverlay() {
        overlay.setVisibility(View.VISIBLE);
    }
 
    @UiThread
    public void hideOverlay() {
        if (overlay != null) {
            overlay.setVisibility(View.INVISIBLE);
        }
    }
 
    @ViewById
    H264Player h264Player;
    @AfterViews
    public void afterViews() {
        if (!Constants.simulate_camera) {
            h264Player.setVisibility(View.GONE);
        }
        if (ContextCompat.checkSelfPermission(mainActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{android.Manifest.permission.CAMERA}, CAMERA_OK);
        } else {
            openCamera();
        }
        compareFeature();
    }
 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case CAMERA_OK:
                openCamera();
                resetCamera();
                break;
            default:
                break;
        }
    }
 
    public void resetCamera() {
        if (Constants.isHuaWeiPad) {
            gray_camera.reset();
        } else {
            rgb_camera.reset();
        }
    }
 
    private void openCamera() {
 
        rgb_camera.setOutlineProvider(new ViewOutlineProvider() {
            @Override
            public void getOutline(View view, Outline outline) {
                outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), getActivity().getResources().getDimension(R.dimen.corner_radius));
            }
        });
        rgb_camera.setClipToOutline(true);
        if (getActivity() == null) {
            return;
        }
 
        FaceId.initSdk(getActivity(), rgb_camera, gray_camera, new DetectListener() {
            @Override
            public void faceDetected(DetectedResult detectedResult) {
                if (detectedResult.facePositions.size() > 0) {
                    if (mainActivity().currentFragment == mainActivity().fragment_su_auto_wait_face
                            || mainActivity().currentFragment == mainActivity().fragment_admin_face_login
                            || mainActivity().currentFragment == mainActivity().fragment_su_logged_ic_wait_face
                            || mainActivity().currentFragment == mainActivity().fragment_su_logged_nic_wait_face) {
                        mainActivity().refreshCurrentFragmentShowTime();
                    }
                    lastTimeDetectedFaceInCamera = System.currentTimeMillis();
                    addDetectedResult(detectedResult);
                }
            }
        });
        RecognizeManager.processRecognizeResult();
        clearAllFaceRectWhenTimeout();
    }
 
}