各位好呀,又是我勾勾啦
这次给大家带来 语音识别极速版的C#性能测试喔!
在上方可以看到,官宣的通用版与极速版近乎相差5倍的时长呢!如果在相同的文件下多次识别都是如此完美的话,那就太棒了!
那废话不多说,燥起来!
Step 1.首先要学习一下C#的极速版代码怎么写喔
【传送门】【百度大脑新品体验】语音识别极速版~C#开荒攻略
http://ai.baidu.com/forum/topic/show/942860
Step 2.快速的写一下C#录音的库和普通版的代码
首先是录音,语音识别的基本是语音文件
在17年我曾写过3篇有关C#在win下的录音、唤醒、VAD的文章,各位可以大可参考用到这里来喔~(代码中只含录音逻辑。唤醒和VAD各位可参考先前的文章尝试修改喔)
【传送门】
[语音技术]C#在windows平台的录音类封装
http://ai.baidu.com/forum/topic/show/492634
[语音技术]C#在win平台基于录音类试写唤醒
http://ai.baidu.com/forum/topic/show/492635
[语音技术]C#在win平台基于录音类试写打断
http://ai.baidu.com/forum/topic/show/492717
技能固然强大,自身职责不能忽略喔!一定要好好处理源数据,一定程度上也能提高准确率呢~
我这里自己录了一个正正好好5s的音,然后用他作为素材在普通版和极速版之间测试真实的识别时长。
以下是快速构建好的普通版语音识别代码
这里用了一个Stopwatch来精确考量请求开始到请求结束所使用到的时间,虽然其中会有一定的网络波动因素,但在数量面前它将毫无作用。
var client = new Aip.Speech.Asr(Global.GlobalConfig.APP_ID,Global.GlobalConfig.API_KEY, Global.GlobalConfig.SECRET_KEY); client.Timeout = 60000; // 修改超时时间 Stopwatch sw = new Stopwatch(); var data = File.ReadAllBytes(@"I:\2019-04-12 百度4月\5srecord.pcm"); int i = 0; while(i<20) { sw.Reset(); sw.Start(); var result = client.Recognize(data, "pcm", 16000); sw.Stop(); Console.WriteLine(result); Console.WriteLine(sw.ElapsedMilliseconds); i++; } Console.ReadLine();
同理,我采集了20次普通版识别此文件所耗的时间,并用excel记录了下来
极速版json:
HttpClient HClient = new HttpClient(); string AKRequestURL = $"https://openapi.baidu.com/oauth/2.0/token"; string AsrInterfaceURL = $"https://vop.baidu.com/pro_api"; List> paraList = new List> { new KeyValuePair("grant_type", "client_credentials"), new KeyValuePair("client_id", Global.GlobalConfig.API_KEY), new KeyValuePair("client_secret", Global.GlobalConfig.SECRET_KEY) }; HttpResponseMessage response = HClient.PostAsync(AKRequestURL, new FormUrlEncodedContent(paraList)).Result; JObject res = JObject.Parse(response.Content.ReadAsStringAsync().Result); string accessToken = res["access_token"].ToString(); i = 0; while(i<20) { HClient = new HttpClient(); //client.MaxResponseContentBufferSize = 2147483647; string base64 = Convert.ToBase64String(data); JObject json = new JObject(); json["format"] = "pcm"; json["rate"] = 16000; json["channel"] = 1; json["cuid"] = GetMacAddress(); json["token"] = accessToken; json["len"] = data.Length; json["speech"] = base64; json["dev_pid"] = 80001; var content = new StringContent(json.ToString(), Encoding.UTF8, "application/json"); sw.Restart(); response = HClient.PostAsync(AsrInterfaceURL, content).Result; sw.Stop(); JObject result = JObject.Parse(response.Content.ReadAsStringAsync().Result); Console.WriteLine(result.ToString()); Console.WriteLine(sw.ElapsedMilliseconds); i++; }
极速版raw:
HttpClient HClient = new HttpClient(); string AKRequestURL = $"https://openapi.baidu.com/oauth/2.0/token"; string AsrInterfaceURL = $"https://vop.baidu.com/pro_api"; List> paraList = new List> { new KeyValuePair("grant_type", "client_credentials"), new KeyValuePair("client_id", Global.GlobalConfig.API_KEY), new KeyValuePair("client_secret", Global.GlobalConfig.SECRET_KEY) }; HttpResponseMessage response = HClient.PostAsync(AKRequestURL, new FormUrlEncodedContent(paraList)).Result; JObject res = JObject.Parse(response.Content.ReadAsStringAsync().Result); string accessToken = res["access_token"].ToString(); Stopwatch sw = new Stopwatch(); var data = File.ReadAllBytes(@"I:\2019-04-12 百度4月\5srecord.pcm"); i = 0; while(i<20) { HClient = new HttpClient(); //client.MaxResponseContentBufferSize = 2147483647; string base64 = Convert.ToBase64String(data); JObject json = new JObject(); json["format"] = "pcm"; json["rate"] = 16000; json["channel"] = 1; json["cuid"] = GetMacAddress(); json["token"] = accessToken; json["len"] = data.Length; json["speech"] = base64; json["dev_pid"] = 80001; var content = new StringContent(json.ToString(), Encoding.UTF8, "application/json"); sw.Restart(); response = HClient.PostAsync(AsrInterfaceURL, content).Result; sw.Stop(); JObject result = JObject.Parse(response.Content.ReadAsStringAsync().Result); Console.WriteLine(result.ToString()); Console.WriteLine(sw.ElapsedMilliseconds); i++; }
最后整理到excel的结果如下
单位都是毫秒喔~
最后可以看到,raw方式的极速版略胜于json版(因为json版base64体积增大,编码需要一定时长)
以上数据基于I7-6700K CPU测试。CPU可能影响编码效率。
数据也含有一定的网络波动,这无法避免。
本项目基于.NET Framework 4.5开发,包含Microsoft.DirectX.dll & Microsoft.DirectX.DirectSound.dll,用于采集声音。依赖于Newtonsoft.Json 10.0.0.0
【项目传送门】
https://gitee.com/Jack.Zhou/Baidu.FastASR.Test
语音识别可以应用于多个创新想法喔~这里我给各位带来几个我曾经做过的例子~
利用语音技术,基于即时通讯平台构建智能门禁
利用语音识别,配合百度翻译接口,建立简单实时双语字幕
https://v.youku.com/v_show/id_XMzIwODE1MTg0OA==.html?spm=a2h3j.8428770.3416059.1
感谢各位的收看哟,祝你们的开发顺顺利利,马到成功~
怕了怕了
应该是已经有了粉丝群了吧
是啊,Go妹就是人漂亮,代码又好
完了,再这么发展下去要有粉丝群了哈哈哈
你们组成了一个高级俱乐部吖
谢谢分享,好厉害!
没错 我还有go妹的微信 要的都可以找我~
多才的美女大佬,你好。膜拜一下。
哈哈哈哈你们这帮人太会爬了
太牛了,
评测非常牛,
对 挺漂亮的 我见过 吃过饭。
我这么多年的工作经验来看,搞技术的美女一般都非常的牛逼
文章组织的很好,可以把文章转成视频,放到付费网址上 O(∩_∩)O~
大神好速度,这么快评测文章就出来了;
你这夸的哈哈哈哈哈
不愧是社区的美女。
Go妹人长得漂亮,代码写的也好。
你也可以的
智能门禁好强悍,芝麻开门