精华内容
下载资源
问答
  • Python3从零开始搭建一个语音对话机器人

    万次阅读 多人点赞 2019-07-19 17:00:20
    从零开始搭建一个语音对话机器人 目录 01-初心缘由 02-准备工作 03-语音机器人的搭建思路 04-语音生成音频文件 05-音频文件转文字STT 06-与图灵机器人对话 07-文字转语音 08-语音对话机器人的完整代码 09-...

    从零开始搭建一个语音对话机器人

    目录

    01-初心缘由

    02-准备工作

    03-语音机器人的搭建思路

    04-语音生成音频文件

    05-音频文件转文字STT

    06-与图灵机器人对话

    07-文字转语音

    08-语音对话机器人的完整代码

    09-结束语

    10-有问必答


    01-初心缘由

            最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其中包含了很多算法的演变,目前来说最流行的语音识别算法主要是依赖于深度学习的神经网络算法,其中RNN扮演了非常重要的作用,深度学习的应用真正让语音识别达到了商用级别。然后我想动手自己做一个语音识别系统,从GitHub上下载了两个流行的开源项目MASR和ASRT来进行复现,发现语音识别的效果没有写的那么好,其中如果要从零来训练自己的语言模型势必会非常耗时。

            因此,就有了一个新的想法,借助一些开源的语音识别SDK来实现语音识别,来看看他们语音识别的效果如何。于是想到了百度和科大讯飞,然后就百度了一下,百度搜索举贤不避亲的给我推荐了百度AI开放平台!然后查看了百度语音识别的技术文档,发现对python的支持非常友好,而科大讯飞好像没有提供对python的接口支持,因而选定了百度。

            虽然百度目前槽点很多,但是不得不说百度在AI方面的投入和开放是值得点赞的!百度的AI开放平台确实为开发者们带来很多的便利性,开放了非常多的AI服务,大家自行去注册使用,百度大脑AI开放平台地址:http://ai.baidu.com/   (PS:我确实没收广告费!)

            经过体验发现百度的语音识别准确率高的吓人,完爆了GitHub上的开源项目N条街,然后在CSDN浏览各位博主的博客时发现,用百度语音识别的API和图灵机器人的API可以做一个实时语音对话的机器人,感觉特别兴奋,从而决定搭建一个自己的语音对话机器人。目前,我已经实现了我的语音对话机器人,因此特意来分享一下整个的实现过程和遇到的坑,让大家可以快速的构建你们的语音对话机器人。好啦,我们开始吧!

    02-准备工作

    • (1)准备python开发环境

      需要准备的python包包括:speech_recognition(语音识别包)、pyaudio(录音接口)、wave(打开录音文件并设置音频参数)、pyttsx3(文本转语音)、json(解析json串)、requests(get/post)、baid_aip(百度语音识别的aip)。

    • (2)准备百度API

    登录百度AI开放平台语音识别:https://ai.baidu.com/tech/speech/asr  ,如果没有账号自己注册即可,免费试用哦。

    点击技术文档:阅读语音识别的技术文档,重点查看API文档和Python SDK,了解如何在python中调用API接口。

    点击立即使用:进入到服务界面,创建应用。记住最重要的App ID、API Key、Secret Key,后面调用时需要用到。

    • (3)准备图灵机器人:

    图灵机器人大脑具备强大的中文语义分析能力,可准确理解中文含义并作出回应,是最擅长聊中文的机器人大脑,赋予软硬件产品自然流畅的人机对话能力。图灵机器人是中文语境下智能度最高的“机器人大脑”,是全球较为先进的机器人中文语言认知与计算平台,图灵机器人对中文语义理解准确率已达90%,可为智能化软硬件产品提供中文语义分析、自然语言对话、深度问答等人工智能技术服务。——源于百科(好吧,又和百度扯上点关系了。)

    总之,就是需要你去图灵机器人官网http://www.turingapi.com/注册成功后,构建一个属于你的图灵机器人,用于后续将翻译后的文本内容对图灵机器人提问获取回答,然后我们通过TTS处理就可以获取语音输出了。

    注册后创建自己的机器人,然后在机器人设置的终端设置中查看自己的apikey(这个key非常重要),另外一定要把密钥开关关闭,不然后面在调用api时会报3001错误,无法调用图灵机器人(此处有坑,已填)!

    图灵机器人未进行身份认证时,是不能够进行调用的,如果调用会出现“请求次数超限制”的问题,通过个人身份认证后,每天能够调用100次,这是免费版。100次当然是不够用的,如果你想要更多的服务,就只能购买会员了,99和299每月的套餐,具体看下图。如果是自己玩,那就免费版,如果是开发,可以考虑99的,如果是做一个产品,那就得企业采购了,咱们没那么土豪!

    03-语音机器人的搭建思路

    1、首先明确我们要实现的目标,是要实现纯语音对话聊天,不需要输入文字交流。我们实时说,机器人实时回复,真正实现语音交互对话。

    2、整个过程的实现流程是这样的,我们说一句话,通过录音保存为语音文件,然后调用百度API实现语音转文本STT,再然后调用图灵机器人API将文本输入得到图灵机器人的回复,最后将回复的文本转成语音输出TTS,就这样我们就实现了和机器人的语音对话了!是不是有点绕,来个流程图吧!

    3、语音对话机器人的构建具体流程图,就是各种掉API,千万不要觉得头晕哦,思路清晰才能走下去。

    04-语音生成音频文件

            语音生产文件就需要进行录音,将我们说的话保存下来,至于保存的格式我一般都是保存为wav,其他格式支持pcm,不太建议mp3,因为需要多次转换。【百度服务端会将非pcm格式,转为pcm格式,因此使用wav会有额外的转换耗时,但是windows自带播放器识别不了pcm格式的,所以我还是喜欢用wav格式】

    第一种录音方式:使用speech_recognition包进行录音,这个录音出来的效果比较好,而且代码量非常少。

    import speech_recognition as sr
    
    # Use SpeechRecognition to record 使用语音识别包录制音频
    def my_record(rate=16000):
        r = sr.Recognizer()
        with sr.Microphone(sample_rate=rate) as source:
            print("please say something")
            audio = r.listen(source)
    
        with open("voices/myvoices.wav", "wb") as f:
            f.write(audio.get_wav_data())
        print("录音完成!")
    
    my_record()

    第二种录音方式:使用wave和pyaudio包进行录音,在python中直接使用pip install即可。

    import wave
    from pyaudio import PyAudio, paInt16
    
    framerate = 16000  # 采样率
    num_samples = 2000  # 采样点
    channels = 1  # 声道
    sampwidth = 2  # 采样宽度2bytes
    FILEPATH = 'voices/myvoices.wav'
    
    
    def save_wave_file(filepath, data):
        wf = wave.open(filepath, 'wb')
        wf.setnchannels(channels)
        wf.setsampwidth(sampwidth)
        wf.setframerate(framerate)
        wf.writeframes(b''.join(data))
        wf.close()
    
    
    #录音
    def my_record():
        pa = PyAudio()
        #打开一个新的音频stream
        stream = pa.open(format=paInt16, channels=channels,
                         rate=framerate, input=True, frames_per_buffer=num_samples)
        my_buf = [] #存放录音数据
    
        t = time.time()
        print('正在录音...')
     
        while time.time() < t + 10:  # 设置录音时间(秒)
        	#循环read,每次read 2000frames
            string_audio_data = stream.read(num_samples)
            my_buf.append(string_audio_data)
        print('录音结束.')
        save_wave_file(FILEPATH, my_buf)
        stream.close()
    
    

    05-音频文件转文字STT

           我们已经在上面获取到了音频文件,那要怎么把音频文件转化为文字呢?在这里,我们就需要调用百度的语音识别API接口,同时我们需要安装这个接口包,导入模块:pip install baidu_aip。导入我们需要的模块名,然后将音频文件发送给出去,返回文字。

    # 音频文件转文字:采用百度的语音识别python-SDK
    # 百度语音识别API配置参数
    from aip import AipSpeech
    
    APP_ID = 'your app_id'
    API_KEY = 'your api_key'
    SECRET_KEY = 'your secret_key'
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    path = 'voices/myvoices.wav'
    
    
    # 将语音转文本STT
    def listen():
        # 读取录音文件
        with open(path, 'rb') as fp:
            voices = fp.read()
        try:
            # 参数dev_pid:1536普通话(支持简单的英文识别)、1537普通话(纯中文识别)、1737英语、1637粤语、1837四川话、1936普通话远场
            result = client.asr(voices, 'wav', 16000, {'dev_pid': 1537, })
            # result = CLIENT.asr(get_file_content(path), 'wav', 16000, {'lan': 'zh', })
            # print(result)
            # print(result['result'][0])
            # print(result)
            result_text = result["result"][0]
            print("you said: " + result_text)
            return result_text
        except KeyError:
            print("KeyError")

    06-与图灵机器人对话

           上一步我们已经成功将我们的声音转化为文字了,然后我们再调用图灵机器人的API接口,做自动应答。图灵机器人对中文的识别准确率高达90%,是目前中文语境下智能度最高的机器人。有很多在Python中使用图灵机器人API的博客,但都是1.0版本,本博客介绍的是在Python中使用图灵机器人API v2.0的方法,1.0版本的调用方式已失效。

    代码如下(这里需要导入requests、json模块):

    # 与机器人对话:调用的是图灵机器人
    import requests
    import json
    
    # 图灵机器人的API_KEY、API_URL
    turing_api_key = "your turing_api_key"
    api_url = "http://openapi.tuling123.com/openapi/api/v2"  # 图灵机器人api网址
    headers = {'Content-Type': 'application/json;charset=UTF-8'}
    
    
    # 图灵机器人回复
    def Turing(text_words=""):
        req = {
            "reqType": 0,
            "perception": {
                "inputText": {
                    "text": text_words
                },
    
                "selfInfo": {
                    "location": {
                        "city": "北京",
                        "province": "北京",
                        "street": "车公庄西大街"
                    }
                }
            },
            "userInfo": {
                "apiKey": turing_api_key,  # 你的图灵机器人apiKey
                "userId": "Nieson"  # 用户唯一标识(随便填, 非密钥)
            }
        }
    
        req["perception"]["inputText"]["text"] = text_words
        response = requests.request("post", api_url, json=req, headers=headers)
        response_dict = json.loads(response.text)
    
        result = response_dict["results"][0]["values"]["text"]
        print("AI Robot said: " + result)
        return result
    

    07-文字转语音

          我们得到了图灵机器人的回复之后,就需要把结果转化为语音输出,从而实现语音交互。在python中我们如何将文字转为语音并输出呢?这里就需要用到另一个模块pyttsx3,它会将文字转为语音。

    import pyttsx3
    
    # 初始化语音
    engine = pyttsx3.init()  # 初始化语音库
    # 设置语速
    rate = engine.getProperty('rate')
    engine.setProperty('rate', rate-50)
    # 输出语音
    engine.say("你好,很高兴认识你!")  # 合成语音
    engine.runAndWait()

    使用python进行编程就是有很多好处,比如音频的输出我们就可以采用多种方式,下面提供一种更加简便的音频输出方式:

    import win32com.client
    
    speaker = win32com.client.Dispatch("SAPI.SpVoice")
    speaker.Speak("我是语音助手,小灵!")

    好了,至此,我们语音机器人的所有元素都已经准备妥当,接下来进行组装!

    08-语音对话机器人的完整代码

    经过我的努力,已经将代码优化到了100行左右哦,按照我的步骤来,你就可以快速复现构建你的语音机器人了!

    # -*- coding: utf-8 -*-#
    # -------------------------------
    # Name:SpeechRobot
    # Author:Nieson
    # Date:2019/7/19 16:31
    # 用python3实现自己的语音对话机器人
    # -------------------------------
    
    from aip import AipSpeech
    import requests
    import json
    import speech_recognition as sr
    import win32com.client
    
    # 初始化语音
    speaker = win32com.client.Dispatch("SAPI.SpVoice")
    
    
    # 1、语音生成音频文件,录音并以当前时间戳保存到voices文件中
    # Use SpeechRecognition to record 使用语音识别录制
    def my_record(rate=16000):
        r = sr.Recognizer()
        with sr.Microphone(sample_rate=rate) as source:
            print("please say something")
            audio = r.listen(source)
    
        with open("voices/myvoices.wav", "wb") as f:
            f.write(audio.get_wav_data())
    
    
    # 2、音频文件转文字:采用百度的语音识别python-SDK
    # 导入我们需要的模块名,然后将音频文件发送给出去,返回文字。
    # 百度语音识别API配置参数
    APP_ID = 'your app_id'
    API_KEY = 'your api_key'
    SECRET_KEY = 'your secret_key'
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    path = 'voices/myvoices.wav'
    
    
    # 将语音转文本STT
    def listen():
        # 读取录音文件
        with open(path, 'rb') as fp:
            voices = fp.read()
        try:
            # 参数dev_pid:1536普通话(支持简单的英文识别)、1537普通话(纯中文识别)、1737英语、1637粤语、1837四川话、1936普通话远场
            result = client.asr(voices, 'wav', 16000, {'dev_pid': 1537, })
            # result = CLIENT.asr(get_file_content(path), 'wav', 16000, {'lan': 'zh', })
            # print(result)
            # print(result['result'][0])
            # print(result)
            result_text = result["result"][0]
            print("you said: " + result_text)
            return result_text
        except KeyError:
            print("KeyError")
            speaker.Speak("我没有听清楚,请再说一遍...")
    
    
    # 3、与机器人对话:调用的是图灵机器人
    # 图灵机器人的API_KEY、API_URL
    turing_api_key = "your turing_api_key"
    api_url = "http://openapi.tuling123.com/openapi/api/v2"  # 图灵机器人api网址
    headers = {'Content-Type': 'application/json;charset=UTF-8'}
    
    
    # 图灵机器人回复
    def Turing(text_words=""):
        req = {
            "reqType": 0,
            "perception": {
                "inputText": {
                    "text": text_words
                },
    
                "selfInfo": {
                    "location": {
                        "city": "北京",
                        "province": "北京",
                        "street": "车公庄"
                    }
                }
            },
            "userInfo": {
                "apiKey": turing_api_key,  # 你的图灵机器人apiKey
                "userId": "Nieson"  # 用户唯一标识(随便填, 非密钥)
            }
        }
    
        req["perception"]["inputText"]["text"] = text_words
        response = requests.request("post", api_url, json=req, headers=headers)
        response_dict = json.loads(response.text)
    
        result = response_dict["results"][0]["values"]["text"]
        print("AI Robot said: " + result)
        return result
    
    
    # 语音合成,输出机器人的回答
    while True:
        my_record()
        request = listen()
        response = Turing(request)
        speaker.Speak(response)
    
    

    09-结束语

    至此,我们就构建了一个完整的语音对话机器人,它可以在你无聊、寂寞、有压力、想开心的时候出现在你身边,哄你开心哟!这个机器人太聪明了,你可千万不要被她调戏了!

    对了,你可以在图灵机器人官网里面进行人物设置,设置她的姓名、年龄和星座,我的机器人叫做小橘子,她具有十八般武艺,它能够闲聊、做数字计算、中英互译、讲故事、笑话、脑筋急转弯、歇后语、绕口令、顺口溜、玩成语接龙游戏,天气和日期查询,功能还是比较强大的!如果开通付费版本就会拥有更多功能哦,可以训练自己的语料库,目前免费版只支持每天100次的调用,真真是不够用呀!

    附带一下我和小橘子的聊天视频吧,有心的小伙伴可以做个前端页面哦!

    优酷视频:https://v.youku.com/v_show/id_XNDI3OTYyMTgwNA==.html?spm=a2h3j.8428770.3416059.1 

    10-有问必答

    博客一经发出,两天多的时间,阅读量就已经突破5000了,得到了众多博友的关注点赞和评论,说明大家对于语音对话机器人的热情和兴趣度都非常高,大家都在积极的搭建自己的语音对话机器人了!相信百度和图灵机器人最近的API调用量会蹭蹭的上涨,我在考虑要不要收点推广费了(哈哈,开个玩笑)!百度AI开放平台你注册调用他们的API后,过两天百度就会有客服给你打电话问题的体验感,大家看到一个北京号码标记为诈骗电话的那个就是了哈哈!图灵机器人公司则是通过会员收费模式来赚大家的钱,就看你能否攥紧自己的口袋了!

    第10个模块有问必答是为了来解答一下大家在复现语音对话机器人过程中可能会遇到的问题,根据大家的提问,我有针对性的把一些常见问题在此给各位进行一下解答,也非常欢迎博友们之间积极回复,毕竟博主的精力也是有限的,还要投入到无限的AI能力研究中去(可能也是因为懒吧)。刚好,十个模块凑齐了十全十美,处女座看起来也舒心一些!闲话少叙,进入正题:

    • (1)问:我直接执行你全部代码的时候为什么跑不通呢?

    答:首先强调一点,各位在复现代码的时候,一定要把百度和图灵机器人的相关api_id, api_key等替换成自己的!另外图灵机器人记得要身份验证,通过后才能调用图灵机器人!

    • (2)问:我在运行之后输出please say something,然后我说了话,之后隔一段时间才输出KeyError,AI Robot said: 请求次数超限制!这是什么原因?   

    答:因为在05-音频文件转文字STT中,为了避免有时候录音文件出现问题,特别是在不带耳机直接对着笔记本说话时,如果周围环境嘈杂,会导致录音质量不佳,或者是长时间不说话,这些情况就会报Key Error的问题;另外最重要的一个,那就是图灵机器人如果你注册后未进行身份认证,或者身份认证未通过,那么你能调用API的次数为0次,也就是说图灵机器人不会给你回复,就会出现“请求次数超限制”。通过认证后,目前能够每天调用100次,也就是聊天100次也会出现“请求次数超限制”了。

    • (3)问:Mac电脑上没有win32com怎么办啊?

    答:如果win32com不行,那你就用可以尝试安装一下pyttsx3包,用前文中提到的第一种语音输出方式。我为了代码整洁,所以没有把第一种方式写到完整代码中(其实也写了,写博客的时候删了而已,别问我为啥,为了整洁好看,lol!)。

    • (4)问:为什么我的with open那里说文件找不到?

    答:那是因为我所有的录音文件(如myvoices.wav)都在voices目录下,所以要记得创建一下自己的文件夹目录voices。

    • (5)问:不会python,有没有Java版本?

    答:大家看完python版本,可以尝试用Java来复现一下,毕竟你都会Java了,百度API也支持Java调用哦,看官网哈!

    • (6)问:安装包出现问题,主要是from aip import AipSpeech、import speech_recognition as sr中的aip、speech_recognition包为啥安装不成功?

    答:这两个包比较特殊,在import的时候是aip和speech_recognition,但在install安装的时候分别是baidu-aip和SpeechRecognition,这样就能安装成功啦!

    展开全文
  • 树莓派语音对话机器人
  • 主要为大家详细介绍了基于树莓派的语音对话机器人,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 语音对话机器人搭建

    2021-01-06 11:51:48
    基于百度AI和图灵机器人搭建的语音对话机器人 源码: from aip import AipSpeech import requests import json import speech_recognition as sr import win32com.client # 初始化语音 speaker = win32...

    基于百度AI和图灵机器人搭建的语音对话机器人

    源码:

    
    from aip import AipSpeech
    import requests
    import json
    import speech_recognition as sr
    import win32com.client
    
    # 初始化语音
    speaker = win32com.client.Dispatch("SAPI.SpVoice")
    
    
    # 1、语音生成音频文件,录音并以当前时间戳保存到voices文件中
    # Use SpeechRecognition to record 使用语音识别录制
    def my_record(rate=16000):
        r = sr.Recognizer()
        with sr.Microphone(sample_rate=rate) as source:
            print("please say something")
            audio = r.listen(source)
    
        with open("voices/myvoices.wav", "wb") as f:
            f.write(audio.get_wav_data())
    
    
    # 2、音频文件转文字:采用百度的语音识别python-SDK
    # 导入我们需要的模块名,然后将音频文件发送给出去,返回文字。
    # 百度语音识别API配置参数
    APP_ID = '******'
    API_KEY = '********'
    SECRET_KEY = '************'
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    path = 'voices/myvoices.wav'
    
    
    # 将语音转文本STT
    def listen():
        # 读取录音文件
        with open(path, 'rb') as fp:
            voices = fp.read()
        try:
            # 参数dev_pid:1536普通话(支持简单的英文识别)、1537普通话(纯中文识别)、1737英语、1637粤语、1837四川话、1936普通话远场
            result = client.asr(voices, 'wav', 16000, {'dev_pid': 1537, })
            # result = CLIENT.asr(get_file_content(path), 'wav', 16000, {'lan': 'zh', })
            #print(result)
            #print(result['result'][0])
            #print(result)
            result_text = result["result"][0]
            print("you said: " + result_text)
            return result_text
        except KeyError:
            print("KeyError")
            speaker.Speak("你说啥???风太大我听不见!!!")
    
    
    # 3、与机器人对话:调用的是图灵机器人
    # 图灵机器人的API_KEY、API_URL
    turing_api_key = "********"
    api_url = "http://openapi.tuling123.com/openapi/api/v2"  # 图灵机器人api网址
    headers = {'Content-Type': 'application/json;charset=UTF-8'}
    
    
    # 图灵机器人回复
    def Turing(text_words=""):
        req = {
            "reqType": 0,
            "perception": {
                "inputText": {
                    "text": text_words
                },
    
                "selfInfo": {
                    "location": {
                        "city": "天津",
                        "province": "天津",
                        "street": "蓟县"
                    }
                }
            },
            "userInfo": {
                "apiKey": turing_api_key,  # 你的图灵机器人apiKey
                "userId": "Tuesday"  # 用户唯一标识(随便填, 非密钥)
            }
        }
    
        req["perception"]["inputText"]["text"] = text_words
        response = requests.request("post", api_url, json=req, headers=headers)
        response_dict = json.loads(response.text)
    
        result = response_dict["results"][0]["values"]["text"]
        print("AI Robot said: " + result)
        return result
    
    
    # 语音合成,输出机器人的回答
    while True:
        my_record()
        request = listen()
        response = Turing(request)
        speaker.Speak(response)
    

    大体思路就是通过百度API把音频转化为文字,然后通过图灵机器人得到回复,TTS将文本转成音频播放出来。

    做完觉得其实以前觉得很厉害的东西其实也没有那么难搞,不过就是掉几根头发熬几个晚上而已。

    大头是下包包,搞了好久,在这里谢谢我的好兄弟张玥熙,帮我解决了很大的难题,我祝她想吃鸡就吃鸡,上王者轻而易举,斗地主3456必有7。

    总的来说这次没什么参与感,仅仅就是下了几个库调了几个接口而已,不过还是很开心啦,毕竟是第一次做出自己的机器人嘤嘤嘤。

    最后是我与鸡肋机器人对话的视频,看一乐儿得了

    《我与大鹅》标题有点短,详细的标题更容易吸引用户增加曝光

    展开全文
  • 用Java编写的安卓语音对话机器人,界面和手机上的语音助手差不多,实现的功能包括智能问答、天气查询、百科查询、打开APP、创建日程等,直接在导入eclipse就可以运行,但是要配置安卓环境,具体步骤请自行百度
  • 从节目《财经半小时》战役之中的科技之光看到,医疗设备可以通过自动拨打电话采集信息语音识别后上传后台,经探索语音实现方面可以参考:Python3从零开始搭建一个语音对话机器人,连接: 从零开始搭建一个语音对话...

    01-初心缘由:

            从节目《财经半小时》战役之中的科技之光看到,医疗设备可以通过自动拨打电话采集信息语音识别后上传后台,经探索语音实现方面可以参考:Python3从零开始搭建一个语音对话机器人,连接:

    从零开始搭建一个语音对话机器人

    目录

    01-初心缘由

    02-准备工作

    03-语音机器人的搭建思路

    04-语音生成音频文件

    05-音频文件转文字STT

    06-与图灵机器人对话

    07-文字转语音

    08-语音对话机器人的完整代码

    09-结束语

    10-有问必答

    展开全文
  • 树莓派制作语音对话机器人一、材料准备二、教程开始1.录音2.语音识别3、“图灵回复"4、语音合成5、播放6、整合7、运行 一、材料准备 1、树莓派一个 2、免驱动USB麦克风 3、耳机 二、教程开始 1.录音 插上麦克风 我...

    一、材料准备

    1、树莓派一个
    2、免驱动USB麦克风
    3、耳机

    二、教程开始

    1、录音

    插上麦克风
    我用到的是使用了arecord* 测试是否麦克风能否使用。
    使用录音输入如下命令

    arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav
    

    2、语音识别

    建立语音识别文件夹输入如下程序

    sudo nano yuyinshibie.py
    

    去百度语音官网申请语音识别
    img
    在这里插入图片描述
    写代码进去 将上面申请的ID和secret写进下面红色区域

    \# coding: utf-8
    
    import sys 
     import json 
     import urllib2 
     import base64 
     import requests
    
    reload(sys) 
     sys.setdefaultencoding(“utf-8”)
    
    def get_access_token(): 
     url = “https://openapi.baidu.com/oauth/2.0/token” 
     body = { 
     “grant_type”:”client_credentials”, 
     “client_id” :”此处填写自己的client_id”, 
     “client_secret”:”此处填写自己的client_secret”, 
     }
    
    r = requests.post(url,data=body,verify=True)
    
    respond = json.loads(r.text)
    
    return respond["access_token"]
    
    def yuyinshibie_api(audio_data,token): 
     speech_data = base64.b64encode(audio_data).decode(“utf-8”) 
     speech_length = len(audio_data) 
     post_data = { 
     “format” : “wav”, 
     “rate” : 16000, 
     “channel” : 1, 
     “cuid” : “B8-27-EB-BA-24-14”, 
     “token” : token, 
     “speech” : speech_data, 
     “len” : speech_length 
     }
    
    url = "http://vop.baidu.com/server_api"
    
    json_data = json.dumps(post_data).encode("utf-8")
    
    json_length = len(json_data)
    
    \#print(json_data)
    
     
    
    req = urllib2.Request(url, data=json_data)
    
    req.add_header("Content-Type", "application/json")
    
    req.add_header("Content-Length", json_length)
    
     
    
    \#print("asr start request\n")
    
    resp = urllib2.urlopen(req)
    
    \#print("asr finish request\n")
    
    resp = resp.read()
    
    resp_data = json.loads(resp.decode("utf-8"))
    
    if resp_data["err_no"] == 0:
    
      return resp_data["result"]
    
    else:
    
      print(resp_data)
    
      return None
    
    def asr_main(filename,tok): 
     try: 
     f = open(filename, “rb”) 
     audio_data = f.read() 
     f.close() 
     resp = yuyinshibie_api(audio_data,tok) 
     return resp[0] 
     except Exception,e: 
     print “e:”,e 
     return “识别失败”.encode(“utf-8”)
    

    代码图示根据图改缩进
    img
    在这里插入图片描述

    img

    img

    img
    识别完成之后呢我们就要开始第三步了我们要和机器人对话那么它一定得回复我们,对吧。为了能够智能点,我们就用到了图灵得接口图灵真的非常好用能够查天气语音讲故事讲笑话下面附上第三步的代码

    3、图灵回复

    (1)去图灵机器人官网注册创建一个微信机器人
    在这里插入图片描述

    (2)创建图灵机器人文件输入代码

    sudo nano Turling.py
    

    (3) 写入代码,在红色处写自己申请的API KEY

    \# coding: utf-8
    
     
    import requests
    
    import json
    
    import sys
    
    reload(sys)
    
    sys.setdefaultencoding("utf-8")
    
     
    
     
    
    def Tuling(words):
    
      Tuling_API_KEY = "此处填写自己的Turling KEY"
    
     
    
      body = {"key":Tuling_API_KEY,"info":words.encode("utf-8")}
    
     
    
      url = "http://www.tuling123.com/openapi/api"
    
      r = requests.post(url,data=body,verify=True)
    
     
    
      if r:
    
    ​    date = json.loads(r.text)
    
    ​    print date["text"]
    
    ​    return date["text"]
    
      else:
    
    ​    return None
    

    根据图片改代码缩进

    img

    4、语音合成

    图灵回复了之后 我们要让它播放出来 就用到了百度的语音合成
    (1)创建语音合成文件

    sudo nano yuyinhecheng.py
    

    (2)写代码

    \# coding: utf-8
    
    import sys 
     import urllib2 
     import json 
     import os 
     import yuyinshibie
    
    reload(sys) 
     sys.setdefaultencoding(“utf-8”)
    
    def yuyinhecheng_api(tok,tex): 
     cuid = “B8-27-EB-BA-24-14” 
     spd = “4” 
     url = “http://tsn.baidu.com/text2audio?tex=“+tex+”&lan=zh&cuid=”+cuid+”&ctp=1&tok=”+tok+”&per=3” 
     \#print url 
     \#response = requests.get(url) 
     \#date = response.read() 
     return url
    
    def tts_main(filename,words,tok): 
     voice_date = yuyinhecheng_api(tok,words)
    
    f = open(filename,"wb")
    
    f.write(voice_date)
    
    f.close()
    

    根据图片改缩进
    img

    5、播放

    语音合成之后我们要播放出来用到了mpg123为什么我会用这个呢因为它可以直接播放网页上的音频非常的好用

    ** 安装mpg123**:

    sudo apt-get install mpg123 
    

    安装好了之后 我后面等用到了再说怎么用 现在先不说
    现在录音 语音识别 语音合成 播放 所需要的工具 代码都准备好了 下面就开始整合在一起

    6、整合

    创建最终文件

    sudo nano yuyin.py
    

    写代码

    \# coding: utf-8
    
     
    
    import os
    
    import time
    
    import yuyinhecheng
    
    import Turling
    
    import yuyinshibie
    
    tok = yuyinshibie.get_access_token()
    
    switch = True
    
    while switch:
    
      os.system('sudo arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav')
    
      time.sleep(0.5)
    
      info = yuyinshibie.asr_main("/home/pi/Desktop/voice.wav",tok)
    
      if '关闭'.encode("utf-8") in info:
    
    ​    while True:
    
    ​      os.system('sudo arecord -D "plughw:1" -f S16_LE -r 16000 -d 10 /home/pi/Desktop/voice.wav')
    
    ​      time.sleep(10)
    
    
    ​      info = yuyinshibie.asr_main("/home/pi/Desktop/voice.wav",tok)
    
    ​      if '开启'.encode("utf-8") in info:
    
    ​        break
    
    
    ​    url = "http://tsn.baidu.com/text2audio?tex=开启成功&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
    
    ​    os.system('mpg123 "%s"'%url)
    
    
      elif '暂停'.encode("utf-8") in info:
    
    ​    url = "http://tsn.baidu.com/text2audio?tex=开始暂停&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
    
    ​    os.system('mpg123 "%s"'%url)
    
    ​    time.sleep(10)
    ​    url = "http://tsn.baidu.com/text2audio?tex=暂停结束&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
    
    ​    os.system('mpg123 "%s"'%url)
    
    ​    continue
      else:
    ​    tex = Turling.Tuling(info)
    
    ​    url = yuyinhecheng.yuyinhecheng_api(tok,tex)
    
    ​    os.system('mpg123 "%s"'%url)
    
    ​    time.sleep(0.5)
    

    根据图改缩进

    img

    7、运行

    最后就可以运行机器人了

    输入代码

    sudo python yuyin.py
    

    就可以和机器人对话啦

    展开全文
  • 点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]♪点击上方绿标 收听从零开始搭建一个语音对话机器人从零开始搭建一个语音对话机器人目录01-初心缘由01-准备工作02-语音机器人的搭建思路03-语音生成音频文件04...
  • 图灵机器人,百度语音识别,对话
  • 叮当,在 Raspberry Pi 上的中文语音对话机器人/智能音箱项目
  • 主要介绍了Python3从零开始搭建一个语音对话机器人的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 语音对话机器人代码

    2017-05-09 12:59:33
    详细介绍了基于讯飞语音以及图灵机器人的实现代码,刚刚入门,代码写的很烂,不过运行起来速度跟的上
  • 智能语音对话机器人

    2019-07-21 17:36:03
    机器人已经调整好,可以直接打包使用。内置继承了机器人大脑接口,未来机器人。市面上最聪明的机器人之一。 欢迎拍砖。
  • 本文实例为大家分享了基于树莓派的语音对话机器人,供大家参考,具体内容如下第一部分代码arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav第二部分代码# coding: utf-8import sysimport ...
  • wukong-robot 是一个简单、灵活、优雅的中文语音对话机器人/智能音箱项目,目的是让中国的 Maker 和 Haker 们也能快速打造个性化的智能音箱。
  • JLing中文语音对话机器人 -- 1、介绍

    千次阅读 2019-10-06 22:20:26
    JLing是一个可以工作在Linux的中文语音对话机器人 (csdn:https://blog.csdn.net/weixin_40490238) (github: https://github.com/Kingzhoudk/JLing) 目录 特点 运行环境 工作模式 Demo 配置 运行 联系 ...
  • 叮当是一款可以工作在 Raspberry Pi 上的开源中文语音对话机器人/智能音箱项目,目的是让中国的Hacker们也能快速打造个性化的智能音箱
  • 开源项目叮当-中文语音对话机器人在ubuntu上的安装      在叮当的官网(http://dingdang.hahack.com)上看到,它这是如下图这样介绍叮当的,它的安装流程也是基于树莓派来写的流程。而我对硬件不感兴趣,我不...
  • 叮当-中文语音对话机器人 注意:本项目已迁移到 ,当前仓库将重新构建,不再更新维护。 已经使用了dingdang的用户,如需正常获得更新支持,可以切换dingdang的仓库地址: cd $HOME /dingdang git remote remove ...
  • 叮当是一款可以工作在 Raspberry Pi 上的开源中文语音对话机器人/智能音箱项目,目的是让中国的Hacker们也能快速打造个性化的智能音箱。 github地址:https://github.com/wzpan/dingdang-robot 主要是github上已经...
  • JLing是一个可以工作在Linux的自定义中文语音对话机器人 (csdn :https://blog.csdn.net/weixin_40490238) (github: https://github.com/Kingzhoudk/JLing) 想看明白这块代码,先看看aiml的简介之类,推荐网址:...
  • wukong-robot 是一个简单、灵活、优雅的中文语音对话机器人/智能音箱项目,目的是让中国的 Maker 和 Haker 们也能快速打造个性化的智能音箱。特性模块化...
  • 原标题:精选:语音对话机器人,百行Python代码就能轻松实现 前言:Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了收藏已久的视频教程分享给大家!希望能带给大伙儿...
  • 项目简介 使用C++编写一个智能AI对话语音命令执行的语音管理工具,其中可执行命令支持配置。...普通对话则交给图灵机器人进行交流,所返回的文字交给百度语音合成平台,启动播放功能,则成功进行对话

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 630
精华内容 252
关键字:

语音对话机器人