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 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() { // System1.out.println("DetectedResult.facePositionsJson begin facePositions.size()="+facePositions.size()); featureByteArrayOutputStream.reset(); List> faces = new ArrayList<>(); for (FacePosition facePosition : facePositions) { if (Constants.USE_GRAY_CAMERA && !facePosition.liveness) { continue; } boolean detectScoreCanSignUp1 = facePosition.detectScoreCanSignUp1(); // System1.out.println("DetectedResult.facePositionsJson detectScoreCanSignUp1="+detectScoreCanSignUp1); if (facePosition.featureData != null && detectScoreCanSignUp1) { try { IdCard idCard = IdCardManager.lastIdCard; Map 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(); } } } // System1.out.println("DetectedResult.facePositionsJson end faces.size()="+faces.size()); // System1.out.println("DetectedResult.facePositionsJson " + faces); if (faces.size() > 0) { return new Gson().toJson(faces); } else { return ""; } } public List> facePositionsJsonS() { featureByteArrayOutputStream.reset(); List> 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 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; } }