基本的思想就是
我会多线程不停的利用录音类识别实时的话语
当我的话语中出现了 xxx(语音唤醒词) 时,以后的句子(包括本句)将被计算机处理
直到再次说出 xxx 时,程序再次进入监听状态 等待唤醒。
这是一个基于windows的唤醒实验。试用下来交互其实还是可以接受的。
如下是部分代码,我的唤醒词设置成了“贾维斯”
public Task Update() { return Task.Run(() => { var data = File.ReadAllBytes(time + ".wav"); Dictionary d = new Dictionary(); //d.Add("lan", "zh"); var result = _asrClient.Recognize(data, "pcm", 16000, d); if (result.GetValue("err_msg").ToString() == "success.") { File.Delete(time + ".wav"); Application.Current.Dispatcher.Invoke(() => { string res = result.GetValue("result").First.ToString(); Console.WriteLine(result.GetValue("result").ToString()); Regex regex = new Regex("贾维斯");//捕捉唤醒词 可在语音识别中设定特别词优化 Match match = regex.Match(res); if (match.Success || IsJarvis) //说出了贾维斯或处于唤醒 开始一系列操作 { if(IsJarvis) { if (match.Success)//唤醒状态下又说出了贾维斯 退出唤醒 { IsJarvis = false;//退出贾维斯模式 Console.Write("\t进入睡眠,等待唤醒"); } else { if (!UNIT.UNIT.IsFinishedThisUnit) { Queue.Queue.WaitForIntentionsWord.Add(WordToNumber.WordToNumberClass.WordToNumber(res)); } else Queue.Queue.WaitForDealFromVoice.Add(WordToNumber.WordToNumberClass.WordToNumber(res)); } }else { IsJarvis = true; Console.Write("\t唤醒成功"); Queue.Queue.WaitForDealFromVoice.Add(WordToNumber.WordToNumberClass.WordToNumber(res));//res..Replace(",", "").Replace("贾维斯", "")) } } }); return result.GetValue("result").First.ToString().Replace(",",""); } return null; }); }
TOP
切换版块
是呀~winform没啥市场了
winform 按go大神的说法就是过时了...
不是喔,WPF封装
winform封装
大家赶紧扯了 2年前的帖子 作者已经发了新的测评,快去围观吧
嗯,BS的兴起对CS确实冲击有点
这个系列已经完结啦,文章是17年的喔
但是感觉现在用这个语言的不多
实际应用确实应该是传入的语音,期待后续更新
是的呢,.net还是有一席之地的
我们主要使用studio软件,这个c#应用较多
写得不错,学习一下。
请看一整个系列,不要拿其中一篇说事喔
这也叫唤醒吗?唤醒不是为了解放双手吗?直接读一个音频文件,可还行。如果这个音频文件是前端传给后端的, 有什么办法控制上传录音的时长?《我会多线程不停的利用录音类识别实时的话语》这部分,代码能分享一下吗?
水帖是不好的行为哟~
哈哈哈哈哈哈
嗯哼,你这么说,我就是很开森~
你终于又开始水起来了!
在社区,经常发生这种“刚好”的事情,社区真的好棒哟~
我刚好试着写一个java的唤醒线程