大数据最全讯飞AIUI智能机器人6-----人脸识别技术_科大讯飞人脸识别(3)

💥💥首先,在我们的应用工程新建我们自定义的Application(MyApp.java),在MyApp.java文件的onCreate中进行开放平台MSC能力的注册,只有完成了能力的注册后,才能使用人脸识别的能力接口。

private void init() {
    StarMscAbility.getInstance().initWithAppid(getApplicationContext(), APPID);
    //日志初始化
    StarLogAbility.getInstance().initAbility(this);
    //基础能力初始化
    StarCommonAbility.getInstance().initAbility(this,
            RobotType.TYPE_TEACHING, new StarCommonAbility.onResultCallback() {
                @Override
                public void onResult(boolean isSuccess, String hardCode) {
                    if (isSuccess) {
                        //硬件和业务状态初始化
                        switch (hardCode) {
                            case PartCode.HARDWARE_PARTCODE.CODE_EMOJI:
                                //设置初始表情
                                EmojiHelper.doEmojiBase();
                                break;
                            case PartCode.HARDWARE_PARTCODE.CODE_GPIO:
                                //默认加载的时候,将拾音方向设置为默认正前方的0度。
                                GPIOHelper.getInstance().setMainMic(0);
                                break;
                            case PartCode.HARDWARE_PARTCODE.CODE_CENTER_LIGHT:
                                //关闭腹部灯带
                                CenterLightHelper.takeCenterLightOff();
                                break;
                            default:
                                break;
                        }
                    }
                }
            });
}

💥💥界面控件初始化(部分)

private void initView() {
        //组ID显示text
        mTxtGroupid = findViewById(R.id.groupid);
        //人脸标识显示text
        mEdtAuthid = findViewById(R.id.online_authid);

        //界面按钮点击处理
        findViewById(R.id.group_create).setOnClickListener(this);
        findViewById(R.id.group_delete).setOnClickListener(this);
        findViewById(R.id.online_register).setOnClickListener(this);
        findViewById(R.id.take_pic).setOnClickListener(this);
        findViewById(R.id.recognition_face).setOnClickListener(this);
      //提前创建一个组进行组的设置
        mTxtGroupid.setText("\*\*\*\*\*\*");
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.group_create: //创建组
                createGroup();
                break;
            case R.id.group_delete: //删除组
                deleteGroup(mGroupId);
                break;
            case R.id.online_register: //在线注册人脸信息
                registerFace();
                break;
            case R.id.take_pic: //拍摄照片
                Intent mIntent = new Intent(MainActivity.this, CameraActivity.class);
                startActivityForResult(mIntent, 1000);
                break;
            case R.id.recognition_face: //识别照片中的人脸信息
                recognitionFace();
                break;
        }
    }

    /\*\*
 \* 创建组
 \*/
    private void createGroup() {
        // 创建人脸组
        faceGroupHelper.createGroup(new StarMscAbility.onResultCallback() {
            @Override
            public void onResult(boolean flag, String result) {
                Log.d("MainActivity", "result = " + flag + " groupId = " + result);

                if (flag) {
                    mGroupId = result;
                    mTxtGroupid.setText(result);
                    showToast("创建组成功:" + result + "-请牢记你的GroupId!!!");
                } else {
                    showToast("创建组失败:" + result);
                }
            }
        });
    }

    /\*\*
 \* 删除组
 \*/
    private void deleteGroup(String groupid) {
        if (mGroupId.equals("")) {
            showToast("Please Create GroupId Frist");
            return;
        }
        faceGroupHelper.deleteGroup(groupid, new StarMscAbility.onResultCallback() {
            @Override
            public void onResult(boolean flag, String result) {
                if (flag) {
                    mTxtGroupid.setText("");
                    showToast("删除组成功");
                } else {
                    showToast("删除组失败" + result);
                }
            }
        });
    }

    /\*\*
 \* 人脸注册
 \*/
    private void registerFace() {
        if (mGroupId.equals("")) {
            showToast("Please Create GroupId Frist");
            return;
        }
        if (mImage == null) {
            showToast("请拍照");
        }
        if (null == mEdtAuthid.getText() || mEdtAuthid.getText().toString().equals("")) {
            showToast("请输入userId");
        }
        userId = mEdtAuthid.getText().toString();
        faceRegisterHelper = new FaceRegisterHelper(this);
        faceRegisterHelper.startRegister(userId, mImage,
                new StarMscAbility.onResultCallback() {
                    @Override
                    public void onResult(boolean flag, String result) {
                        if (flag) {
                            showToast("人脸模型注册成功:" + mEdtAuthid.getText());
                            //注册成功后加组
                            faceGroupHelper.addFace(userId, mGroupId, new StarMscAbility.onResultCallback() {
                                @Override
                                public void onResult(boolean flag, String result) {
                                    Log.d("MainActivity", "result = " + result);
                                    if (flag) {
                                        showToast("人脸注册加组成功:" + result);
                                    } else {
                                        showToast("人脸注册加组失败:" + result);
                                    }
                                }
                            });
                        } else {
                            showToast("注册模型注册失败:" + result);
                        }
                    }
                });
    }

    /\*\*
 \* 人脸识别
 \*/
    private void recognitionFace() {
        if (mGroupId.equals("")) {
            showToast("Please Create GroupId First");
            return;
        }
        if (mImage == null) {
            showToast("请拍照");
        }
        faceVerifyHelper.setFaceVerifyResultCallback(new StarMscAbility.onResultCallback() {
            @Override
            public void onResult(boolean flag, String result) {
                //返回参数flag为人脸识别结果
                //当flag为true时,result为空,表示图片中检测到了人脸,但没有匹配到人脸库中的人脸信息,当msg不为空时,msg的值表示匹配到的人脸结果(注册时提交的人脸标识)
                //当flag为false时,result的值表示人脸识别失败的信息(包括图片中没有检测到人脸)
                if (flag) {
                    if ("".equals(result)) {
                        showToast("该人脸还未注册!");
                    } else {
                        showToast("识别成功,欢迎您:" + result);
                    }
                } else {
                    showToast("没有匹配到人脸");
                }
            }
        });
        faceVerifyHelper.sendGroupVerify(mGroupId,mImage);
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (resultCode != RESULT_OK) {
            return;
        }
        String fileSrc = null;
        if (requestCode == 1000) {
            fileSrc = data.getStringExtra("bitmap");
            if (null != fileSrc) {
                // mPath = fileSrc;
                // 获取图片的宽和高
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = false;

                // 压缩图片
                options.inSampleSize = Math.max(1, (int) Math.ceil(Math.max(
                        (double) options.outWidth / 512f,
                        (double) options.outHeight / 512f)));
                mImage = BitmapFactory.decodeFile(fileSrc, options);


                // 若mImageBitmap为空则图片信息不能正常获取
                if (null == mImage) {
                    showToast("图片信息无法正常获取!");
                    return;
                }
                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                //可根据流量及网络状况对图片进行压缩
                mImage.compress(Bitmap.CompressFormat.JPEG, 80, baos);
                // mImageData = baos.toByteArray();

                ((ImageView) findViewById(R.id.online_img)).setImageBitmap(mImage);
            }
        }

    }



    /\*\*
 \* 显示toast提升信息
 \*
 \* @param value
 \*/
    private void showToast(String value) {
        Toast.makeText(this, value, Toast.LENGTH_SHORT).show();
    }

}

💖💖步骤 5:应用权限申请

跟以前在安装 APP 的是就申请了权限不同,Google 在 API 23,也就 Android6.0 之后加入了动态权限。对于一些敏感的权限,决定权交还给了用户, 不再是强制申请了。因为这个原因,如果 APP 需要支持 Android6.0 以上的系 文档密级:外部公开 20 统,就需要进行一下适配,否则 APP 就会崩溃。 除了进入设置手动开启权限,还有两种方式让应用获得权限:动态权限申请、 平台签名。本次实验我们采用平台签名的方式获得权限。在这里插入图片描述

💖💖步骤6:实验结果

在这里插入图片描述

由上图可知试验成功,可以通过摄像头捕捉到我(注意:此处应该先创建group,然后再人脸识别)
具体流程如下:

💥💥1、我们先点击“创建Group”按钮,创建人脸组,完成人脸组的创建后,界面上会显示组ID信息;
💥💥2、然后我们点击“拍照”按钮,使用机器人开发平台的摄像头对准脸部进行拍照,完成后,界面上会显示照片信息,确保照片包含完整的人脸图片;
💥💥3、在用户标识输入框里面输入人脸标识信息,使用字母+数字的方式,然后点击“人脸注册”按钮,注册成功会弹出提示信息;
💥💥4、熟悉了人脸注册的方法,我们可以找不同的人按照同样的方式多注册几个人脸信息;
💥💥5、完成了人脸信息的注册后,我们使用摄像头再进行拍照,然后点击“人脸识别”按钮,查看是否对已经注册过的人脸信息能够准确的进行识别。


🍓🍓 参考资料与扩展阅读

1)Android 开发工具网站
2)Android 开发者社区
3)科大讯飞 AIUI 开放平台
4)科大讯飞开放平台文档中心







img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!



[外链图片转存中…(img-d520GZRE-1714779063853)]
[外链图片转存中…(img-mCDg2pCl-1714779063853)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值