Android Arcface 2.0人脸识别注册失败问题

人脸识别须要init初始化(FaceServer中),离开时须要unInit销毁;当一个含有人脸识别的界面A跳向另外一个含有人脸识别的界面B时,因为初始化和销毁都是对FaceServer类加锁(synchronized (this) {})的,因此致使注册时为注销失败,或注册了又被注销失败。this

FaceServer类中: 初始化:线程

public boolean init(Context context) {
        synchronized (this) {
            if (faceEngine == null && context != null) {
                faceEngine = new FaceEngine();
                int engineCode = faceEngine.init(context, FaceEngine.ASF_DETECT_MODE_IMAGE, FaceEngine.ASF_OP_0_HIGHER_EXT, 16, 1, FaceEngine.ASF_FACE_RECOGNITION | FaceEngine.ASF_FACE_DETECT);
                if (engineCode == ErrorInfo.MOK) {
                    initFaceList(context);
                    return true;
                } else {
                    faceEngine = null;
                    Log.e(TAG, "init: failed! code = " + engineCode);
                    return false;
                }
            }
            return false;
        }
    }

销毁:code

public void unInit() {
        synchronized (this) {
            if (faceRegisterInfoList != null) {
                faceRegisterInfoList.clear();
                faceRegisterInfoList = null;
            }
            if (faceEngine != null) {
                faceEngine.unInit();
                faceEngine = null;
            }
        }
    }

两我的脸识别界面都是用的同一个FaceServer类,synchronized致使若是当前有其余线程正持有该类锁,那么新到的线程就必须等待,因此对象

①A跳转B后注销A(uninit),则会致使B中初始化(init)时已存在faceEngine对象,而后注销A时又会删除faceEngine对象,致使人脸注册失败it

相关文章
相关标签/搜索