最全讯飞AIUI智能机器人6-----人脸识别技术_科大讯飞人脸识别(1),关于大数据开发开发的面试经验总结

img
img

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

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

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

    }
}

}

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);
}
}
});
}

/\*\*

* 人脸识别
*/
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 就会崩溃。 除了进入设置手动开启权限,还有两种方式让应用获得权限:动态权限申请、 平台签名。本次实验我们采用平台签名的方式获得权限。**![在这里插入图片描述](https://img-blog.csdnimg.cn/564b42a80a1b47a6808d468fd4d09917.png)
> 
> 
> 



### 💖💖步骤6:实验结果


![在这里插入图片描述](https://img-blog.csdnimg.cn/e3e59c3c62714a3a80e16768e14bc551.png)



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



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




---


## 🍓🍓 参考资料与扩展阅读


1)[Android 开发工具网站](https://bbs.csdn.net/topics/618545628)  
 2)[Android 开发者社区](https://bbs.csdn.net/topics/618545628)  
 3)[科大讯飞 AIUI 开放平台](https://bbs.csdn.net/topics/618545628)  
 4)[科大讯飞开放平台文档中心](https://bbs.csdn.net/topics/618545628)




---




---





![img](https://img-blog.csdnimg.cn/img_convert/067c3338fa42a17c3429d418868cb8a2.png)
![img](https://img-blog.csdnimg.cn/img_convert/af1445bc402c8d11497787c9473b32f3.png)
![img](https://img-blog.csdnimg.cn/img_convert/59e85a3c14ba77e0d5a2cf178904aa78.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

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


---




---





[外链图片转存中...(img-xwDiWbCb-1715103202074)]
[外链图片转存中...(img-BaDBgqrG-1715103202074)]
[外链图片转存中...(img-sHiX3t3P-1715103202075)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值