Android studio 将语音识别接入AI

介绍

        本文章主要实现的功能和作用,实现将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语音助手。


 

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中实现语音识别,可以使用 Android 提供的 SpeechRecognizer 类。下面是一个简单的示例代码,演示如何通过语音输入获取文本: 1. 在你的 Android 项目中,打开 `build.gradle` 文件,并确保以下依赖项已添加到 `dependencies` 部分: ```groovy implementation 'com.android.support:support-v4:29.0.0' ``` 2. 创建一个新的 Activity 或在现有的 Activity 中添加以下代码: ```java import android.content.Intent; import android.speech.RecognizerIntent; import android.speech.SpeechRecognizer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private Button startBtn; private TextView resultTextView; private SpeechRecognizer speechRecognizer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startBtn = findViewById(R.id.start_btn); resultTextView = findViewById(R.id.result_textview); speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); startBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startSpeechRecognition(); } }); } private void startSpeechRecognition() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); // 设置识别语言为英语,可以根据需要调整 speechRecognizer.setRecognitionListener(new RecognitionListener() { @Override public void onReadyForSpeech(Bundle params) { // 准备开始说话 } @Override public void onBeginningOfSpeech() { // 开始说话 } @Override public void onRmsChanged(float rmsdB) { // 音量变化 } @Override public void onEndOfSpeech() { // 说话结束 } @Override public void onError(int error) { // 发生错误 } @Override public void onResults(Bundle results) { ArrayList<String> resultData = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); if (resultData != null && resultData.size() > 0) { String recognizedText = resultData.get(0); resultTextView.setText(recognizedText); } } @Override public void onPartialResults(Bundle partialResults) { // 部分识别结果 } @Override public void onEvent(int eventType, Bundle params) { // 其他事件 } }); speechRecognizer.startListening(intent); } } ``` 3. 在你的布局文件 `activity_main.xml` 中添加以下代码: ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/start_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Recognition" /> <TextView android:id="@+id/result_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/start_btn" android:layout_marginTop="16dp" /> </RelativeLayout> ``` 这样,当你点击 "Start Recognition" 按钮时,将会启动语音识别,并将识别出的文本显示在 TextView 中。 请注意,为了在 Android 设备上进行语音识别,你需要连接到互联网并且设备上安装了相应的语音识别引擎。此外,在 AndroidManifest.xml 文件中,你需要添加相应的权限: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" /> ``` 希望这对你有帮助!如果你有其他问题,请随时问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值