a
554325746@qq.com
2019-10-24 c61e776980f038bb0e195f7753a3d7e127d6028f
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
package com.basic.security.utils;
 
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.text.TextUtils;
 
import com.basic.security.manager.IdCardManager;
import com.basic.security.model.FaceMessage;
import com.basic.security.model.Person;
import com.google.gson.Gson;
 
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class DetectedResult implements Serializable {
    public byte[] originalCameraData = null;
    public boolean originalCameraDataChanged;
    public List<FacePosition> facePositions = new ArrayList<>();
    public byte[] frameJpgData;
    public byte[] bgrData;
    public int width;
    public int height;
    public String resultText;
    public int featureCount = 0;
    public boolean isRgb;
    public boolean shouldExtractFeature;
    public Bitmap frameBitmap;
    public boolean isNewDetectResult = false;
    public byte[] nv21Array;
    public ByteArrayOutputStream featureByteArrayOutputStream = new ByteArrayOutputStream();
    ByteArrayOutputStream jpgBaos = new ByteArrayOutputStream();
 
    public Bitmap getFrameBitmap() {
        if (frameBitmap == null) {
            if (nv21Array != null) {
                YuvImage im = new YuvImage(nv21Array, ImageFormat.NV21, width,
                        height, null);
                Rect r = new Rect(0, 0, width, height);
                jpgBaos.reset();
                im.compressToJpeg(r, 100, jpgBaos);
                byte[] jpgByteArray = jpgBaos.toByteArray();
                frameBitmap = BitmapFactory.decodeByteArray(jpgByteArray, 0, jpgBaos.size());
            }
        }
        return frameBitmap;
    }
 
    public String facePositionsJson() {
        featureByteArrayOutputStream.reset();
        List<Map<String, String>> faces = new ArrayList<>();
        for (FacePosition facePosition : facePositions) {
            if (facePosition.featureData != null && facePosition.detectScoreCanSignUp1()) {
                try {
                    IdCard idCard = IdCardManager.lastIdCard;
                    Map<String, String> face = new HashMap<>();
                    face.put(FaceMessage.verifiedIdCard, Constants.FALSE);
                    face.put(FaceMessage.personName, "");
                    if (idCard != null && idCard.featureData != null && System.currentTimeMillis() - idCard.createTime < 10 * 1000) {
                        double score = FaceId.instance.compareFeature(idCard.featureData, facePosition.featureData);
                        if (score > 50) {
                            face.put(FaceMessage.idCardBirthday, idCard.birthday + "");
                            face.put(FaceMessage.idCardGender, idCard.gender);
                            face.put(FaceMessage.idCardName, idCard.name);
                            face.put(FaceMessage.idCardNumber, idCard.cardNumber);
                            face.put(FaceMessage.personName, idCard.name);
                            face.put(FaceMessage.verifiedIdCard, Constants.TRUE);
                        }
                    }
                    String personId = facePosition.compareFeatureResult.personId;
                    face.put(FaceMessage.x1, facePosition.x1 + "");
                    face.put(FaceMessage.x2, facePosition.x2 + "");
                    face.put(FaceMessage.y1, facePosition.y1 + "");
                    face.put(FaceMessage.y2, facePosition.y2 + "");
                    face.put(FaceMessage.score, facePosition.detectScore + "");
                    face.put(FaceMessage.track_id, facePosition.trackerId + "");
                    if (TextUtils.isEmpty(personId)) {
                        face.put(FaceMessage.personId, "");
                        String featureIndex = featureByteArrayOutputStream.size() + ",";
                        featureByteArrayOutputStream.write(facePosition.featureData);
                        featureIndex += featureByteArrayOutputStream.size();
                        face.put(FaceMessage.featureIndex, featureIndex);
                        faces.add(face);
                    } else {
                        face.put(FaceMessage.personName, facePosition.compareFeatureResult.person.getString(Person.name));
                        if ("已经验证身份证".equals(facePosition.compareFeatureResult.person.getString(Person.verify_status))) {
                            face.put(FaceMessage.verifiedIdCard, Constants.TRUE);
                        }
                        face.put(FaceMessage.personId, personId);
                        faces.add(face);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
 
            }
        }
//        System.out.println("DetectedResult.facePositionsJson " + faces);
        if (faces.size() > 0) {
            return new Gson().toJson(faces);
        } else {
            return "";
        }
    }
}