【四月评测】【语音技术】语音识别利器!
goJhou 发布于2019-04 浏览:9469 回复:40
2
收藏
最后编辑于2022-04

各位好呀,又是我勾勾啦

这次给大家带来 语音识别极速版的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

 

 

感谢各位的收看哟,祝你们的开发顺顺利利,马到成功~

 

收藏
点赞
2
个赞
共40条回复 最后由用户已被禁言回复于2022-04
#21goJhou回复于2019-04
#20 才能我浪费99回复
应该是已经有了粉丝群了吧

怕了怕了

0
#20才能我浪费99回复于2019-04
#18 goJhou回复
完了,再这么发展下去要有粉丝群了哈哈哈

应该是已经有了粉丝群了吧

1
#19才能我浪费99回复于2019-04
#9 daipeng_hi回复
我这么多年的工作经验来看,搞技术的美女一般都非常的牛逼

是啊,Go妹就是人漂亮,代码又好

1
#18goJhou回复于2019-04
#15 荒墨丶迷失回复
没错 我还有go妹的微信 要的都可以找我~

完了,再这么发展下去要有粉丝群了哈哈哈

0
#17wangwei8638回复于2019-04
#15 荒墨丶迷失回复
没错 我还有go妹的微信 要的都可以找我~

你们组成了一个高级俱乐部吖

0
#16让天涯回复于2019-04

谢谢分享,好厉害!

0
#15荒墨丶迷失回复于2019-04
#10 用户已被禁言回复
对 挺漂亮的 我见过 吃过饭。

没错 我还有go妹的微信 要的都可以找我~

1
#14人间月天回复于2019-04

多才的美女大佬,你好。膜拜一下。

0
#13goJhou回复于2019-04
#10 用户已被禁言回复
对 挺漂亮的 我见过 吃过饭。

哈哈哈哈你们这帮人太会爬了

0
#12rose20135188回复于2019-04

太牛了,

0
#11liguanghui2588回复于2019-04

评测非常牛,

0
#10用户已被禁言回复于2019-04
#9 daipeng_hi回复
我这么多年的工作经验来看,搞技术的美女一般都非常的牛逼

对 挺漂亮的 我见过 吃过饭。

0
#9daipeng_hi回复于2019-04
#5 才能我浪费99回复
不愧是社区的美女。

我这么多年的工作经验来看,搞技术的美女一般都非常的牛逼

0
#8daipeng_hi回复于2019-04

文章组织的很好,可以把文章转成视频,放到付费网址上 O(∩_∩)O~

0
#7daipeng_hi回复于2019-04

大神好速度,这么快评测文章就出来了;

0
#6goJhou回复于2019-04
#5 才能我浪费99回复
不愧是社区的美女。

你这夸的哈哈哈哈哈

0
#5才能我浪费99回复于2019-04

不愧是社区的美女。

0
#4才能我浪费99回复于2019-04
#3 goJhou回复
[图片] 你也可以的

Go妹人长得漂亮,代码写的也好。

0
#3goJhou回复于2019-04
#2 wangwei8638回复
智能门禁好强悍,芝麻开门

你也可以的

0
#2wangwei8638回复于2019-04

智能门禁好强悍,芝麻开门

0
TOP
切换版块