博舍

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

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

现在,硬件上的准备工作做完了.

下一步,先打开Modem的电源,用SecureCRT,有电话机器人,VOS线路问题或要演示站AI技术支持,外呼中心搭建找博主。VX_ID:3307623172连接串口,敲入些AT命令,看看Modem能否执行.

这里简单说一下AT命令:

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

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

我们先来试试拨号

向串口发送命令:atdt10086;

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

然后是按键交互

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

按键命令:atd,1,#;

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

然后是挂机

挂机的命令是:ath;

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

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

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

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

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

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

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

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

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

usingSystem.Speech.Recognition;usingSystem.Speech.Synthesis;

引擎使用方法:

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

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

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

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

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

usingSystem.Speech.Synthesis;usingSystem.Diagnostics;

namespaceSp10086{publicclassSRecognition{//////语音识别引擎///publicSpeechRecognitionEngineRecognizer{get;set;}

//重载构造函数publicSRecognition():this(newstring[]{""}){}publicSRecognition(string[]fg)//创建关键词语列表{CultureInfomyCIintl=newCultureInfo("zh-CN");foreach(RecognizerInfoconfiginSpeechRecognitionEngine.InstalledRecognizers())//获取所有语音引擎{if(config.Culture.Equals(myCIintl)&&config.Id=="MS-2052-80-DESK"){Recognizer=newSpeechRecognitionEngine(config);Recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备break;}//选择中文的识别引擎}if(Recognizer!=null){InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎}else{MessageBox.Show("创建语音识别失败");}}//////初始化,加载关键词组//////关键词组privatevoidInitializeSpeechRecognitionEngine(string[]fg){GrammarcustomGrammar=CreateCustomGrammar(fg);//根据关键字数组建立语法Recognizer.UnloadAllGrammars();Recognizer.LoadGrammar(customGrammar);//加载语法}//////开始识别///publicvoidBeginRec(){TurnSpeechRecognitionOn();}//////停止语音识别引擎///publicvoidStopRec(){TurnSpeechRecognitionOff();}//////加载关键词组//////关键词组publicvoidChangeKeywords(string[]fg){InitializeSpeechRecognitionEngine(fg);System.Threading.Thread.Sleep(100);foreach(Grammarginthis.Recognizer.Grammars){Debug.WriteLine("正在听:"+g.Name);}}//////加载关键词组//////关键词组publicvoidChangeKeywords(stringprefix,string[]fg){GrammarBuildergrammarBuilder=newGrammarBuilder(prefix);stringwords=string.Empty;foreach(stringsinfg){words+="("+prefix+s+")";}grammarBuilder.Append(newChoices(fg));//根据关键字数组建立语法Recognizer.UnloadAllGrammars();Recognizer.LoadGrammar(newGrammar(grammarBuilder){Name=words});System.Threading.Thread.Sleep(100);foreach(Grammarginthis.Recognizer.Grammars){Debug.WriteLine("正在听:"+g.Name);}}//////创造自定义语法//////关键词组///publicvirtualGrammarCreateCustomGrammar(string[]fg){GrammarBuildergrammarBuilder=newGrammarBuilder();grammarBuilder.Append(newChoices(fg));stringwords=string.Empty;foreach(stringsinfg){words+="("+s+")";}returnnewGrammar(grammarBuilder){Name=words};}//////启动语音识别函数///privatevoidTurnSpeechRecognitionOn(){if(Recognizer!=null){Recognizer.RecognizeAsync(RecognizeMode.Multiple);//识别模式为连续识别}else{MessageBox.Show("创建语音识别失败");}}//////关闭语音识别函数///privatevoidTurnSpeechRecognitionOff(){if(Recognizer!=null){Recognizer.RecognizeAsyncCancel();}else{MessageBox.Show("创建语音识别失败");}}}

}复制代码

主程序调用方法如下:

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

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

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

}复制代码过程如下:

拨通电话

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

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

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

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

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

最后挂机,完成.

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

智能电话机器人原委是这样的,有一个大佬,手里有好多好多,总之就是好多手机充x卡,他想把这些充x卡充值到不同的用户手机号里。有的朋友接触过的,会说“可以和移动去谈,然后搞到移动的接口,根据接口开发程序,然后把充x卡密码都弄进数据库里,用程序读取,之后调用移动接口完成充值。”说得好,漂亮!而且充x卡密码存到数据库里面这件事,大佬已经找人没日没夜加班干活全都录入到数据库里了。

但是事实很悲催,由于各种原因,不能通过移动的接口来做。只能通过1xx86语音电话来做。于是有了这个项目需求。

需求也不复杂,就是需要一个电话机器人,来模拟人工,拨打电话,根据对方说的内容,按对应按键进入指定菜单或者输入一些数据(例如:手机号码、充x卡密码),最后也是最关键的,需要识别出对方说的提示,是成功还是失败来确定操作是否成功,并将操作结果记录在数据库中。

需要做到以下目标:通过编程控制设备完成摘机,拨号等操作,直到拨通某服务电话(例如:1xx86)能够进行语音识别,识别出电话中对方所说的关键词(例如:普通话请按1)根据关键词(例如:普通话)执行不同的拨号操作,例如:按1正确输入所需数据,例如:手机号,和充x卡密码根据对方所说的语音,识别出操作是否成功(例如:充值成功)操作所需数据,以及操作产生的记录信息均存放在数据库中程序要健壮,能应对各种异常情况。例如:语音识别不出,或者不准确,有误判,电话线路质量不好,电话拨不通等等。实现方案根据上述的需求,我发现有两个问题是比较重要的:

采用什么设备来完成拨号,按键等等与1xx86的交互?用什么技术来实现语音识别1xx86那边所说的语音?针对这两个技术问题,我做了一下技术调查,问题1,用什么设备与1xx86交互?

最开始想到的是语音IVR,做了一些调查,但是发现这个东西不是我们需要的。IVR的主要功能是作为一个语音电话的"Server",也就是被叫方,用户拨号进来,IVR播放语音给用户听,然后根据用户的按键实现不同的操作。

也就是说IVR是作为被叫方,做应答的。这显然不是我们需要的,我们需要的是作为"Client",也就是主叫方,去主动拨打1xx86的,然后按键选择不同菜单,或者输入手机号等等信息,不需要播放语音,也不需要识别按键。我们需要的是能够拨号,能够进行按键操作。

综上所述,IVR被PASS。

之后,又想到了一种方案,那就是Modem!!!

什么?你想到了那个会吱吱乱叫的老式拨号56k猫?没错,不过我需要的是一个支持AT命令的可编程Modem.去网上搜了一下,还真有卖这种设备的,他们称之为工业Modem.

说做就做,果断找到销售,购买了一个工业Modem。东西很不起眼,一个铁盒子,上面插口不少:电源AC,串口RS232,话筒MIC,喇叭SPK,电话机PHONE,电话线LINE。

我需要的有串口RS232,喇叭SPK,电话线LINE.

用一根音频线连接Modem的喇叭SPK口和PC机的声卡线路输入LINEIN接口,(这里注意,一定是线路输入LINEIN,不能使用麦克风MIC接口,麦克风接口由于阻抗不匹配,导致接受到的音质非常差,不能使用)

用串口线连接Modem的串口和PC机的串口.

把电话线插在Modem的LINE口上.

接下来打开Modem的电源,用SecureCRT连接串口,敲入些AT命令,看看Modem能否执行.

好,做到这里硬件上的准备工作就算做完了. 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇