开发者学堂课程【智能语音对话机器人训练营课程:智能语音交互-语音识别介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/908/detail/14394
智能语音交互-语音识别介绍
目录:
一、语音识别结构示意图
二、一句话识别
三、实时语音识别
四、录音文件识别
语音识别就是将一段音频数据转换为文字数据
一、语音识别结构示意图
音频格式
实时音频格式
Pcm/pcm
Wav
Opus/opu
Speex
离线文件格式
Mp3
Aac
Mp4
M4a
Mkv
阿里云的智能语音交互提供的三种
录音文件识别
实时语音识别
一句话识别
二、一句话识别
对时长较短(一分钟以内)的语音进行识别,适用于较短的语音交互场景,如语音搜索、语音指令、语音短消息等可集战在各类 App 、智能家电、智能助手等产品中。
语音搜索
支持各种场景下的语音技索,比如地图导航、浏览器搜索等。可以集成
到任何形式的于机应用中,最大限度的解放双手。
语音指令
通过语音命令控制智能设备,实现快捷便利的操作。比如控制空调的开
关、电视的换台等。可以朱成到智能家居等设备中。
语音短消息
通过语音发送或者接收短消息。在不方便打字的情况下实现快速便捷的
短信操作,比如音频短信转文字。
接口说明
对一分钟内的短语音进行识别,适用于对话聊天、控制口令、语音输入法、语音搜索等较短的语音识别场景。
支持的输入格式:PCM 编码(无压缩的 PCM 或 WAV 文件)、WAV、OPUS、AMR 格式单声道( mono )音频文件,16bit采样位数。
音频采样率:8000Hz/16000Hz。
时长限制:语音数据时长不能超过60s。
音频文件大小:不超过2 MB。
设置返回结果:
是否返回中间识别结果
是否在后处理中添加标点
是否将中文数字转为阿拉伯数字输出
设置多语言识别:在管控台编辑项目中进行模型选择,详情请参见管理项目
交互流程
鉴权
客户端与服务端建立 WebSocket 连接时,使用 Token 进行鉴权。关于 Token 获取请参见获取 Token
开始识别
客户端发起一句话识别请求,服务端确认请求有效。
其中在请求消息中需要进行参数设置,各参数由 SDK 中 SpeechRecognizer 对象的相关 set 方法设置,各参数含义如下
.发送数据
循环发送语音数据,持续接收识别结果。
若 enable_intermediate_result 设置为 true, 服务端会持续多次返回 RecognitionResultChanged 消息,即中间识别结果,
示例如下:
北京的天
北京的天气
服务端返回的响应消息:
{
"header": {
"namespace": "SpeechRecognizer",
"name": "RecognitionResultChanged",
"status": 20000000,
"message_id": "e06d2b5d50ca40d5a50d4215c7c8****",
"task_id": "4c3502c7a5ce4ac3bdc488749ce4****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"result": "北京的天气"
}
}
header 对象参数说明:
参数 |
类型 |
说明 |
namespace |
String |
消息所属的命名空间。 |
name |
String |
消息名称,RecognitionResultChanged 表示获取到中间识别结果。 |
status |
Integer |
状态码,表示请求是否成功, 见服务状态码。 |
status_text |
String |
状态消息。 |
task_id |
String |
任务全局唯一 ID,请记录该值, 便于排查问题。 |
message_id |
String |
本次消息的 ID。 |
payload 对象参数说明:
参数 |
类型 |
说明 |
result |
String |
中间识别结果。 |
若 enable_intermediate_result 设置为 false , 此步骤服务端不返回任何消息。
header 对象参数说明
参数 |
类型 |
说明 |
namespace |
String |
消息所属的命名空间。 |
name |
String |
消息名称,RecognitionCompleted表示识别完成。 |
status |
Integer |
状态码,表示请求是否成功,见服务状态码。 |
status_text |
String |
状态消息。 |
task_id |
String |
任务全局唯一ID,请记录该值,便于排查问题。 |
message_id |
String |
本次消息的ID,由SDK自动生成。 |
payload 对象参数说明:
参数 |
类型 |
说明 |
result |
String |
一句话识别的结果。 |
三、实时语音识别
对不限时长的音频流做实时识别,达到"边说边出文字"的效彩内置智能断句,可提供每句话开始结束时间。可用于视频实时直播字幕、实时会议记录、实时法庭庭审记录、智能语音助手等场景。
适用场景
视频实时直播字母
现场演讲场景、直播场景下,将视频中的音频实时转写成字幕。还可以辅助视频平台进行内容合规治理.
实时会议记录
将会议中的音频实时转换成文字,特别适用于电视会议等远距离场景。
实时法庭审记录
将庭审各方在庭审过程中的语音转变为文字,供各方在庭审页面上查看,减少书记员的工作。
实时客服记录
将呼叫中心的语音实时的转写到文字,可实现实时质检、服务风险管理等。
接口说明
对长时间的语音数据流进行识别,适用于会议演讲、视频直播等长时间不间断识别的场景。
使用须知
支持的输入格式:PCM(无压缩的 PCM 或 WAV 文件)、16 bit采样位数、单声道(mono)。
支持的音频采样率:8000 Hz和16000 Hz。
支持设置返回结果:是否返回中间识别结果,在后处理中添加标点,将中文数字转为阿拉伯数字输出。
支持设置多语言识别:在控制台编辑项目中进行模型选择,详情请参见管理项目。
服务地址
访问类型 |
说明 |
URL |
外网访问 |
所有服务器均可使用外网访问URL(SDK中默认设置了外网访问URL)。 |
wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1 |
上海 ECS 内网访问 |
使用阿里云上海ECS(即 ECS 地域为华东2(上海)),可使用内网访问URL。ECS的经典网络不能访问 AnyTunnel ,即不能在内网访问语音服务;如果希望使用AnyTunnel ,需要创建专有网络在其内部访问。 说明 使用内网访问方式,将不产生 ECS 实例的公网流量费用。 关于 ECS 的网络类型请参见网络类型。 |
ws://nls-gateway.cn-shanghai-internal.aliyuncs.com:80/ws/v1 |
交互流程
1. 鉴权
客户端与服务端建立 WebSocket 连接时,使用 Token 进行鉴权。关于 Token 获取请参见获取 Token 。
2. 开始识别
客户端发起请求,服务端确认请求有效。其中在请求消息中需要进行参数设置,各参数由 SDK 中 SpeechTranscriber 对象的 set 方法设置,
各参数含义如下:
参数 |
类型 |
是否必选 |
说明 |
appkey |
String |
是 |
管控台创建的项目appkey。 |
format |
String |
否 |
音频编码格式,默认是PCM(无压缩的PCM文件或WAV文件),16bit采样位数的单声道。 |
sample_rate |
Integer |
否 |
音频采样率,默认是16000Hz,根据音频采样率在管控台对应项目中配置支持该采样率及场景的模型。 |
enable_intermediate_result |
Boolean |
否 |
是否返回中间识别结果,默认是False。 |
enable_punctuation_prediction |
Boolean |
否 |
是否在后处理中添加标点,默认是False。 |
enable_inverse_text_normalization |
Boolean |
否 |
是否在后处理中执行 ITN ,设置为 True 时,中文数字将转为阿拉伯数字输出,默认是 False。 说明 不对词信息进行 ITN转换。 |
customization_id |
String |
否 |
自学习模型 ID。 |
vocabulary_id |
String |
否 |
定制泛热词 ID。 |
max_sentence_silence |
Integer |
否 |
语音断句检测阈值,静音时长超过该阈值会被认为断句,参数范围200ms~2000ms,默认值800ms。 |
enable_words |
Boolean |
否 |
是否开启返回词信息,默认是 False。 |
enable_ignore_sentence_timeout |
Boolean |
否 |
是否忽略实时识别中的单句识别超时,默认是 False。 |
disfluency |
Boolean |
否 |
是否对识别文本进行顺滑(去除语气词,重复说等),默认是 False。 |
speech_noise_threshold |
Float |
否 |
噪音参数阈值,参数范围:[-1,1]。取值说明如下: 取值越趋于-1,噪音被判定为语音的概率越大。 取值越趋于+1,语音被判定为噪音的概率越大。 说明 该参数属高级参数,调整需慎重并重点测试。 |
enable_semantic_sentence_detection |
Boolean |
否 |
是否开启语义断句,可选,默认是False。 |
3. 接收识别结果
客户端循环发送语音数据,持续接收识别结果:
SentenceBegin 事件表示服务端检测到了一句话的开始。实时语音识别服务的智能断句功能会判断出一句话的开始与结束,举例如下
{
"header": {
"namespace": "SpeechTranscriber",
"name": "SentenceBegin",
"status": 20000000,
"message_id": "a426f3d4618447519c9d85d1a0d1****",
"task_id":
"5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"index": 1,
"time": 0
}
}
header 对象参数说明:
参数 |
类型 |
说明 |
namespace |
String |
消息所属的命名空间。 |
name |
String |
消息名称,SentenceBegin表示一个句子的开始。 |
status |
Integer |
状态码,表示请求是否成功,见服务状态码。 |
status_text |
String |
状态消息。 |
task_id |
String |
任务全局唯一ID,请记录该值,便于排查问题。 |
message_id |
String |
本次消息的ID。 |
payload 对象参数说明:
参数 |
类型 |
说明 |
index |
Integer |
句子编号,从1开始递增。 |
time |
Integer |
当前已处理的音频时长,单位是毫秒 |
TranscriptionResultChanged 事件表示识别结果发生了变化。仅当 enable_intermediate_result 取值为 true 时会多次返回此消息,即一句话的中间识别结果,举例如下:
{
"header": {
"namespace": "SpeechTranscriber",
"name": "TranscriptionResultChanged",
"status": 20000000,
"message_id": "dc21193fada84380a3b6137875ab****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"index": 1,
"time": 1835,
"result": "北京的天",
"confidence": 1.0,
"words": [{
"text": "北京",
"startTime": 630,
"endTime": 930
}, {
"text": "的",
"startTime": 930,
"endTime": 1110
}, {
"text": "天",
"startTime": 1110,
"endTime": 1140
}]
}
}
header 对象参数同上述表格说明,
name 为 TranscriptionResultChanged :表示句子的中间识别结果。
payload 对象参数说明:
参数 |
类型 |
说明 |
index |
Integer |
句子编号,从1开始递增。 |
time |
Integer |
当前已处理的音频时长,单位是毫秒。 |
result |
String |
当前句子的识别结果。 |
words |
List< Word > |
当前句子的词信息,需要将enable_words设置为true。 |
confidence |
Double |
当前句子识别结果的置信度,取值范围:[0.0,1.0]。值越大表示置信度越高 |
SentenceEnd 事件表示服务端检测到了一句话的结束,并附带返回该句话的识别结果,举例如下:
{
"header": {
"namespace": "SpeechTranscriber",
"name": "SentenceEnd",
"status": 20000000,
"message_id": "c3a9ae4b231649d5ae05d4af36fd****",
"task_id": "5ec521b5aa104e3abccf3d361822****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"index": 1,
"time": 1820,
"begin_time": 0,
"result": "北京的天气。",
"confidence": 1.0,
"words": [{
"text": "北京",
"startTime": 630,
"endTime": 930
}, {
"text": "的",
"startTime": 930,
"endTime": 1110
}, {
"text": "天气",
"startTime": 1110,
"endTime": 1380
}]
}
}
header 对象参数同上述表格说明,name 为 SentenceEnd 表示识别到句子的结束。payload 对象参数说明:
参数 |
类型 |
说明 |
index |
Integer |
句子编号,从1开始递增。 |
time |
Integer |
当前已处理的音频时长,单位是毫秒。 |
begin_time |
Integer |
当前句子对应的SentenceBegin事件的时间,单位是毫秒。 |
result |
String |
当前的识别结果。 |
words |
List< Word > |
当前句子的词信息,需要将enable_words设置为true。 |
confidence |
Double |
当前句子识别结果的置信度,取值范围:[0.0,1.0]。值越大表示置信度越高。 |
Word 对象参数说明:
参数 |
类型 |
说明 |
text |
String |
文本。 |
startTime |
Integer |
词开始时间,单位为毫秒。 |
endTime |
Integer |
词结束时间,单位为毫秒。 |
4. 结束识别
通知服务端语音数据发送完成,服务端识别结束后通知客户端识别完毕
四、录音文件识别
提交录音文件识别请求后,商业用户的转写任务可在6小时之内完成识别并返回识别文本,一次性上传大规模数据(半小时内上传起过5饿小时时长的录音)的除外.有大规模数据转写需求的客户,可与售前专家另行沟通。免费用户的转写任务可在24小时内完成识别并返回识别文本。
接口说明
录音文件识别是针对已经录制完成的录音文件,进行离线识别的服务。录音文件识别是非实时的,识别的文件需要提交基于 HTTP 可访问的 URL 地址,不支持提交本地文件。
使用限制
支持单轨/双轨
的.wav、.mp3、.m4a、.wma、.aac、.ogg、.amr、.flac格式录音文件识别。
文件大小需控制在512 MB以下。
需要识别的录音文件必须存放在某服务上,可以通过 URL 访问。
推荐使用阿里云 OSS :如果 OSS 中文件访问权限为公开,可参见公共读 Object ,获取文件访问链接;如果 OSS 中文件访问权限为私有,可参见私有 Object ,通过 SDK 生成有有效时间的访问链接。
可以把录音文件存放在自行搭建的文件服务器,提供文件下载。请保证 HTTP 的响应头( Header )中 Content-Length 的长度值和 Body 中数据的真实长度一致,否则会导致下载失败.
上传的录音文件 URL 的访问权限需要设置为公开,URL 中只能使用域名不能使用IP地址、不可包含空格,请尽量避免使用中文。
录音文件识别属于离线识别服务,对于并发数没有限制,对于 QPS(Queries Per Second)的限制如下:
POST 方式的录音文件识别请求调用接口,用户级别 QPS 限制为200。
GET 方式的录音文件识别结果查询接口,用户级别 QPS 限制为500。
免费用户每日可识别不超过2小时时长的录音文件。
提交录音文件识别请求后,免费用户的识别任务在24小时内完成并返回识别文本; 付费用户的识别任务在6小时内完成并返回识别文本。识别结果在服务端可保存72小时。
智能分轨功能只支持8k单通道的语音。
支持调用方式:轮询方式/回调方式。
支持语言模型定制。更多信息,请参见语言模型定制。
支持热词。更多信息,请参见热词。
支持汉语普通话、方言、欧美英语等多种模型识别。查看支持的方言和语种,请参见语音识别服务支持的方言模型和语种都有哪些?