ESP32S3接入百度在线语音识别
ESP32S3接入百度在线语音识别
Author: kkl
一、概述
使用ESP32S3接入百度智能云实现在线语音识别,记录中间遇到的问题和实现流程。
环境
- 主控:ESP32S3N16R8
- 平台:Arduino + PlatformIO + VScode
二、步骤
- 在百度智能云控制端选择
语音识别
并创建应用获取API Key
和Secret Key
- 根据创建应用生成的
API Key
和Secret Key
来获取access_token
- 采集音频数据,打包数据,通过http协议将打包的数据(payload)POST请求发送语音识别的API上
- 接收返回的数据(response)
三、实现
1. 创建语音识别应用
登录百度智能云的云账号,选择语音识别,创建一个新应用。(注意:分清楚百度账号还是云账号,这两个不一样的)
百度智能云:https://login.bce.baidu.com/?redirect=https%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F#/ai/speech/app/list
2. 根据创建应用生成的API Key和Secret Key来获取access_token
创建好应用,在应用列表里会出现你刚刚创建的应用,当然API Key
和Secret Key
也有啦
有了API Key
和Secret Key
,下面我们可以在ESP32S3上进行GET请求得到access_token的代码!
1 |
|
请求成功会返回如下数据,我们主要关注access_token
:
1 |
|
access_token
对应的值就是可用的token,每次申请的token
有效期限为30天,过期就需要重新申请。所以咱定时更新access_token
就行,不用每次调用语音识别都申请一遍。
3. 采集数据,通过POST请求发送到语音识别API上
数据上传POST的方式有两种:JSON格式和RAW格式。这里我们使用JSON格式,下图为JSON格式上传的一些必要的参数说明:
字段名 | 类型 | 可需 | 描述 |
---|---|---|---|
format | String | 必填 | 语音文件的格式,pcm/wav/amr/m4a。不区分大小写。推荐pcm文件! |
rate | int | 必填 | 采样率,16000、8000,固定值 |
channel | int | 必填 | 声道数,仅支持单声道,请填固定值1 |
cuid | String | 必填 | 用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器MAC地址或IMEI码,长度为60字符以内。 |
token | String | 必填 | 开放平台获取到的开发者[access_token] |
dev_pid | int | 选填 | 不填写lan参数生效,都不填写就默认1537(普通话,输入法模型) |
lm_id | int | 选填 | 自训练平台模型id,填dev_id = 8001 或 8002 生效 |
lan | String | 选填,废弃参数 | 历史兼容参数,已不再使用 |
speech | String | 必填 | 本地语音文件的二进制语音数据,需要进行 base64 编码,与len参数一起使用 |
len | int | 必填 | 本地语音文件的字节数,单位是字节(byte) |
图中对数据类型和内容说的很明确了,只需要按照这个格式打包好数据然后发送就行,下面是ESP32S3的具体实现代码。
1 |
|
POST发送数据有一个固定头部:Content-Type:application/json
,POST前需要设置一下,代码中已经有展示。
4. 接收数据
在上一步代码中实现了接收数据,这里列一下返回的数据:
1 |
|
- 数据发送成功则会返回正确的识别数据,当然声音信号不好时返回的语音识别也会不准确。
- 谨记,返回的语音识别结果是
UTF-8
方式编码,所以代码的编码最好也改为UTF-8
编码格式。
四、总结
- 百度智能云的语音识别服务是可以免费领取到一定使用次数的,15万次,足够我们测试使用,记得开始测试前先领取一下,不然会出现返回
报错:{'err_msg': 'request pv too much', 'err_no': 3305, 'sn': '876137091191590632079' }
,报错原因多半是免费次数没领取或者用完了要开通付费功能。
鸣谢
项目教程:https://blog.csdn.net/wojueburenshu/article/details/119244390
ESP32S3接入百度在线语音识别
https://zhangkeliang0627.github.io/2024/03/24/ESP32S3接入百度在线语音识别/README/