🍖🍖🍖🍖🍖🍖🍖🍖**
🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖
开始之前来个小插曲。 可以伴随一生的编程软件(完全免费)。里面除了全国top的刷题题库,还有招聘(社招和校招)、一些上岸大厂的大佬的面试经验,从学校到社会工作,时时刻刻你都可以用到,感兴趣的可以去注册试试
可以伴随程序员一生的app
🍓🍓一、实验目的
想要给你的项目加上人脸识别的亮点吗,那就来看看这篇文章吧。本次实验通过使用讯飞开放平台上MSC人脸识别能力,介绍了人脸验证与人脸检索的使用,结合服务机器人的相机能力,开发一个简单的人脸识别应用程序,了解人脸识别技术如何在机器人上使用,同时对人脸识别技术的使用途径和步骤进行详细讲解,具体包括下面三个部分:
💖1、了解讯飞开放平台MSC的人脸识别技术;
💖2、 掌握机器人开发套件相机的使用;
💖3、 掌握人脸识别功能在机器人上的应用开发。
🍓🍓二、实验内容
人脸识别作为一项热门的计算机技术研究领域,是利用分析比较的计算机技术识别人脸,其中包括人脸追踪侦测,自动调整影像放大,夜间红外侦测,自动调整曝光强度等技术。人脸识别技术属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。本次实验就是通过一个智能人脸识别应用的开发,来向大家展示人脸识别技术在智能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;
![img](https://img-blog.csdnimg.cn/img_convert/21ed7678a51981f3f2de15e366381d39.png)
![img](https://img-blog.csdnimg.cn/img_convert/efed17d079e1e321e662d4943dbec8ec.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
st");
return;
[外链图片转存中...(img-2z4mO14V-1714548978698)]
[外链图片转存中...(img-RpiHcpcs-1714548978699)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**