评论

收藏

[Android] Android使用百度语音识别api代码实现。

移动开发 移动开发 发布于:2021-09-15 20:14 | 阅读数:287 | 评论:0

第一步
① 创建平台应用
点击百度智能云进入,没有账号的可以先注册账号,这里默认都有账号了,然后登录。
然后左侧导航栏点击找到语音技术
然后会进入一个应用总览页面,
然后点击创建应用
立即创建
点击查看应用详情
这几个值都是等下项目中要用的,请注意,最好是复制粘贴,不要手打,上图中有一个下载SDK,点击进入下载页面,第一个就是
点击下载到本地,下载之后是一个压缩文件,解压之后先不用管它,
第二步
然后在Android Studio里面创建一个项目
② 创建Android项目并配置。包名填之前创建应用时填的包名
将下载的SDK中的core复制到你项目的app同级目录下,
打开core中的src/main/AndroidManifest.xml
在里面修改成你的apiid ,appid,secretid
第三步
示例代码:
MainActivity.java
package com.yyz.asrdemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.speech.asr.SpeechConstant;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity implements EventListener {
  protected EditText txtResult;//识别结果
  protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开
  protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容
  private EventManager asr;//语音识别核心库

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    initPermission();
    //初始化EventManager对象
    asr = EventManagerFactory.create(this, "asr");
    //注册自己的输出事件类
    asr.registerListener(this); //  EventListener 中 onEvent方法
  }
  /**
   * android 6.0 以上需要动态申请权限
   */
  private void initPermission() {
    String permissions[] = {Manifest.permission.RECORD_AUDIO,
        Manifest.permission.ACCESS_NETWORK_STATE,
        Manifest.permission.INTERNET,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    };
    ArrayList<String> toApplyList = new ArrayList<String>();
    for (String perm : permissions) {
      if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
        toApplyList.add(perm);
        //进入到这里代表没有权限
      }
    }
    String tmpList[] = new String[toApplyList.size()];
    if (!toApplyList.isEmpty()) {
      ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
    }
  }
  /**
   * 权限申请回调,可以作进一步处理
   * @param requestCode
   * @param permissions
   * @param grantResults
   */
  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    // 此处为android 6.0以上动态授权的回调,用户自行实现。
  }
  /**
   * 初始化控件
   */
  private void initView() {
    txtResult = (EditText) findViewById(R.id.edittext);
    startBtn = (Button) findViewById(R.id.btn_start);
    stopBtn = (Button) findViewById(R.id.btn_stop);
    startBtn.setOnClickListener(new View.OnClickListener() {//点击开始按钮
      @Override
      public void onClick(View v) {
        asr.send(SpeechConstant.ASR_START, null, null, 0, 0);
      }
    });
    stopBtn.setOnClickListener(new View.OnClickListener() {//点击停止按钮
      @Override
      public void onClick(View v) {
        asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
      }
    });
  }
  /**
   * 自定义输出事件类 EventListener 回调方法
   */
  @Override
  public void onEvent(String name, String params, byte[] data, int offset, int length) {
    if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
      // 识别相关的结果都在这里
      if (params == null || params.isEmpty()) {
        return;
      }
      if (params.contains(""final_result"")) {
        // 一句话的最终识别结果
        String regrex = "\\[(.*?),";  //使用正则表达式抽取我们需要的内容
        Pattern pattern = Pattern.compile(regrex);
        Matcher matcher = pattern.matcher(params);
        if (matcher.find()) {
          int a  = matcher.group(0).indexOf("[");
          int b  = matcher.group(0).indexOf(",");
          txtResult.setText(matcher.group(0).substring(a+2,b-3));
        }
      }
    }
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    //发送取消事件
    asr.send(SpeechConstant.ASR_CANCEL, "{}", null, 0, 0);
    //退出事件管理器
    // 必须与registerListener成对出现,否则可能造成内存泄露
    asr.unregisterListener(this);
  }
}
activity_main.xml
<?xml version="1.0" encoding="UTF-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout tools:context=".MainActivity" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android">
<EditText android:layout_height="wrap_content" android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:hint="请点击开始录音" android:id="@+id/edittext"/>
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="@+id/btn_stop" android:id="@+id/btn_start" app:layout_constraintEnd_toStartOf="@+id/edittext" android:text="开始录音"/>
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="parent" android:id="@+id/btn_stop" android:text="停止录音" app:layout_constraintStart_toEndOf="@+id/edittext" android:layout_marginTop="116dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
跑起来!!


   
   
   
                        

关注下面的标签,发现更多相似文章