利用百度云离线SDK&在线人脸库&人脸识别接口_实现在线人脸识别

日期:2023-02-27 19:44:06 / 人气:2871

上一节大体提到了,两种应用百度在线人脸接口以及百度人脸辨认离线SDK完成人脸辨认的两种方式.第一种方式,是用在线人脸搜索api接口,去辨认在线人脸库中存储的人脸照片,但是经过进一步伐 查,在线人脸搜索接口,需求运用人脸照片,照片是BASE64类型的,传输给在线人脸搜索api接口,这样才行,当然接口提示可以传入多种图片类型,这里我运用的是BASE64类型的,其实也是建议用base64类型的图片,由于这个接口还可以传输图片的face_token,但是,假如你经过摄像头去实时获取图片,的时分是获取不到face_token的,所以只能把图片传输给在线人脸搜索接口去辨认.去看一下代码:首先预备好:百度人脸辨认离线SDK,这个例子顺序:登录百度云账号:然后https://ai.baidu.com/ai-doc/FACE/7k37c1twu这个中央可以下载人脸辨认android的SDK找到点击出来,然后:然后点击立刻运用:然后这里点击下载SDK然后依据需求选择android顺序:然后翻开工程当前:这个代码中可以看到下面有个,生活照检索:可以看到,标注的中央,原来有正文掉的代码,下面是我新添加的代码,这里我在//--->这里可以获取相机捕捉的人脸图片 2021年10月19日15:12:54Bitmap bitmap=  BitmapUtils.getInstaceBmp(rgbInstance.getImage());//--->依据faceToken 去搜索尝试featureSearchOnline(livenessModel,bitmap,feature);这里获取了,实时的摄像头照片当前,这里获取实时的摄像头照片是sdk本人带有的功用,然后拿到这个bitmap,然后把图片上传给featureSearchOnline 这个本人写的办法, //2021年10月20日15:22:51    //    private void featureSearchOnline(LivenessModel livenessModel,Bitmap bitmap,byte[] feature) {        long startFeature = System.currentTimeMillis();        String faceToekn = getFaceToken(feature);        //1.获取百度云TOKEN        String tokenStr = BaiDuAuthServiceUtils.getAuth();        String groupId ="XXXXX";        String base64Str = BitmapBaiDuUtils.bitmapToBase64(bitmap);        //FACE_TOKEN        String searlt = "";        searlt= BaiDuFaceSearchUtils.faceSearch(tokenStr,"BASE64",groupId,base64Str);        System.out.println(searlt);        Log.e("face_token--->0001",searlt);        if(StringUtils.isNotBlank(searlt)){            JSONObject jsonObj= null;            JSONArray respFaceArray= null;            try {                jsonObj = new JSONObject(searlt);                if(jsonObj.getString("error_msg").equals("SUCCESS")){                    respFaceArray=new JSONObject(jsonObj.getString("result")).getJSONArray("user_list");                    if(respFaceArray!=null && respFaceArray.length()>0){                        JSONObject userJsonObj = new JSONObject(respFaceArray.getString(0));                        String groupIdStr = userJsonObj.getString("group_id");                        String userIdStr =userJsonObj.getString("user_id");                        String userInfoStr = userJsonObj.getString("user_info");                        String userScore = userJsonObj.getString("score");                        //1.辨认成功 构建User 前往                        User user = new User();                        user.setGroupId(groupIdStr);                        user.setUserId(userIdStr);                        user.setUserInfo(userInfoStr);                        user.setFeature(feature);                        user.setUserName("测试用户");                        Float faceScore =0.0f;                        faceScore =Float.parseFloat(userScore);                        //人脸辨认 阈值设置爲 80                        if(faceScore>=80){                            livenessModel.setUser(user);                            livenessModel.setFeatureScore(Float.parseFloat(userScore));                        }                    }                }            }catch (Exception e){            e.printStackTrace();            }            livenessModel.setCheckDuration(System.currentTimeMillis() - startFeature);        }    }然后看看这个本人写的办法,可以看到这个办法,首先获取了这个图片的base64字符串,然后把这个字符串,传给了,BaiDuFaceSearchUtils.faceSearch这个百度人脸在线搜索的接口,停止人脸搜索.可以看到这里特别重要,每次搜索当前,前往的是个集合,普通是前往一个,当然假如,在人脸库中,一团体的user_id下,存了多团体脸,那麼会前往一个集合,那麼这里我获取的第一个就可以了.这里一定要留意,设置一个阈值,这里普通设置阈值是80就可以了.这里写好了当前,他辨认成功当前,会自动的回调,回调的时分就会走到:走到这里,这就相当于人脸登录成功了,然后就可以写本人的业务了.然后上一节说的,第二种方式,先把近程百度云人脸库的内容,同步到本机的平板上的话,那麼需求先运用,人脸特征值转换的一个在线api接口,把face_token,转换成人脸特征值,然后再存入,本地平板上,这样才干停止,人脸的离线辨认.由于在线辨认的时分,用的是face_token来标志人脸,离线辨认的时分,用的是人脸特征值,所以,这个时分,先把百度云在线人脸库中存的,人脸的face_token,转换成人脸特征值,再存入本地才干运用了.https://cloud.baidu.com/doc/FACE/s/Okg7edktq人脸特征值和face_token转换的接口在这里,这个不太好找:

作者:顺盈注册登录平台




现在致电 8888910 OR 查看更多联系方式 →

顺盈注册登录平台 版权所有