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

最近公司接手到了一个有挑战的项目,很有意思,拿出来和大家分享下,交流下开发过程中的一些收获和感悟。

智能电话机器人

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

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

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

需要做到以下目标:

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

实现方案

  根据上述的需求,我发现有两个问题是比较重要的:

  1. 采用什么设备来完成拨号,按键等等与1xx86的交互?
  2. 用什么技术来实现语音识别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机的声卡线路输入LINE IN接口,(这里注意,一定是线路输入LINE IN,不能使用麦克风MIC接口,麦克风接口由于阻抗不匹配,导致接受到的音质非常差,不能使用)

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

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

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

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

  

  PS:未完待续

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

时间: 2024-10-11 18:17:47

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

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

接上文 现在,硬件上的准备工作做完了. 下一步,先打开Modem的电源,用SecureCRT连接串口,敲入些AT命令,看看Modem能否执行. 这里简单说一下AT命令: AT命令有两种解释一种是调制解调器命令语言,简单来说就是一些固定格式的字符串,我们通过串口向Modem发送AT命令的字符串,Modem就会按照 命令去执行不同的操作.AT命令的百度百科请看这里,具体的命令格式和使用方法请自行百度. 我们先来试试拨号 向串口发送命令 : atdt10086;\r 不出意外的话Modem就会摘机,并

Microsoft Speech SDK开发包 使用

下载开发包.我们首先从微软的官网上面下载开发包,下载地址如下: http://www.microsoft.com/en-us/download/details.aspx?id=10121我们主要下载三个关键的程序:SpeechSDK51.exe . msttss22L.exe.SpeechSDK51LangPack.exe,将这三个下载下来即可.   安装sdk.分别将下载的三个安装包解压安装就可以了(记住安装目录).   环境配置.这里我们需要将您安装的Microsoft Speech SDK

百度语音识别开放平台SDK使用方法

百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的使用方法. 在线SDK是以JAR包和动态链接库形式发布和使用,可以从百度开放云平台网站中下载SDK及使用说明文档. http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/voice 完成语音SDK的集成分以下几步,本文将一步步介绍SDK集成方法. 1.注册开放开放平台 点击管理控制台,选择移动应用管理 选择创建应用,填写应用名称     可以看到右

语音识别技术

通过谷歌语音接口的实现语音识别 最近在项目中有需要实现语音识别的功能.折腾了几天才搞好.刚开始做的时候没点头绪 ,网上找的资料都是乱七八糟的,要不就是非常古老的实现方法,一些简单的代码片段.所以我决定把我的经验分享给大家. 要在IOS中实现语音识别流程如下: 录音->pcm格式->转换wav->转换flac->向谷歌发送请求->等待返回的json数据->解析数据; 首先如果你要使用谷歌的接口实现语音识别必须知道下面着几点: 1.如何发送POST请求.(可以使用开源库AS

语音识别技术简介

在人际交往中,言语是最自然并且最直接的方式之一.随着技术的进步,越来越多的人们也期望计算机能够具备与人进行言语沟通的能力,因此,语音识别这一技术也越来越受到关注.尤其,随着深度学习技术应用在语音识别技术中,使得语音识别的性能得到了显著提升,也使得语音识别技术的普及成为了现实. 以上是废话,下面开始正文. 自动语音识别技术,简单来说其实就是利用计算机将语音信号自动转换为文本的一项技术.这项技术同时也是机器理解人类言语的第一个也是很重要的一个过程. 为了进一步解释计算机如何实现语音到文字的转换这一过

开发人工智能电话机器人必须掌握的语言,Python

要说近几年科技圈什么最火热,无疑就是人工智能,各大科技公司纷纷投入这个浪潮之中,很多从事的是毫不相关的行业的企业也投入到了人工智能的开发与应用中,也想在里面分得一勺半羹.------------------提及人工智能,就不得不说到和他息息相关的开发工具,python就是最接近AI的预言之一.总所周知,机器学习和深度学习是开发人工智能两个非常重要的模块,而 Python拥有keras.Numpy.matplotlib.sklearn.等大量的库,像matplotlib.sklearn.panda

基于DNN-HMM的语音识别技术

基于DNN-HMM的语音识别声学模型结构如下图所示,与传统的基于GMM-HMM的声学模型相比,唯一不同点在于用DNN替换了GMM来对输入语音信号的观察概率进行建模.DNN与GMM相比具有如下优点: DNN不需要对声学特征所服从的分布进行假设: DNN的输入可以采用连续的拼接帧,因而可以更好地利用上下文的信息: DNN的训练过程可以采用随机优化算法来实现,而不是采用传统的批优化算法,因此当训练数据规模较大时也能进行非常高效的训练,显然,训练数据规模越大,所得到的声学模型就越精确,也就越有利于提高语

Microsoft speech sdk 5.1 text to speech

//用于将文字转化成的语音保存成本地的pcm文件 long CPlugin14Ctrl::OnSpeak(LPCTSTR uContents, long uVolume) { // TODO: Add your dispatch handler code here CString cStr=uContents ; //AfxMessageBox(cStr); //COM初始化: CComPtr<ISpVoice> m_cpVoice; HRESULT hr = m_cpVoice.CoCrea

一套基于模板匹配的语音识别技术 提取语音的特征,并建立模板库 可以将语音识别技术应用于机器人

视图类,废话少说,看看带注释的源码 #include "stdafx.h" #include "robot.h" #include"Label.h" #include "robotDoc.h" #include "robotView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE