【百度大脑新品体验】语音识别极速版~C#开荒攻略
goJhou 发布于2019-04 浏览:8407 回复:25
3
收藏
最后编辑于2022-04

哈喽 雷迪斯安德 尖头们 嗨起来!

 

是我勾勾~

本期又来开教程贴啦,这次带来的是新品喔!热乎的C#语音识别极速版调用教程~

 

语音识别极速版 API
将60秒以内的完整音频文件识别为文字,适用于近场短语音交互,如手机语音搜索、聊天输入等场景。输入完整音频文件,输出识别结果文字。

采用流式多级截断注意力模型SMLTA,专有GPU服务集群,识别响应速度及识别准确率极大提升。按调用量计费,免费赠送5万次调用。详情见产品定价文档。

 

任意操作系统,任意编程语言,只要可以对百度语音服务器发起http请求的,均可以使用本接口!

 

那废话不多说啦,直接开始开荒啦!

 

step 0! 检查权限!

首先打开极速版链接,https://ai.baidu.com/tech/speech/asrpro

如果是新用户的话第一步创建自己的应用喔~

 

已经创建过应用的各位小主进入自己的应用列表,编辑一下应用,看看极速版是否勾选上啦?

 

Step 1!获取accesstoken!

万事找入口,ak第一步!

HttpClient client = new HttpClient();

List> paraList = new List>
{
new KeyValuePair("grant_type", "client_credentials"),
new KeyValuePair("client_id", client_id),
new KeyValuePair("client_secret", client_secret)
};
HttpResponseMessage response = client.PostAsync(AKRequestURL, new FormUrlEncodedContent(paraList)).Result;
JObject result = JObject.Parse(response.Content.ReadAsStringAsync().Result);


拿到了鉴权的答复后,记得保存accessToken喔~

 

Step 2!鉴权确认!

这次的鉴权比较特别喔,建议各位多做几次权限确认工作呢~

因为 scope中含有audio_voice_assistant_get 表示有语音识别能力,没有该audio_tts_post 的token调用识别接口会有3302错误。

List scopeList = result["scope"].ToString().Split(' ').ToList();
//语音识别权限判定 Check your Asr
if (!scopeList.Contains("audio_voice_assistant_get"))
{
throw new Exception("该AccessToken不具备语音识别权限。请至应用列表修改权限");
}
//语音合成权限判定 Check your Tts
if (!scopeList.Contains("audio_tts_post"))
{
throw new Exception("没有该audio_tts_post 的token调用识别接口会有3302错误");
}

//通过权限判定 pass the check
accessToken = result["access_token"].ToString();


Step 3!读入PCM文件!

ak第一步!IO不过三!来!

byte[] pcmFile = File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + "16k.pcm");


Step 4!是时候抉择了!

这次的调用接口支持两种调用

一种是基于json的封装调用,要求将字节流进行base64编码。带来的负面影响是,数据量将扩充三分之一,但开发效率高。

另一种是基于Raw方式提交的Http请求,该请求对请求包的头(header)和身(body)进行分别管理,开发有一定门槛。

 

这边勾勾我把两种方式都写好啦,各位尽情使用吧~

 

注意喔,json方式如果用HttpClient的话一定要参照我这样进行content转化喔,像上方获取ak的时候的form转化会导致URL超长呢~

//JSON方式上传 base64编码后,数据会增大1/3 
client = new HttpClient();
string base64 = Convert.ToBase64String(pcmFile);
JObject json = new JObject();
json["format"] = "pcm";
json["rate"] = 16000;
json["channel"] = 1;
json["cuid"] = GetMacAddress();
json["token"] = accessToken;
json["len"] = pcmFile.Length;
json["speech"] = base64;
json["dev_pid"] = 80001;

var content = new StringContent(json.ToString(), Encoding.UTF8, "application/json");

response = client.PostAsync(AsrInterfaceURL, content).Result;

result = JObject.Parse(response.Content.ReadAsStringAsync().Result);


Raw:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AsrInterfaceURL + $"?dev_pid=80001&cuid={GetMacAddress().Replace(":","")}&token={accessToken}");

request.ContentType = "audio/pcm;rate=16000";
request.Method = "POST";

using (Stream str = request.GetRequestStream())
{
str.Write(pcmFile, 0, pcmFile.Length);
}

HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

Stream receiveStream = resp.GetResponseStream();
string res = new StreamReader(receiveStream).ReadToEnd();

return;


当当!

 

祝小主们看了本攻略可在5分钟内顺利调通无bug!

 

本demo项目基于.net 4.5. 依赖newtonsoft.json

项目地址:https://gitee.com/Jack.Zhou/Baidu.FastASR

 

收藏
点赞
3
个赞
共25条回复 最后由用户已被禁言回复于2022-04
#27枫叶凌霜花回复于2021-11

兄弟们,有产品的相关资料链接吗

0
#26O国殇O回复于2021-07

帮助很大

0
#25O国殇O回复于2021-07

太厉害了

0
#24O国殇O回复于2021-07

0
#23来自三石头回复于2021-07

我卡在了第一步,是直接C#控制台复制调研Access_token的函数,对应输入AK和SK,他说我

 CS5001 程序不包含适合于入口点的静态 "Main" 方法 

0
#22goJhou回复于2019-05
#21 177******01回复
感谢大神分享,最近正在研究

期待你的研究成果~

0
#21177******01回复于2019-05

感谢大神分享,最近正在研究

0
#20风允摩羯回复于2019-05
#19 goJhou回复
明天提交800字观后感哈哈

期待读后感

0
#19goJhou回复于2019-05
#18 小雨青青润无声回复
可以进行代码的学习了,感谢分享

明天提交800字观后感哈哈

0
#18小雨青青润无声回复于2019-05

可以进行代码的学习了,感谢分享

0
#17风允摩羯回复于2019-05
#16 wangwei8638回复
所以需要一种万能语言

能够破解万种语言,方便了解

0
#16wangwei8638回复于2019-04
#15 goJhou回复
想法很美好,现实很残酷。混合开发可以了解一下~

所以需要一种万能语言

0
#15goJhou回复于2019-04
#14 wangwei8638回复
能在不同程序语言之间自动翻译,这样就不用什么语言都懂了

想法很美好,现实很残酷。混合开发可以了解一下~

0
#14wangwei8638回复于2019-04
#12 goJhou回复
什么?

能在不同程序语言之间自动翻译,这样就不用什么语言都懂了

0
#13风允摩羯回复于2019-04
#12 goJhou回复
什么?

可能要表达的意思是看不懂

0
#12goJhou回复于2019-04
#11 wangwei8638回复
还缺个程序语言的翻译

什么?

0
#11wangwei8638回复于2019-04
#8 goJhou回复
python我不玩耶,应该不难~http无非basic与form

还缺个程序语言的翻译

0
#10goJhou回复于2019-04
#9 wangwei8638回复
识别结果怎么看呢?

解析返回的json

0
#9wangwei8638回复于2019-04

识别结果怎么看呢?

0
#8goJhou回复于2019-04
#7 hellyhua回复
啥时候出个PYTHON的

python我不玩耶,应该不难~http无非basic与form

0
TOP
切换版块