博舍

语音识别 实时语音识别(websocket) 语音识别转文字服务

语音识别 实时语音识别(websocket)

说明:

此接口为API2.0版本,在参数风格、错误码等方面有区别于API3.0版本,请知悉。

接口描述

本接口服务采用websocket协议,对实时音频流进行识别,同步返回识别结果,达到“边说边出文字”的效果。在使用该接口前,需要开通语音识别服务,并进入 API密钥管理页面 新建密钥,生成AppID、SecretID和SecretKey,用于API调用时生成签名,签名将用来进行接口鉴权。

接口要求

集成实时语音识别API时,需按照以下要求。

内容说明语言种类支持中文普通话、粤语、英语、韩语、日语、泰语、印度尼西亚语、越南语、马来语、菲律宾语、葡萄牙语、土耳其语、上海话、四川话、武汉话、贵阳话、昆明话、西安话、郑州话、太原话、兰州话、银川话、西宁话、南京话、合肥话、南昌话、长沙话、苏州话、杭州话、济南话、天津话、石家庄话、黑龙江话、吉林话、辽宁话。可通过接口参数engine_model_type设置对应语言类型支持行业通用、金融、游戏、教育、医疗音频属性采样率:16000Hz或8000Hz采样精度:16bits声道:单声道(mono)音频格式pcm、wav、opus、speex、silk、mp3、m4a、aac请求协议wss协议请求地址wss://asr.cloud.tencent.com/asr/v2/?{请求参数}接口鉴权签名鉴权机制,详见签名生成响应格式统一采用JSON格式数据发送建议每40ms发送40ms时长(即1:1实时率)的数据包,对应pcm大小为:8k采样率640字节,16k采样率1280字节音频发送速率过快超过1:1实时率或者音频数据包之间发送间隔超过6秒,可能导致引擎出错,后台将返回错误并主动断开连接并发限制默认单账号限制并发数为200路,如您有提高并发限制的需求,请前往购买。接口调用流程

接口调用流程分为两个阶段:握手阶段和识别阶段。两阶段后台均返回textmessage,内容为json序列化字符串,以下是格式说明:

字段名类型描述codeInteger状态码,0代表正常,非0值表示发生错误messageString错误说明,发生错误时显示这个错误发生的具体原因,随着业务发展或体验优化,此文本可能会经常保持变更或更新voice_idString音频流唯一id,由客户端在握手阶段生成并赋值在调用参数中message_idString本message唯一idresultResult最新语音识别结果finalInteger该字段返回1时表示音频流全部识别结束

其中识别结果Result结构体格式为:

字段名类型描述slice_typeInteger识别结果类型:0:一段话开始识别1:一段话识别中,voice_text_str为非稳态结果(该段识别结果还可能变化)2:一段话识别结束,voice_text_str为稳态结果(该段识别结果不再变化)根据发送的音频情况,识别过程中可能返回的slice_type序列有:0-1-2:一段话开始识别、识别中(可能有多次1返回)、识别结束0-2:一段话开始识别、识别结束2:直接返回一段话完整的识别结果注意:如果需要0和2配对返回,需要设置filter_empty_result=0(slice_type=0时,识别结果可能为空,默认是不返回空识别结果的)。一般在外呼场景需要配对返回,通过slice_type=0来判断是否有人声出现。indexInteger当前一段话结果在整个音频流中的序号,从0开始逐句递增start_timeInteger当前一段话结果在整个音频流中的起始时间end_timeInteger当前一段话结果在整个音频流中的结束时间voice_text_strString当前一段话文本结果,编码为UTF8word_sizeInteger当前一段话的词结果个数word_listWordArray当前一段话的词列表,Word结构体格式为:word:String类型,该词的内容start_time:Integer类型,该词在整个音频流中的起始时间end_time:Integer类型,该词在整个音频流中的结束时间stable_flag:Integer类型,该词的稳态结果,0表示该词在后续识别中可能发生变化,1表示该词在后续识别过程中不会变化握手阶段请求格式

握手阶段,客户端主动发起websocket连接请求,请求URL格式为:

wss://asr.cloud.tencent.com/asr/v2/?{请求参数}其中需替换为腾讯云注册账号的AppID,可通过API密钥管理页面 获取,{请求参数}格式为key1=value2&key2=value2...(key和value都需要进行urlencode)

参数说明:

参数名称必填类型描述secretid是String腾讯云注册账号的密钥SecretId,可通过 API密钥管理页面 获取timestamp是Integer当前UNIX时间戳,单位为秒。如果与当前时间相差过大,会引起签名过期错误expired是Integer签名的有效期截止时间UNIX时间戳,单位为秒。expired必须大于timestamp且expired -timestamp 小于90天nonce是Integer随机正整数。用户需自行生成,最长10位engine_model_type是String引擎模型类型电话场景:8k_zh:中文电话通用;8k_zh_finance:中文电话金融;8k_en:英文电话通用;

非电话场景:

16k_zh:中文通用;16k_zh-PY:中英粤;16k_zh-TW:中文繁体;16k_zh_edu:中文教育;16k_zh_medical:中文医疗;16k_zh_court:中文法庭;16k_yue:粤语;16k_en:英文通用;16k_en_game:英文游戏;16k_en_edu:英文教育;16k_ko:韩语;16k_ja:日语;16k_th:泰语;16k_id:印度尼西亚语;16k_vi:越南语;16k_ms:马来语;16k_fil:菲律宾语;16k_pt:葡萄牙语;16k_tr:土耳其语;16k_ar:阿拉伯语;16k_zh_dialect:多方言,支持23种方言(上海话、四川话、武汉话、贵阳话、昆明话、西安话、郑州话、太原话、兰州话、银川话、西宁话、南京话、合肥话、南昌话、长沙话、苏州话、杭州话、济南话、天津话、石家庄话、黑龙江话、吉林话、辽宁话);voice_id是String音频流识别全局唯一标识,一个websocket连接对应一个,用户自己生成(推荐使用uuid),最长128位。voice_format否Int语音编码方式,可选,默认值为4。1:pcm;4:speex(sp);6:silk;8:mp3;10:opus(opus格式音频流封装说明);12:wav;14:m4a(每个分片须是一个完整的m4a音频);16:aacneedvad否Integer0:关闭vad,1:开启vad,默认为0。如果语音分片长度超过60秒,用户需开启vad(人声检测切分功能)hotword_id否String热词表id。如不设置该参数,自动生效默认热词表;如果设置了该参数,那么将生效对应的热词表reinforce_hotword否Integer热词增强功能。默认为0,0:不开启,1:开启。开启后(仅支持8k_zh,16k_zh),将开启同音替换功能,同音字、词在热词中配置。举例:热词配置“蜜制”并开启增强功能后,与“蜜制”同拼音(mizhi)的“秘制”、“蜜汁”等的识别结果会被强制替换成“蜜制”。因此建议客户根据自己的实际情况开启该功能。customization_id否String自学习模型id。如设置了该参数,将生效对应的自学习模型filter_dirty否Integer是否过滤脏词(目前支持中文普通话引擎)。默认为0。0:不过滤脏词;1:过滤脏词;2:将脏词替换为“*”filter_modal否Integer是否过滤语气词(目前支持中文普通话引擎)。默认为0。0:不过滤语气词;1:部分过滤;2:严格过滤filter_punc否Integer是否过滤句末的句号(目前支持中文普通话引擎)。默认为0。0:不过滤句末的句号;1:过滤句末的句号filter_empty_result否Integer是否回调识别空结果,默认为1。0:回调空结果;1:不回调空结果;注意:如果需要slice_type=0和slice_type=2配对回调,需要设置filter_empty_result=0。一般在外呼场景需要配对返回,通过slice_type=0来判断是否有人声出现。convert_num_mode否Integer是否进行阿拉伯数字智能转换(目前支持中文普通话引擎)。0:不转换,直接输出中文数字,1:根据场景智能转换为阿拉伯数字,3:打开数学相关数字转换。默认值为1word_info否Int是否显示词级别时间戳。0:不显示;1:显示,不包含标点时间戳,2:显示,包含标点时间戳。支持引擎8k_en、8k_zh、8k_zh_finance、16k_zh、16k_en、16k_ca、16k_zh-TW、16k_ja、16k_wuu-SH,默认为0vad_silence_time否Integer语音断句检测阈值,静音时长超过该阈值会被认为断句(多用在智能客服场景,需配合needvad=1使用),取值范围:240-2000(默认1000),单位ms,此参数建议不要随意调整,可能会影响识别效果,目前仅支持8k_zh、8k_zh_finance、16k_zh引擎模型noise_threshold否Float噪音参数阈值,默认为0,取值范围:[-1,1],对于一些音频片段,取值越大,判定为噪音情况越大。取值越小,判定为人声情况越大。慎用:可能影响识别效果signature是String接口签名参数hotword_list否String临时热词表,该参数用于提升热词识别准确率。单个热词规则:"热词|权重",不超过30个字符(最多10个汉字),权重1-10;临时热词表限制:多个热词用英文逗号分割,最多128个热词,参数示例:"腾讯云|10,语音识别|5,ASR|10";参数hotword_list与hotword_id区别:hotword_id:需要先在控制台或接口创建热词表,获得对应hotword_id传入参数来使用热词功能;hotword_list:每次请求时直接传入临时热词表来使用热词功能,云端不保留临时热词表;注意:如果同时传入了hotword_id和hotword_list,会优先使用hotword_list。input_sample_rate否Interge支持pcm格式的8k音频在与引擎采样率不匹配的情况下升采样到16k后识别,能有效提升识别准确率。仅支持:8000。如:传入8000,则pcm音频采样率为8k,当引擎选用16k_zh,那么该8k采样率的pcm音频可以在16k_zh引擎下正常识别。注:此参数仅适用于pcm格式音频,不传入值将维持默认状态,即默认调用的引擎采样率等于pcm音频采样率。

signature签名生成

对除signature之外的所有参数按字典序进行排序,拼接请求URL作为签名原文,这里以Appid=125922***,SecretId=*****Qq1zhZMN8dv0******为例拼接签名原文,则拼接的签名原文为:asr.cloud.tencent.com/asr/v2/125922***?engine_model_type=16k_zh&expired=1673494772&needvad=1&nonce=1673408372&secretid=*****Qq1zhZMN8dv0******×tamp=1673408372&voice_format=1&voice_id=c64385ee-3e5c-4fc5-bbfd-7c71addb35b0对签名原文使用SecretKey进行HmacSha1加密,之后再进行base64编码。例如对上一步的签名原文,SecretKey=*****SkqpeHgqmSz*****,使用HmacSha1算法进行加密并做base64编码处理:Base64Encode(HmacSha1("asr.cloud.tencent.com/asr/v2/125922***?engine_model_type=16k_zh&expired=1673494772&needvad=1&nonce=1673408372&secretid=*****Qq1zhZMN8dv0******×tamp=1673408372&voice_format=1&voice_id=c64385ee-3e5c-4fc5-bbfd-7c71addb35b0","*****SkqpeHgqmSz*****"))得到signature签名值为:G8jDQBRg1JfeBi/YnTjyjekxfDA=将signature值进行urlencode(必须进行URL编码,否则将导致鉴权失败偶现)后拼接得到最终请求URL为:wss://asr.cloud.tencent.com/asr/v2/1259228442?engine_model_type=16k_zh&expired=1592380492&filter_dirty=1&filter_modal=1&filter_punc=1&needvad=1&nonce=1592294092123&secretid=AKIDoQq1zhZMN8dv0psmvud6OUKuGPO7pu0r×tamp=1592294092&voice_format=1&voice_id=RnKu9FODFHK5FPpsrN&signature=HepdTRX6u155qIPKNKC%2B3U0j1N0%3DOpus音频流封装说明

压缩FrameSize固定640,即一次压缩640short,否则解压会失败。传到服务端可以是多帧的拼接组合,每一帧需满足下面格式。每一帧压缩数据封装如下:

OpusHead(4字节)帧数据长度(2字节)Opus一帧压缩数据opus长度len对应len长的opusdecodedata请求响应

客户端发起连接请求后,后台建立连接并进行签名校验,校验成功则返回code值为0的确认消息表示握手成功;如果校验失败,后台返回code为非0值的消息并断开连接。

{"code":0,"message":"success","voice_id":"RnKu9FODFHK5FPpsrN"}识别阶段

握手成功之后,进入识别阶段,客户端上传语音数据并接收识别结果消息。

上传数据

在识别过程中,客户端持续上传binarymessage到后台,内容为音频流二进制数据。建议每40ms发送40ms时长(即1:1实时率)的数据包,对应pcm大小为:8k采样率640字节,16k采样率1280字节。音频发送速率过快超过1:1实时率或者音频数据包之间发送间隔超过6秒,可能导致引擎出错,后台将返回错误并主动断开连接。音频流上传完成之后,客户端需发送以下内容的textmessage,通知后台结束识别。

{"type":"end"}接收消息

客户端上传数据的过程中,需要同步接收后台返回的实时识别结果,结果示例:

{"code":0,"message":"success","voice_id":"RnKu9FODFHK5FPpsrN","message_id":"RnKu9FODFHK5FPpsrN_11_0","result":{"slice_type":0,"index":0,"start_time":0,"end_time":1240,"voice_text_str":"实时","word_size":0,"word_list":[]}}{"code":0,"message":"success","voice_id":"RnKu9FODFHK5FPpsrN","message_id":"RnKu9FODFHK5FPpsrN_33_0","result":{"slice_type":2,"index":0,"start_time":0,"end_time":2840,"voice_text_str":"实时语音识别","word_size":0,"word_list":[]}}后台识别完所有上传的语音数据之后,最终返回final值为1的消息并断开连接。{"code":0,"message":"success","voice_id":"CzhjnqBkv8lk5pRUxhpX","message_id":"CzhjnqBkv8lk5pRUxhpX_241","final":1}识别过程中如果出现错误,后台返回code为非0值的消息并断开连接。{"code":4008,"message":"后台识别服务器音频分片等待超时","voice_id":"CzhjnqBkv8lk5pRUxhpX","message_id":"CzhjnqBkv8lk5pRUxhpX_241"}开发者资源SDKTencentCloudSpeechSDKforGoTencentCloudSpeechSDKforJavaTencentCloudSpeechSDKforC++TencentCloudSpeechSDKforPythonTencentCloudSpeechSDKforJSTencentCloudSpeechSDKforC#SDK调用示例Golang示例Java示例C++示例Python示例JS示例C#示例错误码数值说明4001参数不合法,具体详情参考message4002鉴权失败4003AppID服务未开通,请在控制台开通服务4004无可使用的免费额度4005账户欠费停止服务,请及时充值4006账号当前调用并发超限4007音频解码失败,请检查上传音频数据格式与调用参数一致4008客户端数据上传超时4009客户端连接断开4010客户端上传未知文本消息5000后台错误,请重试5001后台识别服务器识别失败,请重试5002后台识别服务器识别失败,请重试6001境外调用请单击腾讯云国际站开通服务。国内站用户请检查是否使用境外代理,如果使用请关闭。

语音识别转文字

活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理

活动时间:2020年8月12日-2020年9月11日

活动期间,华为云用户通过活动页面购买云服务,或使用上云礼包优惠券在华为云官网新购云服务,累计新购实付付费金额达到一定额度,可兑换相应的实物礼品。活动优惠券可在本活动页面中“上云礼包”等方式获取,在华为云官网直接购买(未使用年中云钜惠活动优惠券)或参与其他活动的订单付费金额不计入统计范围内;

活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理

活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理

活动时间:2020年8月12日-2020年9月11日

活动期间,华为云用户通过活动页面购买云服务,或使用上云礼包优惠券在华为云官网新购云服务,累计新购实付付费金额达到一定额度,可兑换相应的实物礼品。活动优惠券可在本活动页面中“上云礼包”等方式获取,在华为云官网直接购买(未使用年中云钜惠活动优惠券)或参与其他活动的订单付费金额不计入统计范围内;

活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理

活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理

活动时间:2020年8月12日-2020年9月11日

活动期间,华为云用户通过活动页面购买云服务,或使用上云礼包优惠券在华为云官网新购云服务,累计新购实付付费金额达到一定额度,可兑换相应的实物礼品。活动优惠券可在本活动页面中“上云礼包”等方式获取,在华为云官网直接购买(未使用年中云钜惠活动优惠券)或参与其他活动的订单付费金额不计入统计范围内;

活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理

语音转文本概述

你当前正在访问MicrosoftAzureGlobalEdition技术文档网站。如果需要访问由世纪互联运营的MicrosoftAzure中国技术文档网站,请访问https://docs.azure.cn。

什么是语音转文本?项目07/12/2023

本概述介绍了语音服务的语音转文本功能的优点和功能,该功能是Azure认知服务的一部分。语音转文本可用于将音频流实时或批量听录为文本。

注意

要比较实时和批量听录的定价,请参阅语音服务定价。

有关可用的语音转文本语言的完整列表,请参阅语言和语音支持。

实时语音转文本

使用实时语音转文本时,当从麦克风或文件中识别出语音时,会对音频进行听录。对于需要实时听录音频的应用程序,请使用实时语音转文本,例如:

实时会议的听录、描述文字或字幕联系中心代理助手听写语音代理发音评估

实时语音转文本是通过语音SDK和语音API提供的。

批量听录

批量听录用于听录存储中的大量音频。你可以指向具有共享访问签名(SAS)URI的音频文件并异步接收听录结果。对需要批量听录音频的应用程序使用批量听录,例如:

预录制音频的听录、描述文字或字幕联系中心调用后分析分割聚类

可通过以下方式提供批量听录:

语音转文本RESTAPI:要开始使用,请参阅如何使用批量听录和批量听录示例(REST)。语音CLI支持实时听录和批量听录。要获取有关批量听录的语音CLI帮助,请运行以下命令:spxhelpbatchtranscription自定义语音识别

借助自定义语音识别,可以评估应用程序和产品的语音识别并提高其准确度。自定义语音模型可用于实时语音转文本、语音翻译和批量听录。

提示

无需托管部署终结点即可将自定义语音识别与批量听录API配合使用。如果自定义语音模型仅用于批量听录,则可以节省资源。有关详细信息,请参阅语音服务定价。

现成的语音识别可利用通用语言模型作为一个基本模型(使用Microsoft自有数据进行训练),并反映常用的口语。此基础模型使用那些代表各常见领域的方言和发音进行了预先训练。发出语音识别请求时,默认使用每个支持的语言的最新基础模型。基础模型在大多数语音识别场景中都非常有效。

通过提供文本数据来训练模型,自定义模型可用于扩充基本模型,以提高对特定于应用程序的特定领域词汇的识别。它还可用于通过为音频数据提供参考听录内容,来改进基于应用程序的特定音频条件的识别。有关详细信息,请参阅自定义语音识别和语音转文本RESTAPI。

自定义选项因语言或区域设置而异。若要验证是否支持,请参阅对语音服务的语言和语音支持。

负责任的AI

AI系统不仅包括技术,还包括使用它的人员、受其影响的人员以及部署它的环境。阅读透明度说明,了解如何在系统中负责任地使用和部署AI。

透明度说明和用例特征和限制集成和负责使用数据、隐私和安全性后续步骤语音转文本入门创建批量听录

java 离线版语音转文字

使用vosk开源项目,基于java实现离线语音转文字

文章目录前言一、VOSK是什么?二、使用步骤1.环境准备2.maven依赖如果导入失败可以下载jar,buildpath一下;3.语言模型4.运行代码总结前言

当前主流的语音识别大厂有科大讯飞、百度、谷歌等,但在他们官网中发现,支持java离线版的并不多,科大讯飞离线包仅基于安卓,而百度官方并没有离线版的,所以在资源查找中筛选出VOSK、CMUSphinx,并且两者都是开源的,但CMUSphinx官网中并没有中文模型,所以在选用上选择了VOSK.

一、VOSK是什么?

Vosk是言语识别工具包。Vosk最好的事情是:1.支持二十+种语言-中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷兰人,加泰罗尼亚语,阿拉伯,希腊语,波斯语,菲律宾语,乌克兰语,哈萨克语,瑞典语,日语,世界语2.移动设备上脱机工作-RaspberryPi,Android,iOS3.使用简单的pip3installvosk安装4.每种语言的手提式模型只有是50Mb,但还有更大的服务器模型可用提供流媒体API,以提供最佳用户体验(与流行的语音识别python包不同)5.还有用于不同编程语言的包装器-java/csharp/javascript等6.可以快速重新配置词汇以实现最佳准确性7.支持说话人识别

二、使用步骤1.环境准备

因为该资源底层是c开发的,所以需要下载vcredist;

2.maven依赖

代码如下(示例):

net.java.dev.jnajna5.7.0com.alphacepheivosk0.3.32如果导入失败可以下载jar,buildpath一下;3.语言模型

从官网地址https://alphacephei.com/vosk/models中下载想用的语言模型,如果是中文的话推荐:vosk-model-small-cn-0.3

4.运行代码

将官方给出的demo添加到项目中,其中需要更改的是给的DecoderDemo,这个是调用方法,

publicstaticvoidmain(String[]argv)throwsIOException,UnsupportedAudioFileException{LibVosk.setLogLevel(LogLevel.DEBUG);try(Modelmodel=newModel("model");//该段是模型地址InputStreamais=AudioSystem.getAudioInputStream(newBufferedInputStream(newFileInputStream("cn.wav")));//该段是要转的语言文件,仅支持wavRecognizerrecognizer=newRecognizer(model,12000)){//该段中12000是语言频率,需要大于8000,可以自行调整intnbytes;byte[]b=newbyte[4096];while((nbytes=ais.read(b))>=0){if(recognizer.acceptWaveForm(b,nbytes)){System.out.println(recognizer.getResult());}else{System.out.println(recognizer.getPartialResult());}}System.out.println(recognizer.getFinalResult());}}总结

这个开源最大的不足是有点慢,如果你们有合适的开源资源记得推荐一下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇