百度人脸识别算法SDK3+注册流程

2.3.2 人脸注册
进入该功能之后首先需要录入输入用户名+组名,用户名要求不能含有特殊符号,要求不能超过30个字符,填入成功之后才可进入视频流实时采集页面。FaceRegisterActivity是注册页面。采集页面将会执行人脸检测、人脸活体检测、特征值提取功能。前面都通过即执行注册,注册成功后并将注册成功的图片保存到本地。您可以根据实际使用的硬件进行选择。

注一:为了使注册的图片达到较高的质量,注册默认开启质量检测与远近距离校验。设置里的质量检测开关对注册页面不起作用。

注二:为了使注册效果更好。所有活体状态下注册默认开启固定区域检测,设置里的检测跟踪策略对注册页面不起作用。

1)注册采集,可选择一下3种方式返回人脸

FaceRGBRegisterActivity:无活体或RGB活体(活体检测成功后,注册人脸)
FaceIRRegisterActivity:进行RGB+NIR活体成功后注册人脸
FaceDepthRegisterActivity:进行RGB+Depth活体成功后注册人脸(目前仅支持奥比中光Atlas镜头)
下面是检测相关代码:

private void faceDetect(byte[] data, final int width, final int height) {
    // 摄像头预览数据进行人脸检测
    int liveType = SingleBaseConfig.getBaseConfig().getType();
    if (liveType == 1) { // 无活体检测
        FaceTrackManager.getInstance().setAliving(false);
    } else if (Integer.valueOf(liveType) == 2) { // 活体检测
        FaceTrackManager.getInstance().setAliving(true);
    }
    FaceTrackManager.getInstance().faceTrack(data, width, height, new FaceDetectCallBack() {
        @Override
        public void onFaceDetectCallback(LivenessModel livenessModel) {
            checkResult(livenessModel);
        }
    });
}

下面是活体判断相关代码:

    int liveType = SingleBaseConfig.getBaseConfig().getType();
        // 无活体
        if (Integer.valueOf(liveType) == 1) {
            displayResult(model, null);
            // 注册
            register(model);
        } else if (Integer.valueOf(liveType) == 2) { // RGB活体检测
            displayResult(model, "livess");
            boolean livenessSuccess = false;
            float rgbLiveThreshold = SingleBaseConfig.getBaseConfig().getRgbLiveScore();
            livenessSuccess = (model.getRgbLivenessScore() > rgbLiveThreshold) ? true : false;
            if (livenessSuccess) {
                // 注册
                register(model);
            }
        }

下面是人脸特征提取的代码:

// 获取选择的特征抽取模型
    int modelType = SingleBaseConfig.getBaseConfig().getActiveModel();
    if (modelType == 1) {
        // 生活照
        FaceSDKManager.getInstance().onFeatureCheck(model.getBdFaceImageInstance(), model.getLandmarks(),
                BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO, new FaceFeatureCallBack() {
                    @Override
                    public void onFaceFeatureCallBack(float featureSize, byte[] feature) {
                        displayCompareResult(featureSize, feature);
                        Log.e("qing", String.valueOf(feature.length));
                    }

                });

    } else if (Integer.valueOf(modelType) == 2) {
        // 证件照
        FaceSDKManager.getInstance().onFeatureCheck(model.getBdFaceImageInstance(), model.getLandmarks(),
                BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO, new FaceFeatureCallBack() {
                    @Override
                    public void onFaceFeatureCallBack(float featureSize, byte[] feature) {
                        displayCompareResult(featureSize, feature);
                    }
                });
    }

下面是将特征值及用户信息注册到人脸库的代码:

 // 根据特征抽取的结果 注册人脸
 private void displayCompareResult(float ret, byte[] faceFeature) {
    // 特征提取成功
    if (ret == 128) {
        String imageName = groupId + "-" + username + ".jpg";
        // 注册到人脸库
        boolean isSuccess = FaceApi.getInstance().registerUserIntoDBmanager(groupId, username, imageName,
                userInfo, faceFeature);
        if (isSuccess) {
            // 关闭摄像头
            CameraPreviewManager.getInstance().stopPreview();
            Log.e("qing", "注册成功");
            // 数据变化,更新内存
            FaceApi.getInstance().initDatabases(true);
            // 防止重复注册
            username = null;
            groupId = null;
        }else {
            // 注册失败
        }
    } else if (ret == -1) {
        displayTip("特征提取失败");
    } else {
      // 特征提取失败
    }
}

参数填写时请注意:

用户名为必填项,支持英文与数字。
用户组为可选项,不填默认生成名为default 的用户组;
用户信息可不填,用于其他需求;
注册成功后生成的图片命名格式为group-username.jpg,保存在sdcard下的Success-Import文件夹下,用于人脸库的图片显示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335