Python实现基于百度语音识别与青云客接口的智能聊天机器人
本文介绍如何使用Python结合百度AI语音识别接口与青云客智能聊天API,开发一个简易的语音交互机器人。通过pyaudio录音、百度API转文字、青云客获取回复及pyttsx3语音合成,实现完整的语音对话流程。
Python实现基于百度语音识别与青云客接口的智能聊天机器人
简要说明:
近期需要开发一个Python小程序,实现人与智能机器人(智能对话接口)的对话功能。目前测试表明,该方案已成功实现个人与机器之间的智能语音交互。
总体思路:
若要实现人与机器的智能对话,需遵循以下核心步骤:
- 计算机接收用户的语音输入
- 将用户输入的语音转化为文本信息
- 调用智能对话接口,发送请求文本并获取接口返回的智能回答文本
- 将回答文本转化为语音格式输出
在此过程中,可安装多种现成的库函数以辅助系统实现。
环境准备与依赖安装
需要准备的环境
以下是需要安装的Python依赖包列表:
- pip install pyaudio,用于录音及生成wav文件。
- pip install baidu-aip,安装百度AI SDK,用于调用语音技术接口,将音频识别为文本数据返回。
- pip install pyttsx3,用于将文本信息以音频格式播放出来。
接下来将逐步实现上述每个功能,最后进行整合。
语音输入接收与保存
接收用户的语音输入,并将其保存为音频文件
import time
import wave
from pyaudio import PyAudio, paInt16
framerate = 16000 # 采样率
num_samples = 2000 # 采样点
channels = 1 # 声道
sampwidth = 2 # 采样宽度2bytes
FILEPATH = '../voices/myvoices.wav' #该文件目录要存在
#用于接收用户的语音输入, 并生成wav音频文件(wav、pcm、mp3的区别可详情百度)
class Speak():
#将音频数据保存到wav文件之中
def save_wave_file(self, 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(self):
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 + 5: # 设置录音时间(秒)
# 循环read,每次read 2000frames
string_audio_data = stream.read(num_samples)
my_buf.append(string_audio_data)
print('讲话结束')
self.save_wave_file(FILEPATH, my_buf) #保存下录音数据
stream.close()百度AI语音识别接口调用
调用百度AI接口,识别音频文件并以文本信息返回。
此前曾多次使用百度AI接口,例如在毕业设计《在线课堂学生异常行为与分析》中便应用了百度的智能平台。个人调试阶段可使用多项免费产品,总体而言,百度在人工智能领域的表现相当出色。
在调用百度AI接口前,需先访问百度AI开放平台,搜索语音识别功能。

点击“立即使用”,若无账号可先创建,随后领取免费资源使用。

此前已创建1个应用,此处假设再次点击创建。

系统会自动勾选语音识别接口,直接创建应用即可。创建后将获得AppID、API Key和Secret Key,后续调用百度接口时直接使用这些凭证。


可查阅接口文档以进行具体的接口操作。

前奏准备就绪后,即可直接调用接口进行语音识别。
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '25990397'
API_KEY = 'iS91n0uEOujkMIlsOTLxiVOc'
SECRET_KEY = '' #此处填写自己的密钥
"""调用接口, 调用BaiDu AI 接口进行录音、语音识别"""
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
class ReadWav():
# 读取文件
def get_file_content(self, filePath):
with open(filePath, 'rb') as fp:
return fp.read()
def predict(self):
# 调用百度AI的接口, 识别本地文件
return client.asr(self.get_file_content('../voices/myvoices.wav'), 'wav', 16000, {
'dev_pid': 1537,
})
readWav = ReadWav() #实例化方法
print(readWav.predict()) #调用识别方法, 并输出执行结果(音频文件存的录音是:你叫什么名字呀?)
{'corpus_no': '7087884083428433929', 'err_msg': 'success.', 'err_no': 0, 'result': ['你叫什么名字呀?'], 'sn': '255158586831650276613'}
青云客智能聊天接口集成
请求智能机器人,发送文本信息,返回智能聊天内容。
此前老师推荐图灵机器人的智能聊天,但发现认证一直无法通过且需付费。
后来发现一个免费、无需注册、仅需发送GET请求即可实现聊天的青云客智能机器人,直接调用接口即可使用。
代码如下:
def talkWithRobot(msg):
url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg))
html = requests.get(url)
return html.json()["content"]
print(talkWithRobot("你好呀!"))输出:
哟~ 都好都好
语音合成与输出
将回答信息转化为语音文件并输出
此处需导入pyttsx3包,具体代码如下:
import pyttsx3
class RobotSay():
def __init__(self):
# 初始化语音
self.engine = pyttsx3.init() # 初始化语音库
# 设置语速
self.rate = self.engine.getProperty('rate')
self.engine.setProperty('rate', self.rate - 50)
def say(self, msg):
# 输出语音
self.engine.say(msg) # 合成语音
self.engine.runAndWait()
robotSay = RobotSay()
robotSay.say("你好呀") #会讲出 ~你好呀(女声)
复制代码完整聊天机器人代码整合
组合成为自动聊天机器人(它很硬气)
代码如下:
def talkWithRobot(msg):
url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg))
html = requests.get(url)
return html.json()["content"]
robotSay = RobotSay()
speak = Speak()
readTalk = ReadWav()
while True:
speak.my_record() #录音
text = readTalk.predict()['result'][0] #调用百度AI接口, 将录音转化为文本信息
print("本人说:", text) #输出文本信息
response_dialogue = talkWithRobot(text) #调用青云客机器人回答文本信息并返回
print("青云客说:", response_dialogue) #输出回答文本信息
robotSay.say(response_dialogue) #播放回答信息运行结果(发现它很硬气)
""" 正在讲话... 讲话结束... 本人说: 你好呀。 青云客说: 哟~ 都好都好 正在讲话... 讲话结束... 本人说: 你叫什么名字呀? 青云客说: 我是小美人菲菲呀~ 正在讲话... 讲话结束... 本人说: 哇,那你多美呀。 青云客说: 你似有問題多啲囉! 正在讲话... 讲话结束... 本人说: 我好看吗? 青云客说: 你真是个地道的美人啊。就是说你只有在地道里才算美人,因为地道里没灯 正在讲话... 讲话结束... 本人说: 你可真是个小可爱呀。 青云客说: 呀,你怎么知道。。。我就是啊。。 正在讲话... 讲话结束... 本人说: 不和你说了。 青云客说: 不说拉倒 """
到此这篇关于Python实现简单智能聊天机器人的文章就介绍到这了,更多相关Python实现聊天机器人内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









