百度大脑语音识别极速版~C#开荒攻略

mac2025-05-23  56

作者:goJhou

语音识别极速版 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

最新回复(0)