搭建一个属于自己的语音对话机器人

搭建一个属于自己的语音对话机器人

“零基础– 搭建一个属于自己的机器人

 

首先请想象一下,当你回到家,只有一个人在家,但却没有人聊天,然后你发出了一个命令,电脑便开始自动与你对话,而你不需要打字,不需要看屏幕,因为她会自己发出声音,回应你的问题,以及问候。

01—编程思路很重要

有一个好的想法,并把它用代码实现出来,怎么实现,这就比较重要了。

首先,想一下,假如没有看这篇文章,你们会怎么去实现自动回复的机器人,然后再来看我的解决方式,因为我这个也不是最优的解决方式。

 

思路:

1、首先想到的是宏观的,我想要说话,然后让机器立马做出响应,并通过喇叭回答我们,这是我们的需求。

2、我们把他拆分,变成一些小的需求。

(1)我要说话,会产生声音,系统不能翻译声音,那我们要记录下我们发出的声音。

(2)将声音转化为文字。

(3)将文字发送给自己训练的机器人,但自己训练机器人比较难,这时候使用第三方接口,自动回复,就像公众后台的小灵机器人一样。

3、那我们具体的流程就出来了。

声音—->音频文件—–>调用第三方接口(语音识别)——->文字——->发送给图灵机器人——->机器人做出回复——->返回文字——->文字转语音—->输出并发出声音。

突然感觉一阵头晕搭建一个属于自己的语音对话机器人,怎么调来调去的。

 

02—语音生成音频文件

语音生成文件,我们需要录音,并保存到文件中,那python要怎么实现启动录音并保存文件呢?

好好想一想!

这里需要导入一个模块,正所谓,那里不会导哪里!嘿嘿,python就是这么强。

导入模块,这里需要安装一个pip install pyaudio

import wave
from pyaudio import PyAudio,paInt16

有兴趣的可以去了解一下,继续来看实现代码

def save_wave_file(filename,data):#保存音频文件
    wf=wave.open(filename,'wb')
    wf.setnchannels(1)
    wf.setsampwidth(2)
    wf.setframerate(8000)
    wf.writeframes(b"".join(data))
    wf.close()

def my_record():#实现录音
    pa=PyAudio()
    stream=pa.open(format = paInt16,channels=1,
                   rate=8000,input=True,
                   frames_per_buffer=2000)
    my_buf=[]
    count=0
    print("正在录音")
    while count<2*15:#控制录音时间,15秒
        audio= stream.read(2000)
        my_buf.append(audio)
        count+=1
        # print('.')
    save_wave_file('01.wav',my_buf)#调用保存音频文件函数
    stream.close()
    print("录音完成!")

语音生成音频文件搞定

 

03—音频文件转文字

 

我们已经在上面获取到了音频文件,那要怎么把音频文件转化为文字呢?

我们继续:

这里可以使用第三方的语音识别接口,这里我使用的事百度的接口,因为比较简单,相关的api大家可以自己去研究一下。

导入模块:pip install baidu_aip

from aip import AipSpeech

导入我们需要的模块名,然后将音频文件发送给出去,返回文字。

这里的三个参数就交给大家去获取了。

def audio_word():
    APP_ID = ''
    API_KEY = ''
    SECRET_KEY = ''
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    ret = client.asr(get_file_content('01.wav'), 'wav', 16000, {'dev_pid': 1537, })
    print(ret)#获取识别到的文字

这里我没有做异常处理,来考验一下大家的能力,给大家链接让大家自己动手试一下,

这是百度的文档,和开放平台,需要使用的可以申请一个自己的应用试一下:

相关文档    http://ai.baidu.com/docs#/ASR-Online-Python-SDK/top

开放平台   https://console.bce.baidu.com/ai/#/ai/speech/app/detail~appId=608501

 

04—与机器人对话

好了,到这里了,我们的声音成功转化为文字,然后呢?

这次再调用第三方接口,做自动应答。

这里我调用的是图灵机器人,大家也可以去了解一下。

因为某些原因,这里我直接使用了平台对话框的聊天机器人,

如下(这里需要导入requests模块):

def tu_ling(text):

    url = "http://www.tuling123.com/robot-chat/robot/chat/227960/jwt7"
    data = {"perception": {"inputText": {"text": text}}, "userInfo": {"userId": "demo123"}}
    header = {
        "Referer": "http://www.tuling123.com/member/robot/1140264/center/frame.jhtml?page=0&child=0",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36"}
    tuling = requests.post(url, json=data, headers=header)
    conent = tuling.json()

我是不会告诉你,这里我使用的是爬虫的方式的搭建一个属于自己的语音对话机器人

 

05—文字转换为语音

好了,(敲黑板)重点,前年没有考,去年没有考,今年一定考

我们要把文字转换为语音,使用输出设备输出,怎么弄?

怎么办?再导入一个模块呀!

pip install Pywin32

导入成功之后,我安装的时候,pywin32好像是python2的代码,需要修改几个地方,让它支持python3

然后就是调用

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

好了我们的语音伙伴就这么搞定了。

分解开来看,感觉是不是非常简单呢!还等什么,自己也制造一个吧!

 

相关推荐:

自动操作浏览器之–无界面selenium爬虫

自动打开浏览器,自动进行操作

python实现祝福弹框

微信自动添加好友

python爬虫教程

 

 

在公众号后台回复  :    “语音机器人”   获取完整代码,以及有关的插件。

 

欢迎关注我们哟!

 

搭建一个属于自己的语音对话机器人

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111420.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一款自制的视频录制软件

    一款自制的视频录制软件是利用opencv库的,平时自己需要录制东西,但是网上大部分的软件只录制屏幕,不能录制摄像头视屏,所以自己动手弄了个不是特别好用,但也讲究这凑合程序源代码:http://download.csdn.net/source/3578833

    2022年6月17日
    26
  • 语义分割 实例分割 全景分割_语义分割转实例分割

    语义分割 实例分割 全景分割_语义分割转实例分割之前看过一篇使用分割思想进行目标检测,所以这里补习下一些分割相关的基础知识。这里重点说下语义分割、实力分割和全景分割的区别。1、semanticsegmentation(语义分割)通常意义上的目标分割指的就是语义分割,图像语义分割,简而言之就是对一张图片上的所有像素点进行分类语义分割(下图左)就是需要区分到图中每一点像素点,而不仅仅是矩形框框住了。但是同一物体的不同实例不需要单独分…

    2022年8月23日
    8
  • 如何获取手机gps数据_获取手机gps数据

    如何获取手机gps数据_获取手机gps数据不借助QXDM,直接通过手机抓取qxdm日志。主要用于测试GPS的时候使用,因为测试GPS大都需要在室外进行(室外卫星信号良好),并且GPS问题一般需要获取QXDM日志,在室外不能连接PC端使用QXDM客户端工具。adbshellmkdir/sdcard/diag_logsadbpushgnss.cfg/sdcard/diag_logs/Diag.cfg_GNSS_Generic_2020.cfgadbshelldiag_mdlog-f/sdcard/diag_logs/Di

    2022年10月2日
    2
  • 什么是portal?

    什么是portal?Portal 是一个基于 web 的应用程序 它主要提供个性化 单点登录 不同来源的内容整合以及存放信息系统的表示层 nbsp portal 主要有 3 方面的功能 1 portlet 容器 类似于 servlet 所有的 portlet 都部署在 portlet 容器里 该容器控制 portlet 的生命周期并为其提供必要的资源和环境信息 portlet 容器负责初始化和销毁 portlets 并向 portlets 传送用户请

    2025年7月14日
    4
  • 电平转换的作用_电平转换电路原理

    电平转换的作用_电平转换电路原理作为一名电子设计的硬件工程师,电平转换是每个人都必须面对的的话题,主芯片引脚使用的1.2V、1.8V、3.3V等,连接外部接口芯片使用的1.8V、3.3V、5V等,由于电平不匹配就必须进行电平转换。每个工程师都有自己的一套转换方案,今天我们将5种电平转换的方法进行汇总,并且总结各种的优劣势,避免设计过程踩坑。一、电平转换方法5种电平转换方法分别是:晶体管电平转换方法;专用电平转换芯片;限流电阻电平转换方法;电阻分压电平转换方法;二极管电平转换方法;下面我们会从速率、驱动能力、漏电流、成本

    2022年8月10日
    10
  • Aarch64 安装Anaconda 和 pytorch

    Aarch64 安装Anaconda 和 pytorchpipinstalltorch-fhttps://torch.maku.ml/whl/stable.htmlhttps://gitee.com/kumatea/pytorch-aarch64https://blog.csdn.net/zhenlingcn/article/details/109559570

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号