android开发-百度语音识别Android SDK的简单使用

android开发-百度语音识别Android SDK的简单使用,第1张

android开发-百度语音识别Android SDK的简单使用

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:hint=“请点击开始录音”

app:layout_constraintEnd_toEndOf=“parent”

app:layout_constraintStart_toStartOf=“parent”

app:layout_constraintTop_toTopOf=“parent” />

android:id="@+id/btn_start"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“开始录音”

app:layout_constraintEnd_toStartOf="@+id/edittext"

app:layout_constraintTop_toTopOf="@+id/btn_stop" />

android:id="@+id/btn_stop"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginTop=“116dp”

android:text=“停止录音”

app:layout_constraintStart_toEndOf="@+id/edittext"

app:layout_constraintTop_toTopOf=“parent” />

试运行看看实际效果

②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 toApplyList = new ArrayList();

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);

}

}

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

// 此处为android 6.0以上动态授权的回调,用户自行实现。

}

③初始化控件与语音识别的核心SDK

protected EditText txtResult;//识别结果

protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开

protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容

private EventManager asr;//语音识别核心库

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);

}

});

}

④在onCreate方法中调用

@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方法

}

此时会有错误提示,因为我们还没有实现EventListener这个借口,接下来我们就实现这个接口

⑤实现EventListener接口,要注意这个接口是百度的这个

实现接口的onEvent方法

@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));

}

}

}

}

因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果

⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试与USB安装,不同手机的开启方法不同,自己上网查一下就好。

将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可

运行测试

大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。

参考文档:

csdn:Android百度语音识别

百度官方技术文档:语音技术

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5693036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存