智能电话机器人,使用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("创建语音识别失败");
    }
}

}

}
复制代码

主程序调用方法如下:

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;

}
  过程如下:

拨通电话

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

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

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

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

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

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

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
相关文章
|
9月前
|
数据采集 自动驾驶 机器人
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
955 1
|
弹性计算 自然语言处理 Ubuntu
从0开始在阿里云上搭建基于通义千问的钉钉智能问答机器人
本文描述在阿里云上从0开始构建一个LLM智能问答钉钉机器人。LLM直接调用了阿里云百炼平台提供的调用服务。
从0开始在阿里云上搭建基于通义千问的钉钉智能问答机器人
|
机器人
陌陌自动回复消息脚本,陌陌自动打招呼回复机器人插件,自动聊天智能版
这是一款为陌陌用户设计的自动回复软件,旨在解决用户无法及时回复消息的问题,提高成交率和有效粉丝数。软件通过自动化操作实现消息检测与回复功能
|
机器学习/深度学习 人工智能 自然语言处理
TsingtaoAI具身智能机器人开发套件及实训方案
该产品套件创新性地融合了先进大模型技术、深度相机与多轴协作机械臂技术,构建了一个功能强大、灵活易用的人机协作解决方案。其核心在于将智能决策、精准感知与高效执行完美结合,为高校实训领域的发展注入新动力。
1251 10
|
开发框架 人工智能 大数据
HarmonyOS Next~HarmonyOS SDK应用服务:开发者的全新技术生态
本文深入解析了HarmonyOS SDK应用服务的技术架构与开发优势,涵盖其分布式服务框架、核心特性和开发流程。HarmonyOS凭借统一开发框架、高效跨设备协同及低延迟系统服务,为开发者提供全新技术生态。未来,随着生态完善,SDK将在智能设备场景支持、AI与大数据集成等方面持续演进,助力开发者释放创新潜力。
537 0
|
人工智能 自然语言处理 安全
Deepseek 的 “灵魂”,宇树的 “躯体”,智能机器人还缺一个 “万万不能”
法思诺创新探讨智能机器人产业的发展,指出Deepseek的AI“灵魂”与宇树的机器人“躯体”虽技术先进,但缺乏关键的商业模式。文章分析了两者在硬件和软件领域的困境,并提出通过软硬一体化结合及明确商业模式,才能实现真正实用的智能机器人。未来,需聚焦高频刚需场景、优化付费体验、推动技术创新,让智能机器人走进千家万户。法思诺提供相关课程与咨询服务,助力行业突破。
387 0
|
传感器 机器学习/深度学习 人工智能
自己都站不稳,怎么护理人?智能机器人的自主平衡问题,用TRIZ和DeepSeek有解吗?
法思诺创新探讨机器人自主平衡难题,结合TRIZ创新理论与DeepSeek大模型,为仿人机器人动态平衡提供解决方案。文章分析了机器人平衡差的原因,包括复杂环境、传感器限制、算法难度和机械设计挑战等,并提出通过TRIZ原理(如矛盾识别、理想解)与DeepSeek的AI能力(如数据学习、强化学习)协同优化平衡性能。展望未来,2024-2028年将实现从实验室验证到家用场景落地,推动消费级人形机器人发展。
576 0
|
人工智能 自然语言处理 机器人
9.9K star!大模型原生即时通信机器人平台,这个开源项目让AI对话更智能!
"😎高稳定、🧩支持插件、🦄多模态 - 大模型原生即时通信机器人平台"
494 0
|
人工智能 自然语言处理 算法
具身智能高校实训解决方案 ----从AI大模型+机器人到通用具身智能
在具身智能的发展历程中,AI 大模型的出现成为了关键的推动力量。高校作为培养未来科技人才的摇篮,需要紧跟这一前沿趋势,开展具身智能实训课程。通过将 AI 大模型与具备 3D 视觉的机器人相结合,为学生搭建一个实践平台。
2024 64
|
人工智能 机器人 API
AppFlow:无代码部署Dify作为钉钉智能机器人
本文介绍如何通过计算巢AppFlow完成Dify的无代码部署,并将其配置到钉钉中作为智能机器人使用。首先,在钉钉开放平台创建应用,获取Client ID和Client Secret。接着,创建消息卡片模板并授予应用发送权限。然后,使用AppFlow模板创建连接流,配置Dify鉴权凭证及钉钉连接凭证,完成连接流的发布。最后,在钉钉应用中配置机器人,发布应用版本,实现与Dify应用的对话功能。
3188 7
AppFlow:无代码部署Dify作为钉钉智能机器人

热门文章

最新文章