介绍
本文章主要实现的功能和作用,**实现将AI接入语音助手,即模拟实现一个简单的类似与小艺(华为语音助手)一样的语音助手,**当然此小艺非彼小艺(低配)。
SDK下载
**步骤1**.打开该链接https://aiui.xfyun.cn/solution/mobile 进入后注册账号,下载语音AI的sdk,
** 步骤2.**移植demo中的程序到自身程序
程序移植
具体操作只讲程序移植部分,sdk的下载官方有具体指导。
步骤1.创建自己的项目活动
**步骤2.**解压sdk包,了解需要的资源,解压后的文件如下图,其中的assets中有我们的配置资源的内容
其中cfg和vad是我们用到的资源(assets)
其中arm64-v8a armeabi-7va是so库,AIUI.jar是jar包(libs)
**步骤3.**将下载好的demo中的文件进行移植,我箭头所指示的是需要添加的资源,没有箭头指示的不用添加,按照对应的位置和目录结构添加。
其中的两个so包尽量放在和java同级目录下,创建一个jniLibs目录,将包添加,完成上面的步骤后,便可以编写我们自己的代码。
程序编写
该部分讲解,如何使用代码进行程序的编写。代码编写的思路,创建一个AI对象,设置AI对象监听,唤醒AI对象。
首先,创建AI助手
//创建AIUIAgent
AIUIAgent mAIUIAgent = AIUIAgent.createAgent(context,getAIUIParams(),mAIUIListener);
其次,监听AI对象
private final AIUIListener mAIUIListener = new AIUIListener() {
@Override
public void onEvent(AIUIEvent event) {
switch (event.eventType) {
//唤醒事件
case AIUIConstant.EVENT_WAKEUP:
{
break;
}
//结果事件(包含听写,语义,离线语法结果)
case AIUIConstant.EVENT_RESULT:
{
break;
}
//休眠事件
case AIUIConstant.EVENT_SLEEP:
{
break;
}
// 状态事件
case AIUIConstant.EVENT_STATE: {
mAIUIState = event.arg1;
if (AIUIConstant.STATE_IDLE == mAIUIState) {
// 闲置状态,AIUI未开启
} else if (AIUIConstant.STATE_READY == mAIUIState) {
// AIUI已就绪,等待唤醒
} else if (AIUIConstant.STATE_WORKING == mAIUIState) {
// AIUI工作中,可进行交互
}
} break;
//错误事件
case AIUIConstant.EVENT_ERROR:
{
break;
}
}
}
}
最后,唤醒AI助手
//唤醒aiui请求
private void wakeup_request() {
System.out.println("进入唤醒请求");
if (null == mAIUIAgent) {
Show_Toast.Mesg(VoiceInteraction.this,"AIUIAgent为空,请先创建");
return;
}
if (checkCallingOrSelfPermission(Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO});
return;
}
// 先发送唤醒消息,改变AIUI内部状态,只有唤醒状态才能接收语音输入
// 默认为oneshot模式,即一次唤醒后就进入休眠。可以修改aiui_phone.cfg中speech参数的interact_mode为continuous以支持持续交互
if (!mIsWakeupEnable) {
AIUIMessage wakeupMsg = new AIUIMessage(AIUIConstant.CMD_WAKEUP, 0, 0, "", null);
mAIUIAgent.sendMessage(wakeupMsg);
}
// 打开AIUI内部录音机,开始录音。若要使用上传的个性化资源增强识别效果,则在参数中添加pers_param设置
// 个性化资源使用方法可参见http://doc.xfyun.cn/aiui_mobile/的用户个性化章节
// 在输入参数中设置tag,则对应结果中也将携带该tag,可用于关联输入输出
String params = "sample_rate=16000,data_type=audio,pers_param={\"uid\":\"\"},tag=audio-tag";
AIUIMessage startRecord = new AIUIMessage(AIUIConstant.CMD_START_RECORD, 0, 0, params,
null);
mAIUIAgent.sendMessage(startRecord);
Show_Toast.Mesg(VoiceInteraction.this,"huanxing");
System.out.println("唤醒需求已经fasong");
}
在监听中获取对应的AI数据处理结果
其中的创建部分具体代码如下
private void CreateAIHelper() {
if (checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE});
return;
}
//设备信息设置
String deviceId = DeviceUtils.getDeviceId(this);
AIUISetting.setNetLogLevel(AIUISetting.LogLevel.debug);
AIUISetting.setSystemInfo(AIUIConstant.KEY_SERIAL_NUM, deviceId);
// 检查是否具有写外部存储的权限
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Request the permission
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
// Permission has already been granted
// Perform the operation that requires this permission
System.out.println("程序具有写外部存储权限");
}
// 创建AIUIAgent
mAIUIAgent = AIUIAgent.createAgent(this, getAIUIParams(), mAIUIListener);
if (mAIUIAgent != null) {
// AIUIAgent创建成功,执行您的操作
// ...
System.out.println("创建成功");
} else {
// 创建失败,进行错误处理
// ...
System.out.println("创建失败");
}
}
private String getAIUIParams(){
String params = FucUtil.readAssetFile(this, "cfg/aiui_phone.cfg", "utf-8");
try {
JSONObject paramsJson = new JSONObject(params);
params = paramsJson.toString();
} catch (JSONException e) {
e.printStackTrace();
}
return params;
}
其中的FucUtil等工具类的代码可以在demo中找寻到,将这些需要的类复制即可。
经上述部分即可使用一个AI语音助手。
版权归原作者 就就就是你啊啊啊 所有, 如有侵权,请联系我们删除。