各位好呀,又是我勾勾啦
这次给大家带来 语音识别极速版的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_XMzkxNTU4NzUyOA==.html?x&sharefrom=android&sharekey=2cc745957e168788abe187a4217e03285
利用语音识别,配合百度翻译接口,建立简单实时双语字幕
https://v.youku.com/v_show/id_XMzIwODE1MTg0OA==.html?spm=a2h3j.8428770.3416059.1
感谢各位的收看哟,祝你们的开发顺顺利利,马到成功~
怕了怕了
应该是已经有了粉丝群了吧
是啊,Go妹就是人漂亮,代码又好
完了,再这么发展下去要有粉丝群了哈哈哈
你们组成了一个高级俱乐部吖
谢谢分享,好厉害!
没错 我还有go妹的微信 要的都可以找我~
多才的美女大佬,你好。膜拜一下。
哈哈哈哈你们这帮人太会爬了
太牛了,
评测非常牛,
对 挺漂亮的 我见过 吃过饭。
我这么多年的工作经验来看,搞技术的美女一般都非常的牛逼
文章组织的很好,可以把文章转成视频,放到付费网址上 O(∩_∩)O~
大神好速度,这么快评测文章就出来了;
你这夸的哈哈哈哈哈
不愧是社区的美女。
Go妹人长得漂亮,代码写的也好。
你也可以的
智能门禁好强悍,芝麻开门