“零基础-- 搭建一个属于自己的机器人”
首先请想象一下,当你回到家,只有一个人在家,但却没有人聊天,然后你发出了一个命令,电脑便开始自动与你对话,而你不需要打字,不需要看屏幕,因为她会自己发出声音,回应你的问题,以及问候。
01
—
编程思路很重要
有一个好的想法,并把它用代码实现出来,怎么实现,这就比较重要了。
首先,想一下,假如没有看这篇文章,你们会怎么去实现自动回复的机器人,然后再来看我的解决方式,因为我这个也不是最优的解决方式。
思路:
1、首先想到的是宏观的,我想要说话,然后让机器立马做出响应,并通过喇叭回答我们,这是我们的需求。
2、我们把他拆分,变成一些小的需求。
(1)我要说话,会产生声音,系统不能翻译声音,那我们要记录下我们发出的声音。
(2)将声音转化为文字。
(3)将文字发送给自己训练的机器人,但自己训练机器人比较难,这时候使用第三方接口,自动回复,就像公众后台的小灵机器人一样。
3、那我们具体的流程就出来了。
声音---->音频文件----->调用第三方接口(语音识别)------->文字------->发送给图灵机器人------->机器人做出回复------->返回文字------->文字转语音---->输出并发出声音。
突然感觉一阵头晕
,怎么调来调去的。
02
—
语音生成音频文件
语音生成文件,我们需要录音,并保存到文件中,那python要怎么实现启动录音并保存文件呢?
好好想一想!
这里需要导入一个模块,正所谓,那里不会导哪里!嘿嘿,python就是这么强。
导入模块,这里需要安装一个pip install pyaudio
代码语言:javascript复制import wave
from pyaudio import PyAudio,paInt16
有兴趣的可以去了解一下,
继续来看实现代码
代码语言:javascript复制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
代码语言:javascript复制from aip import AipSpeech
导入我们需要的模块名,然后将音频文件发送给出去,返回文字。
这里的三个参数就交给大家去获取了。
代码语言:javascript复制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)#获取识别到的文字
这里我没有做异常处理,来考验一下大家的能力,给大家链接让大家自己动手试一下,
这是百度的文档,和开放平台,需要使用的可以申请一个自己的应用试一下:
代码语言:javascript复制相关文档 http://ai.baidu.com/docs#/ASR-Online-Python-SDK/top
代码语言:javascript复制开放平台https://console.bce.baidu.com/ai/#/ai/speech/app/detail~appId=608501
04
—
与机器人对话
好了,到这里了,我们的声音成功转化为文字,然后呢?
这次再调用第三方接口,做自动应答。
这里我调用的是图灵机器人,大家也可以去了解一下。
因为某些原因,这里我直接使用了平台对话框的聊天机器人,
如下:
这里需要导入requests模块。
代码语言:javascript复制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
—
文字转换为语音
好了,(敲黑板)重点,前年没有考,去年没有考,今年一定考
我们要把文字转换为语音,使用输出设备输出,怎么弄?
怎么办?再导入一个模块呀!
代码语言:javascript复制pip install Pywin32
导入成功之后,我安装的时候,pywin32好像是python2的代码,需要修改几个地方,让它支持python3
然后就是调用
代码语言:javascript复制import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("我是语音助手,小灵!")
好了我们的语音伙伴就这么搞定了。
分解开来看,感觉是不是非常简单呢!还等什么,自己也制造一个吧!