Python3实现基于百度AI开放平台和图灵机器人API聊天机器人
这是工作室第一个大作业,转完专业课好多好多好多好多,准备的多多少少不完善,我其实想做个UI的…先这样吧 ,等忙完这个期末寒假好好学习,flag在此。目前因为穷买不起图灵的高级版本,所以语音机器人的功能很少,我愿意称之为智障机器人,但可以自己加语句库还是蛮好玩的,比如夸夸自己?
文章目录
一.项目介绍
用python3实现一个语音聊天机器人,调用百度语音识别SDK(详情见我的上一篇博客基于百度AI平台的语音识别功能开发-SDK调用)和图灵API.
二.实现思路
先将自己的语音存成文件—》将文件内容上传到百度平台(调用sdk)转成文字—》将文字上传到图灵机器人平台(调用图灵API)将文字转成语音
三.完整代码
- 注意:秘钥(百度&图灵)需要自行填写,已经在代码中标明
import wave
import time
from pyaudio import PyAudio, paInt16
framerate = 16000 # 采样率
num_samples = 2000 # 采样点
channels = 1 # 声道
sampwidth = 2 # 采样宽度2bytes
FILEPATH = 'voice.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 + 5: # 设置录音时间(秒)
# 循环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()
# 音频文件转文字:采用百度的语音识别python-SDK
# 百度语音识别API配置参数
from aip import AipSpeech
APP_ID = '自己填'
API_KEY = '自己填'
SECRET_KEY = '自己填'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
path = 'voice.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')
# 与机器人对话:调用的是图灵机器人
import requests
import json
# 图灵机器人的API_KEY、API_URL
turing_api_key = '自己填 '
api_url = '/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': '自己填', # 你的图灵机器人apiKey
'userId': 'wangxunzhi' # 用户唯一标识(随便填, 非密钥)
}
}
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
import pyttsx3
# 初始化语音
engine = pyttsx3.init() # 初始化语音库
# 设置语速
rate = engine.getProperty('rate')
engine.setProperty('rate', rate - 50)
# 输出语音
engine.say('你好,很高兴认识你!') # 合成语音
engine.runAndWait()
while True:
my_record()
request = listen()
response = Turing(request)
engine.say(response)
engine.runAndWait()
四.心得体会
①API真的挺棒,而且代码都给你写好了(cv大法好),pyaudio也是参考完成的。
②API调用始终是上层,寒假有机会研究一下他的底层算法,为了人工智能算法工程师而努力
③多多少少有些水,因为这个有大量成品代码,以后继续努力吧
五.演示视频
智障语音机器人
0条评论