智能电话机器人,使用Microsoft语音识别技术(Speech sdk)

简介: 智能电话机器人,使用Microsoft语音识别技术(Speech sdk)

AT命令有两种解释一种是调制解调器命令语言,简单来说就是一些固定格式的字符串,我们通过串口向Modem发送AT命令的字符串,Modem就会按照

命令去执行不同的操作.AT命令的百度百科请看这里,具体的命令格式和使用方法请自行百度.

我们先来试试拨号

向串口发送命令 : atdt10086;\r

不出意外的话Modem就会摘机,并发出拨号音,然后就会听到10086的语音了.

然后是按键交互

比如我要按 1键 然后按 #号键则

按键命令 : atd,1,#;\r

逗号的作用是延时,让多个按键之间有些间隔,防止对方识别不清

然后是挂机

挂机的命令是 : ath;\r

发送这个命令,Modem就执行挂机动作了.

这些基本动作都可以完成之后,下面就进入第二个问题了:

用什么技术来实现语音识别1xx86那边所说的语音?

这里我经过一段时间的技术调查,最终决定使用微软Windows 7 自带的语音识别引擎

这个引擎有两种识别模式,第一种是自由识别,这种方式每当引擎识别出任意一段文字之后便会触发识别事件SpeechRecognized

另一种方式是关键词识别,这种方式只有引擎识别出的文字符合关键词,才会触发识别事件SpeechRecognized

我们采用关键词模式进行识别,根据1xx86语音播报的不同关键词,来按不同的按键,完成功能.

这个功能在控制面板里可以看到 控制面板 -> 轻松访问 -> 语音识别

.Net 有对应的类库可以调用,命名空间如下:

using System.Speech.Recognition;
using System.Speech.Synthesis;

引擎使用方法:

首先,创建语音识别引擎,设置音频输入设备

复制代码
CultureInfo myCIintl = new CultureInfo(“zh-CN”);
foreach (RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers())//获取所有语音引擎
{
if (config.Culture.Equals(myCIintl) && config.Id == “MS-2052-80-DESK”)
{
Recognizer = new SpeechRecognitionEngine(config);
Recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备
break;
}//选择中文的识别引擎
}
if (Recognizer != null)
{
InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎
}
else
{
MessageBox.Show(“创建语音识别失败”);
}
复制代码
  然后进行初始化,加载关键词

复制代码
///
/// 初始化,加载关键词组
///
/// 关键词组
private void InitializeSpeechRecognitionEngine(string[] fg)
{
Grammar customGrammar = CreateCustomGrammar(fg);
//根据关键字数组建立语法
Recognizer.UnloadAllGrammars();
Recognizer.LoadGrammar(customGrammar);
//加载语法
}
复制代码
  然后开始识别

复制代码
///
/// 开始识别
///
public void BeginRec()
{
TurnSpeechRecognitionOn();
}
复制代码
  上述简单介绍了识别引擎的使用过程,我将此过程封装为一个类,方便主程序调用

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech;
using System.Speech.Recognition;
using System.Globalization;
using System.Windows.Forms;

using System.Speech.Synthesis;
using System.Diagnostics;

namespace Sp10086
{
public class SRecognition
{
///
/// 语音识别引擎
///
public SpeechRecognitionEngine Recognizer { get; set; }

//重载构造函数
public SRecognition() : this(new string[]{" "})
{
    
}
public SRecognition(string[] fg) //创建关键词语列表
{
    CultureInfo myCIintl = new CultureInfo("zh-CN");
    foreach (RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers())//获取所有语音引擎
    {
        if (config.Culture.Equals(myCIintl) && config.Id == "MS-2052-80-DESK")
        {
            Recognizer = new SpeechRecognitionEngine(config);
            Recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备
            break;
        }//选择中文的识别引擎
    }
    if (Recognizer != null)
    {
        InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎
    }
    else
    {
        MessageBox.Show("创建语音识别失败");
    }
}
/// <summary>
/// 初始化,加载关键词组
/// </summary>
/// <param name="fg">关键词组</param>
private void InitializeSpeechRecognitionEngine(string[] fg)
{
    Grammar customGrammar = CreateCustomGrammar(fg);
    //根据关键字数组建立语法
    Recognizer.UnloadAllGrammars();
    Recognizer.LoadGrammar(customGrammar);
    //加载语法
}
/// <summary>
/// 开始识别
/// </summary>
public void BeginRec()
{
    TurnSpeechRecognitionOn();
}
/// <summary>
/// 停止语音识别引擎
/// </summary>
public void StopRec()
{
    TurnSpeechRecognitionOff();
}
/// <summary>
/// 加载关键词组
/// </summary>
/// <param name="fg">关键词组</param>
public void ChangeKeywords(string[] fg)
{
    InitializeSpeechRecognitionEngine(fg);

    System.Threading.Thread.Sleep(100);

    foreach(Grammar g in this.Recognizer.Grammars)
    {
        Debug.WriteLine("正在听:" + g.Name);
    }
}
/// <summary>
/// 加载关键词组
/// </summary>
/// <param name="fg">关键词组</param>
public void ChangeKeywords(string prefix, string[] fg)
{
    GrammarBuilder grammarBuilder = new GrammarBuilder(prefix);
    string words = string.Empty;
    foreach (string s in fg)
    {
        words += "(" + prefix + s + ")";
    }
    grammarBuilder.Append(new Choices(fg));
    //根据关键字数组建立语法
    Recognizer.UnloadAllGrammars();
    Recognizer.LoadGrammar(new Grammar(grammarBuilder) { Name = words });

    System.Threading.Thread.Sleep(100);
    foreach (Grammar g in this.Recognizer.Grammars)
    {
        Debug.WriteLine("正在听:" + g.Name);
    }
}
/// <summary>
/// 创造自定义语法
/// </summary>
/// <param name="fg">关键词组</param>
/// <returns></returns>
public virtual Grammar CreateCustomGrammar(string[] fg)
{
    GrammarBuilder grammarBuilder = new GrammarBuilder();
    grammarBuilder.Append(new Choices(fg));

    string words = string.Empty;
    foreach (string s in fg)
    {
        words += "("+s+")";
    }
    return new Grammar(grammarBuilder) { Name = words };
}
/// <summary>
/// 启动语音识别函数
/// </summary>
private void TurnSpeechRecognitionOn()
{
    if (Recognizer != null)
    {
        Recognizer.RecognizeAsync(RecognizeMode.Multiple); 
        //识别模式为连续识别
    }
    else
    {
        MessageBox.Show("创建语音识别失败");
    }
}
/// <summary>
/// 关闭语音识别函数
/// </summary>
private void TurnSpeechRecognitionOff()
{
    if (Recognizer != null)
    {
        Recognizer.RecognizeAsyncCancel();
    }
    else
    {
        MessageBox.Show("创建语音识别失败");
    }
}
AI 代码解读

}

}
复制代码

主程序调用方法如下:

SRecognition sr = new SRecognition();
sr.Recognizer.SpeechRecognized += new EventHandler(recognizer_SpeechRecognized);
sr.BeginRec();
  识别出关键词之后的处理函数:

复制代码
///
/// 识别出关键字后的处理函数
///
///
///
private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//识别出的关键词
string text = e.Result.Text;
switch (text)
{
case “欢迎使用中国移动”:
//根据关键词不同,按不同的按键
serialPort1.Write(“atd,1,#;\r”);
//然后改变引擎所关注的关键词,进行下一步的识别
sr.ChangeKeywords(new string[] { “查询余额” });
break;

case "查询余额":
    serialPort1.Write("atd,2,#;\r");
    sr.ChangeKeywords(new string[] { "xxx" });
    break;
//以下过程涉及业务逻辑,故省略
case "xxx":
    break;
case "yyy":
    break;
default:
    break;
AI 代码解读

}
  过程如下:

拨通电话

引擎开始识别 关键词 “欢迎使用中国移动”

"欢迎使用中国移动"识别出后,进行按键 1键 #号键 引擎换关键词 “查询服务”

“查询服务” 识别出后,进行按键 2键 #号键

如此一直循环下去,都是按照1xx86的充值顺序进行,一直进行到输入充值卡密码,进行按键,将充值卡密码上送 引擎换关键词 “充值成功"和"充值失败”

根据识别出的关键词 是"充值成功"还是"充值失败",进行记录,录入数据库.

最后挂机,完成.
f9985619e17accb49354e6b7da560e8.jpg
https://www.aliyun.com/activity/new/index?userCode=f48yvihf

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
打赏
0
0
0
0
17
分享
相关文章
大牛直播SDK在四足机器人和无人机巡检中的创新应用方案
在工业4.0和智能化浪潮下,传统巡检方式正经历深刻变革。四足机器人与无人机凭借灵活机动性和高效巡检能力崭露头角,而大牛直播SDK则赋予其实时直播与智能互动功能。本文介绍大牛直播SDK的核心优势、在四足机器人和无人机巡检中的应用方案,以及技术实现要点和未来展望,展示智能巡检的广阔前景。
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
KUKA机器人Socket通讯配置方法:技术干货分享
【10月更文挑战第7天】在现代自动化生产线上,KUKA机器人凭借其高效、灵活和精确的特点,成为众多企业的首选。为了实现KUKA机器人与其他设备或系统之间的数据交互,Socket通讯配置显得尤为重要。本文将详细介绍KUKA机器人Socket通讯的配置方法,帮助大家在工作中更好地掌握这一技术。
583 2
纳米技术与医疗:纳米机器人的临床应用前景
【9月更文挑战第28天】纳米机器人作为纳米技术在医疗领域的重要应用,正逐步改变着传统医疗的面貌。它们在药物输送、癌症治疗、手术辅助和疾病诊断等方面展现出广阔的应用前景。随着科学技术的不断进步和纳米技术的不断成熟,我们有理由相信,纳米机器人将成为医疗领域的一个重要且不可或缺的组成部分,为人类的健康事业做出更大的贡献。同时,我们也应关注纳米技术的安全性和可靠性问题,确保其在医疗应用中的安全和有效。
聊天机器人开发的最佳实践:技术探索与案例分析
【8月更文挑战第22天】聊天机器人作为人工智能领域的重要应用之一,正逐步改变着人们的生活和工作方式。通过遵循最佳实践和技术探索,开发者可以开发出更加智能、高效、安全的聊天机器人产品。未来,随着技术的不断进步和应用场景的不断拓展,聊天机器人将在更多领域发挥重要作用。
揭秘开发效率提升秘籍:如何通过Apache Wicket组件重用技巧大翻新用户体验
【8月更文挑战第31天】张先生在开发基于Apache Wicket的企业应用时,发现重复的UI组件增加了维护难度并影响加载速度。为优化体验,他提出并通过面板和组件重用策略解决了这一问题。例如,通过创建`ReusableLoginPanel`类封装登录逻辑,使得其他页面可以轻松复用此功能,从而减少代码冗余、提高开发效率及页面加载速度。这一策略还增强了应用的可维护性和扩展性,展示了良好组件设计的重要性。
80 0
掌握未来沟通的艺术:运用TensorFlow与自然语言处理(NLP)技术,从零开始构建你的专属智能对话机器人,让机器理解你的一言一行
【8月更文挑战第31天】本文详细介绍如何利用TensorFlow与自然语言处理技术开发对话机器人。从准备问答数据集开始,通过预处理、构建Seq2Seq模型、训练及预测等步骤,最终实现了一个简易的聊天机器人。示例代码涵盖数据加载、模型搭建及对话功能,适合希望在实际项目中应用AI技术的开发者参考。
111 0
NLP技术在聊天机器人中的应用:技术探索与实践
【7月更文挑战第13天】NLP技术在聊天机器人中的应用已经取得了显著的成果,并将在未来继续发挥重要作用。通过不断探索和创新,我们可以期待更加智能、自然的聊天机器人的出现,为人类生活带来更多便利和乐趣。
【Azure 环境】使用Microsoft Graph PS SDK 登录到中国区Azure, 命令Connect-MgGraph -Environment China xxxxxxxxx 遇见登录错误
【Azure 环境】使用Microsoft Graph PS SDK 登录到中国区Azure, 命令Connect-MgGraph -Environment China xxxxxxxxx 遇见登录错误
128 0
强化学习:从游戏到机器人的技术之旅
【6月更文挑战第14天】强化学习是智能体通过与环境互动学习决策策略的方法,已在游戏(如AlphaGo和OpenAI Five)和机器人技术中展现出巨大潜力。在机器人领域,它应用于控制、动作学习和交互沟通,帮助机器人适应复杂环境和任务。尽管面临挑战,但随着技术发展,强化学习有望在更多领域发挥关键作用。

热门文章

最新文章

  • 1
    大牛直播SDK在四足机器人和无人机巡检中的创新应用方案
    29
  • 2
    基于大牛直播SDK的无纸化同屏会议与智慧教室技术方案
    35
  • 3
    【Azure Service Bus】分享使用 Python Service Bus SDK 输出SDK内操作日志
    81
  • 4
    【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作
    29
  • 5
    【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    139
  • 6
    CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
    63
  • 7
    【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
    36
  • 8
    【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    76
  • 9
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    188
  • 10
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    190