博舍

项目:智能语音对话机器人 智能机器人怎样语音对话

项目:智能语音对话机器人

技术点:

●C++STL●http第三方库●图灵机器人●百度语音识别和语音识别●Linux系统/网络编程●各种第三方库和第三方工具的安装与使用

项目简介使用C++编写一个智能AI对话和语音命令执行的语音管理工具,其中可执行命令支持配置。主要采用C++进程编写,当程序启动后,加载配置文件,启动录音功能进行录音,调用百度语音识别平台对所录音文件进行识别;再对所识别到的文字进行判断,是命令还是普通对话,命令则执行系统命令执行模块;普通对话则交给图灵机器人进行交流,所返回的文字交给百度语音合成平台,启动播放功能,则成功进行对话。准备工作使用图灵机器人实现对话,需要注册图灵机器人,拥有一个属于自己的机器人使用百度语音识别和语音合成,同样也需要注册,在之后的使用中,我们选择的技术文档为C++SDK,需要下载百度C++语音识别SDK安装jsoncpp、安装openssl、安装libcurl(需要支持https)还要准备录音和播放工具,在我的Centos7上有系统自带的录音工具arecord,安装vlc/cvlc播放器编码过程

●先建立项目目录,创建工程文件,引入百度语音识别SDK

#mkdirBoyfriend#lsbuild.sh构建项目的shell脚本,简单实现command.etc语音命令配置文件Boyfriend.cc源文件Boyfriend.hpp核心代码Makefilespeech百度语音识别SDKtemp_file保存临时语音文件目录

核心代码

LInux语音AI相关代码

#Boyfriend.hpp//1、创建相关类,包含相关头文件#pragmaonce#include#include#include#include#include#include#include#include#include#include#include#include#include"base/http.h"#include"speech.h"//#defineTTS_PATH"temp_file/tts.mp3"#defineTTS_PATH"temp_file/tts.wav"#defineASR_PATH"temp_file/asr.wav"#defineCMD_ETC"command.etc"#defineLOG"log.txt"classUtil{private:staticpthread_tid;public:staticboolExec(std::stringcommand,boolis_print){if(!is_print){command+=">/dev/null2>&1";}FILE*fp=popen(command.c_str(),"r");if(nullptr==fp){std::cerrfwrite(&ch,1,1,stdout);}}pclose(fp);returntrue;}staticvoid*ThreadRun(void*arg){constchar*tips=(char*)arg;inti=0;charbar[103]={0};constchar*lable="|/-\";for(;ipthread_create(&id,NULL,ThreadRun,(void*)tips.c_str());}staticvoidPrintEnd(){pthread_cancel(id);}};pthread_tUtil::id;//2、采用图灵机器人,进行智能对话classRobot{private:std::stringurl;std::stringapi_key;std::stringuser_id;aip::HttpClientclient;private:boolIsCodeLegal(intcode){boolresult=false;switch(code){case5000:case6000:break;case10004:result=true;break;default:result=true;break;}returnresult;}std::stringMessageToJson(std::string&message){Json::Valueroot;Json::StreamWriterBuilderwb;std::ostringstreamss;Json::Valueitem_;item_["text"]=message;Json::Valueitem;item["inputText"]=item_;root["reqType"]=0;//textroot["perception"]=item;item.clear();item["apiKey"]=api_key;item["userId"]=user_id;root["userInfo"]=item;std::unique_ptrsw(wb.newStreamWriter());sw->write(root,&ss);std::stringjson_string=ss.str();//std::coutstd::cerrstd::cerrthis->url="http://openapi.tuling123.com/openapi/api/v2";this->api_key="b7fa07e47cbe46a191b8190cc004ed60";this->user_id=id;}std::stringTalk(std::stringmessage){std::stringjson=MessageToJson(message);std::stringresponce=RequestTL(json);std::stringecho_message=JsonToEchoMessage(responce);returnecho_message;}~Robot(){}};//3、语音识别SpeechRecognitionclassSpeechRec{private://填写appid,填写ApiKey,填写SecretKey.std::stringapp_id;std::stringapi_key;std::stringsecret_key;aip::Speech*client;private:boolIsCodeLegal(intcode){boolresult=false;switch(code){case0:result=true;break;default:break;}returnresult;}public:SpeechRec(){app_id="16943059";api_key="q9vkbqwjwKjvoPgt69NTt36F";secret_key="8lbil7MTruiGKHQdSsIT1WB97rX4ncsl";client=newaip::Speech(app_id,api_key,secret_key);}//4、语音识别AutomaticSpeechRecognitionboolASR(std::stringpath,std::string&out){std::mapoptions;options["dev_pid"]="1536";std::stringfile_content;aip::get_file_content(ASR_PATH,&file_content);Json::Valueresult=client->recognize(file_content,"wav",16000,options);//std::coutboolret;std::ofstreamofile;std::stringret_file;std::mapoptions;options["spd"]="5";//speechspeed0~15options["pit"]="7";//0-15options["vol"]="15";//0-15options["per"]="110";//1034度博文=106度小童=110度小萌=111度米朵=103度小娇=5options["aue"]="6";ofile.open(TTS_PATH,std::ios::out|std::ios::binary);Json::Valueresult=client->text2audio(message,options,ret_file);if(!ret_file.empty()){ofile}};//6、核心代码-服务器&&系统相关classBoyfriend{private:Robotrt;SpeechRecsr;std::unordered_mapcommands;private:boolRecord(){//std::cout};boolLoadEtc(){std::ifstreamin(CMD_ETC);if(!in.is_open()){std::cerrstd::cerrreturnfalse;}cmd=iter->second;}voidRun(){#ifdef_LOG_intfd=open(LOG,O_WRONLY|O_CREAT,0644);if(fdif(this->Record()){std::stringmessage;if(sr.ASR(ASR_PATH,message)){//1.commandstd::stringcmd="";if(IsCommand(message,cmd)){std::coutthis->Play();}exit(0);}//2.Tuling//std::cout//std::cerr}};

●调用逻辑

#Boyfriend.cc#include"Boyfriend.hpp"usingnamespacestd;intmain(){//Robotr;//stringstr;//volatileboolquit=false;//while(!quit){//cout>str;//std::strings=r.Talk(str);//coutJson::Valueroot;Json::StreamWriterBuilderwb;std::ostringstreamos;root["Name"]="zhangsan";root["Age"]=26;root["Lang"]="c++";std::unique_ptrjsonWriter(wb.newStreamWriter());jsonWriter->write(root,&os);std::strings=os.str();std::cout

智能语音:机器人是如何听懂你说话的

随着8月29日在上海世博中心2019年世界人工智能大会正式开幕,再次将全球人的眼光汇聚到人工智能领域。通过马云、李彦宏等各领域的带头人的发言中,我们不难发现,当今对于人工智能的关注点,已经从使它如何“高大上”转变到如何落地,如何通过人工智能降低成本、提高效率。这说明人工智能已经逐渐的深入到我们的生活当中了。

人工智能是一个运用很广泛的领域,今天我们仅从当前运用最常见、也是我们主要研究的方面——智能语音来简单谈一下。

在今年的世界人工智能大会上,科大讯飞的董事长刘庆峰在发言中,将智能语音分为三个阶段:分别是感知智能、认知智能、决策智能。感知智能是与人类的感知所息息相关的,能感知到人类所发出的信息,并根据固定的规则给予固定的答复;而认知智能则是讲感知到的信息进行分析处理,清晰准确得知人类的意图然后在进行回复;而最终的决策智能呢,则可以通过分析的人类一图再次进行判断,进行“决策”使用数据库中哪部分内容进行回复。而达到了决策智能的智能语音,真正可以做到以假乱真的。也就是达到图灵实验的水平。

当然智能语音并不是使用Python简单的敲出:

whileTure:

a=input()

print(a)

就可以实现的。智能语音也需要像孩童时期的人一样,一点一点的学会如何说活。不仅要识字理解语义,还要总结语言规则、方言等,还有学会这些规则来通过语言表达自己的想法,而只能语音要达到这个水平还遥遥无期。

当前的智能语音,主要是由三部分组成:语音识别(ASR),自然语义处理(NLP)和语音合成(TTS)。

语音识别是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语言,语音识别技术就是让机器通过识别和理解过程,把语音信号转变为相应的文本或命令的高技术。语音识别系统本质上是一种模式识别系统,包括特征提取、模式匹配、参考模式库等三个基本单元,它的基本结构如下图所示:

语音识别系统构建过程整体上包括两大部分:训练和识别。

训练通常是离线完成的,对预先收集好的海量语音、语言数据库进行信号处理和知识挖掘,获取语音识别系统所需要的“声学模型”和“语言模型”;

而识别过程通常是在线完成的,对用户实时的语音进行自动识别。

识别过程通常又可以分为“前端”和“后端”两大模块:

“前端”模块主要的作用是进行端点检测(去除多余的静音和非说话声)、降噪、特征提取等;

“后端”模块的作用是利用训练好的“声学模型”和“语言模型”对用户说话的特征向量进行统计模式识别(又称“解码”),得到其包含的文字信息,此外,后端模块还存在一个“自适应”的反馈模块,可以对用户的语音进行自学习,从而对“声学模型”和“语音模型”进行必要的“校正”,进一步提高识别的准确率。

语义识别是人工智能的重要方向之一,如果语音技术相当于人的嘴巴和耳朵,负责表达和获取,那语义技术则相当于人的大脑,负责思考和信息处理,解决的是“听得懂”的问题。语义识别最大的作用是改变人机交互模式,将人机交互由最原始的鼠标、键盘交互转变为语音对话的方式。

语音合成,又称文语转换(TexttoSpeech)技术,能将任意文字信息实时转化为标准流畅的语音并朗读出来,相当于给机器装上了一个嘴巴,它涉及到声学、语言学、数字信号处理、计算机科学等多个学科技术,是人工智能信息处理领域的一项前沿技术,解决的主要问题就是如何将文字信息转化为可听的声音信息。

语音合成和语音识别技术是实现人机语音通话所必需的两项关键技术,使机器具有类似于人一样的说话能力。

这一步做的事情是把文本转化成音素序列,并标出每个音素的起止时间、频率变化等信息。

作为一个预处理步骤,它的重要性经常被忽视,但是它涉及到很多值得研究的问题,比如拼写相同但读音不同的词的区分、缩写的处理、停顿位置的确定,等等。

音素:音素(phone),是语音中的最小的单位,依据音节里的发音动作来分析,一个动作构成一个音素。音素分为元音、辅音两大类。

音节:音节在语音学上指由一个或数个音素组成的语音结构基本单位;而音素是最小的语音单位。如”普通话”,由三个音节组成,可以分析成”p,u,t,o,ng,h,u,a”八个音素。

语音合成:

狭义上这一步专指根据音素序列(以及标注好的起止时间、频率变化等信息)生成语音,广义上它也可以包括文本处理的步骤。

这一步主要有三类方法:

拼接法,即从事先录制的大量语音中,选择所需的基本单位拼接而成。这样的单位可以是音节、音素等等;为了追求合成语音的连贯性,也常常用使用双音子(从一个音素的中央到下一个音素的中央)作为单位。拼接法合成的语音质量较高,但它需要录制大量语音以保证覆盖率。

参数法,即根据统计模型来产生每时每刻的语音参数(包括基频、共振峰频率等),然后把这些参数转化为波形。参数法也需要事先录制语音进行训练,但它并不需要100%的覆盖率。参数法合成出的语音质量比拼接法差一些。

声道模拟法。参数法利用的参数是语音信号的性质,它并不关注语音的产生过程。与此相反,声道模拟法则是建立声道的物理模型,通过这个物理模型产生波形。这种方法的理论看起来很优美,但由于语音的产生过程实在是太复杂,所以实用价值并不高。

当前我们还正在处于感知智能到认知智能的阶段当中,但是我们的生活因为人工智能的出现已经发生了天翻地覆的变化。现在人工智能已经逐渐的进入到我们的生活中,无论是大型商城的智能机器人终端,还是手机上的智能语音系统,他们都在越来越多的影响着我们的生活,但是这只是刚刚起步,未来的人工智能会将我们的生活带来质的飞跃。

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

上一篇

下一篇