package com.basic.security.utils;
|
|
import android.graphics.Bitmap;
|
import android.text.TextUtils;
|
|
import com.basic.security.activity.MainActivity;
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.manager.HintSignUpManager;
|
import com.basic.security.manager.IdCardManager;
|
import com.basic.security.manager.SystemInitManager;
|
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 {
|
static RenderScriptHelper renderScriptHelper = new RenderScriptHelper();
|
static Object renderScriptHelperLock = new Object();
|
static long lastCreateTime = System.currentTimeMillis();
|
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) {
|
synchronized (renderScriptHelperLock) {
|
frameBitmap = renderScriptHelper.getBitmapFromFrameData(nv21Array, width, height);
|
}
|
}
|
}
|
return frameBitmap;
|
}
|
|
public String facePositionsJson() {
|
featureByteArrayOutputStream.reset();
|
List<Map<String, String>> faces = new ArrayList<>();
|
for (FacePosition facePosition : facePositions) {
|
if (Constants.USE_GRAY_CAMERA && !facePosition.liveness) {
|
continue;
|
}
|
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 "";
|
}
|
}
|
|
public List<Map<String, String>> facePositionsJsonS() {
|
featureByteArrayOutputStream.reset();
|
List<Map<String, String>> faces = new ArrayList<>();
|
for (FacePosition facePosition : facePositions) {
|
if (Constants.USE_GRAY_CAMERA && !facePosition.liveness) {
|
continue;
|
}
|
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) {
|
if (lastCreateTime != idCard.createTime) {
|
MainActivity activity = BaseApplication.getApplication().activity;
|
if (activity.currentFragment == activity.fragment_guest_mode) {
|
ToastUtil.show(HintSignUpManager.getVerificationSuccessHint());
|
SystemInitManager.secondaryDisplay.showVerificationFail(HintSignUpManager.getVerificationSuccessHint());
|
}
|
lastCreateTime = idCard.createTime;
|
}
|
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);
|
} else {
|
if (lastCreateTime != idCard.createTime) {
|
ToastUtil.show(HintSignUpManager.getVerificationFail());
|
}
|
}
|
}
|
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();
|
}
|
}
|
}
|
return faces;
|
}
|
}
|