1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于百度AI开放平台及图灵机器人搭建的聊天机器人

基于百度AI开放平台及图灵机器人搭建的聊天机器人

时间:2022-03-18 17:44:37

相关推荐

基于百度AI开放平台及图灵机器人搭建的聊天机器人

一. 准备工作:

首先应该了解一下百度开放平台的语音识别及语音合成的调用方法,详见我之前的这篇文章;语音输入及输出准备好之后就需要考虑中间的机器人对话环节,我使用的是图灵机器人来实现这个环节的图灵机器人官网,这个需要实名认证后才能白嫖,这个认证说实话挺慢的(我大概等了差不多一个礼拜才认证好,应该不是我的问题😳😳),准备好图灵机器人后就可以实现(憨批)聊天机器人了。

二. 具体实现:

1-语音输入:

先使用pyaudio录制适合百度语音识别的音频

import wavefrom pyaudio import PyAudio, paInt16CHUNK = 1024 # wav文件是由若干个CHUNK组成的,CHUNK我们就理解成数据包或者数据片段。FORMAT = paInt16 # 表示我们使用量化位数 16位来进行录音CHANNELS = 1 #代表的是声道,1是单声道,2是双声道。RATE = 16000 # 采样率 一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHzRECORD_SECONDS = 10 # 录制时间可以随便改,这里设定了10秒def save_wave_file(pa, filename, data):wf = wave.open(filename, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(pa.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b"".join(data))wf.close()def get_audio(filepath):isstart = str(input("是否开始录音? (是/否)"))if isstart == str("是"):pa = PyAudio()stream = pa.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("*" * 10, "开始录音:请在10秒内输入语音")frames = [] # 定义一个列表for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # 循环,采样率 44100 / 1024 * 5data = stream.read(CHUNK) # 读取chunk个字节 保存到data中frames.append(data) # 向列表frames中添加数据dataprint("*" * 10, "录音结束\n")stream.stop_stream()stream.close() # 关闭pa.terminate() # 终结save_wave_file(pa, filepath, frames)elif isstart == str("否"):exit()else:print("无效输入,请重新选择")get_audio(filepath)

再调用百度的API进行语音转文字:

from aip import AipSpeech""" 你的 APPID AK SK """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:voices = fp.read()result = client.asr(voices, 'pcm', 16000, {'dev_pid': 1537})result_content = result["result"][0]print("you said: " + result_content)return result_content

2-使用图灵机器人进行对话:

# 与机器人对话:调用的是图灵机器人import requestsimport json# 图灵机器人的API_KEY、API_URLturing_api_key = "your 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": turing_api_key, # 你的图灵机器人apiKey"userId": "Nieson" # 用户唯一标识(随便填, 非密钥)}}req["perception"]["inputText"]["text"] = text_wordsresponse = 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

3-语音输出:

如果觉得声音不好听或是太单调的话也可以通过调用百度语音合成进行语音输出。

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

4-代码总结:

import wavefrom pyaudio import PyAudio, paInt16from aip import AipSpeechimport requestsimport jsonimport win32com.client# 百度的APP_ID AK SKAPP_ID = '******'API_KEY = '******'SECRET_KEY = '******'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)# 录音的参数CHUNK = 1024 # wav文件是由若干个CHUNK组成的,CHUNK我们就理解成数据包或者数据片段。FORMAT = paInt16 # 表示我们使用量化位数 16位来进行录音CHANNELS = 1 # 代表的是声道,1是单声道,2是双声道。RATE = 16000 # 采样率 一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHzRECORD_SECONDS = 10 # 录制时间可以随便改,这里设定了10秒# 图灵机器人的API_KEY、API_URLturing_api_key = "your turing_api_key"api_url = "/openapi/api/v2"headers = {'Content-Type': 'application/json;charset=UTF-8'}# 初始化输出语音speaker = win32com.client.Dispatch("SAPI.SpVoice")def get_audio(filepath):"""得到输入的声音文件"""start = str(input("是否开始输入? (是/否)"))if start == str("是"):pa = PyAudio()stream = pa.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("*" * 10, "开始输入:请在10秒内输入语音")frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # 循环,采样率 44100 / 1024 * 5data = stream.read(CHUNK) # 读取chunk个字节 保存到data中frames.append(data) # 向列表frames中添加数据dataprint("*" * 10, "输入结束\n")stream.stop_stream()stream.close() # 关闭pa.terminate() # 终结# 存储输入内容wf = wave.open(filepath, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(pa.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b"".join(data))wf.close()elif start == str("否"):exit()else:print("无效输入,请重新选择")get_audio(filepath)def get_file_content(filePath):"""返回输入内容,语音转文本"""with open(filePath, 'rb') as fp:voices = fp.read()result = client.asr(voices, 'pcm', 16000, {'dev_pid': 1537})result_content = result["result"][0]print("you said: " + result_content)return result_contentdef Turing(text_words):"""图灵机器人回复"""req = {"reqType": 0,"perception": {"inputText": {"text": text_words},"selfInfo": {"location": {"city": "长治","province": "山西","street": "康庄大道"}}},"userInfo": {"apiKey": turing_api_key, # 你的图灵机器人apiKey"userId": "hhhh" # 用户唯一标识(随便填, 非密钥)}}req["perception"]["inputText"]["text"] = text_wordsresponse = 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 resultwhile True:get_audio("audio.pcm")answer = Turing(get_file_content("audio.pcm"))speaker.Speak(answer)

以上就是通过百度AI开放平台及图灵机器人来实现聊天机器人的全过程。

三. 总结反思:

通过调用各种API再配上教程感觉实现挺简单的,争取在寒假能够了解一下这些东西的具体实现方式。

另外,这是工作室早就布置下来的作业了,由于自己的坏习惯一直拖到现在才写完,flag立这了,以后有任务的话绝对不在等到最后几天才写🙃🙃

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。