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


🍓🍓二、实验内容

人脸识别作为一项热门的计算机技术研究领域,是利用分析比较的计算机技术识别人脸,其中包括人脸追踪侦测,自动调整影像放大,夜间红外侦测,自动调整曝光强度等技术。人脸识别技术属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。本次实验就是通过一个智能人脸识别应用的开发,来向大家展示人脸识别技术在智能AI应用中的具体实现方法和呈现的效果体验。本次实验通过开发一个实际的简单智能人脸识别应用,通过机器人完成人脸的注册与识别,并对具体的技术与流程做详细的讲解。


🍓🍓三、实验步骤

💖💖步骤 1:开放平台账号申请及能力注册

由于本次实验开发的人脸识别功能应用使用的是科大讯飞开放平台提供的 人脸识别能力,我们需要先到讯飞的开放平台申请账号,并完成平台上相关能力 注册,具体流程如下: 1)首先,我们要在讯飞开放平台进行账号注册,地址:https://www.xfyun.cn/
在这里插入图片描述

完成注册后,登陆开放平台,进入控制台。点击“创建应用”,完成应用相关信息的输入后,点击“提交”按钮
在这里插入图片描述

此时,进入“我的应用”界面,可以看到添加的应用信息,包括 appid 等,点 击“其他”,在弹出的界面中选择“人脸验证与检索”的管理服务,可以选择对 应的服务完成 SDK 的下载
在这里插入图片描述

在其他中找到人脸识别,下载对应的SDK。


💖💖步骤 2:项目工程搭建及能力包导入

在这里插入图片描述
在这里插入图片描述

💖💖步骤3:项目MSC能力导入

完成了工程项目的搭建后,我们需要在项目工程中集成开放平台的MSC能力,具体步骤如下:
首先,将MSC能力包文件mscability-release.aar文件拷贝到项目工程的/app/libs目录下;
然后,解压从讯飞开放平台下载的人脸识别SDK能力包,在libs目录下找到Msc.jar文件,拷贝到项目工程目录/app/libs目录下;接着,将SDK能力包libs目录下的所有armeabi目录拷贝到工程目录/app/src/main/jniLibs下(若没有这个目录,自己创建)。整体目录结构如下:

在这里插入图片描述

完成SDK的集成后,我们需要再编译配置文件中进行能力包的导入配置,打开app目录下的build.gradle文件,添加下图中红框位置中代码
在这里插入图片描述
在这里插入图片描述

完整的build.gradle文件如下所示:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.starway.starrobot"
        minSdkVersion 18
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk {
            //只需要兼容armeabi-v7a
            abiFilters "armeabi-v7a"
        }
    }

    signingConfigs {
        debug {
            storeFile file("platform.jks")
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
        release {
            storeFile file("platform.jks")
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['\*.jar', '\*.aar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

💖💖步骤4:功能代码开发

💥💥首先,在我们的应用工程新建我们自定义的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);
                        }
                    }
                });
    }

    /\*\*
 \* 人脸识别
 \*/


![img](https://img-blog.csdnimg.cn/img_convert/ae6bf1e0a551ad30ea8e833d92d92d4d.png)
![img](https://img-blog.csdnimg.cn/img_convert/fd6bc69a1000c2355ae8a2c673c71e7a.png)

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


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

    /\*\*
 \* 人脸识别
 \*/


[外链图片转存中...(img-B9I3tgNg-1714816528443)]
[外链图片转存中...(img-hh8sC3h6-1714816528444)]

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值