此仓库主要实现了基于讯飞AIUI语音交互和虹软人脸识别完成的demo库
人脸识别使用方法
1、让你的类实现FacePlugin.FaceDetectionListener 接口;
2、使用 FacePlugin.getInstance().init(context);初始化人脸识别,传入context参数;
3、在初始化完成initComplete回调中配置人脸识别的参数即可开启识别;
4、在faceDetection回调方法中即可收到识人脸识别过程中的信息;
示例如下:
在activity的onCreate方法中初始化和设置回调监听
public class MainActivity extends AppCompatActivity implements FacePlugin.FaceDetectionListener
........
........
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FacePlugin.getInstance().setFaceDetectionListener(this);
FacePlugin.getInstance().init(this);
}
.........
@Override
protected void onDestroy() {
super.onDestroy();
//释放人脸识别
FacePlugin.getInstance().onDestroy();
}
@Override
public void faceDetection(boolean auth, String genderInfo, String face3DAngles, @Nullable String name) {
Log.i(TAG,"性别:"+genderInfo+" 人脸角度:"+face3DAngles+" 姓名:"+name);
//识别到之后先暂停识别
FacePlugin.getInstance().setPause(true);
name=name==null?"陌生人":name;
AIUIPlugin.getInstance().speakTTS(name+"欢迎您到访小远机器人,请问我能为您做点什么?",()->{
Log.i(TAG,"欢迎词播报完毕,执行唤醒");
AIUIPlugin.getInstance().wakeUPAIUI();
});
}
@Override
public void initComplete() {
String path= Environment.getExternalStorageDirectory().getPath() +"/face/register";
String failed=Environment.getExternalStorageDirectory().getPath()+ "/face/failed";
Log.i(TAG,"初始化完毕开始注册人脸,人脸注册目录:"+path+" 注册失败目录:"+failed);
//setAlive为是否开启活体检测,path为人脸照片目录,failed为注册人脸失败后照片存放目录
FacePlugin.BuildConfig config= new FacePlugin.BuildConfig().setAlive(false).setIdentifyNum(2).setFailedPath(failed).setRegisterPath(path);
FacePlugin.getInstance().setBuildConfig(config);
//设置好后开启人脸识别
FacePlugin.getInstance().registerFace();
}
AIUI使用说明
1、实现AIUIPlugin.MessageListener接口用于接收交互中AIUI状态回调;
2、设置AIUI状态、数据 监听 AIUIPlugin.getInstance().setMessageListener(this);
3、使用以下下代码进行初始化(例如在onCreate中调用初始化);
AIUIPlugin.getInstance().init(context, path,auth);
参数context为上下文;
参数path为资源存放目录,如:ExternalStoragePath() sd卡根目录
参数auth为AIUI授权的auth授权码
4、使用 AIUIPlugin.getInstance().destory(); 释放资源;
5、监听AIUI返回的数据、状态回调
@Override
public void handleState(String state) {
switch (state){
case "sleep":
//休眠的时候继续人脸识别
FacePlugin.getInstance().setPause(false);
break;
case "run":
FacePlugin.getInstance().setPause(true);
break;
}
}
@Override
public void handleAceInit(boolean init) {
if(!init){
AIUIPlugin.getInstance().speakTTS("请检查是否连接了麦克风",null);
}
}
@Override
public void handleCommand(String commandKey, String data) {
Logger.d("技能名称:"+commandKey+" 技能数据:"+data);
try {
JSONObject intentObj=new JSONObject(data);
switch (commandKey) {
case "IFLYTEK.weather":
//天气技能
Bundle bundle=new Bundle();
Intent intent=new Intent(Utils.getApp(),WeatherActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(AIUIPlugin.WEATHER_KEY,data);
Utils.getApp().startActivity(intent,bundle);
break;
case "OS10584953596.yf_move":
//执行前进后退等指令
if(intentObj.has("semantic")){
JSONObject object=intentObj.getJSONArray("semantic").getJSONObject(0);
if(object.has("slots")){
JSONObject slots=object.getJSONArray("slots").getJSONObject(0);
if(slots.has("normValue")){
Logger.d("目标位置:"+slots.getString("normValue"));
switch (slots.getString("normValue")){
case "":
//导航具体的位置点,根据该位置获取json文件中目的地
break;
}
}
}
}
break;
case "musicPlayer_smartHome":
//音乐技能
break;
default:
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}