需要用到的库:
import requests import urllib.parse import speech_recognition as sr import pyttsx3 import requests import urllib.parse import tkinter as tk from tkinter import scrolledtext, simpledialog import threading import speech_recognition as sr import pyttsx3 import requests import urllib.pars
这里调用qingyunke的请求 1. 实现文字对话 import requests import urllib.parse def chat_with_qingyunke(): print("你好!欢迎使用聊天机器人。输入'退出'结束聊天。") while True: user_input = input("你说:") if user_input.lower() == '退出': print("再见!") break # 构造请求的 URL 和参数 base_url = "http://api.qingyunke.com/api.php" params = { "key": "free", "appid": 0, "msg": urllib.parse.quote(user_input) # 对用户输入进行 URL 编码 } try: # 发送 GET 请求 response = requests.get(base_url, params=params) # 检查请求是否成功 if response.status_code == 200: data = response.json() if data['result'] == 0: print("机器人回答:", data['content']) else: print("机器人回答出错,请稍后再试。") else: print("请求失败,状态码:", response.status_code) except Exception as e: print("在请求过程中发生错误:", e) # 启动聊天机器人 chat_with_qingyunke()
2. 实验语音对话
import speech_recognition as sr import pyttsx3 import requests import urllib.parse # 初始化语音引擎 engine = pyttsx3.init() def speak(text): """使用 pyttsx3 的函数来说话""" engine.say(text) engine.runAndWait() def listen(): """使用 speech_recognition 监听和识别语音""" r = sr.Recognizer() with sr.Microphone() as source: print("请说话...") audio = r.listen(source) try: # 使用 Google 的语音识别 text = r.recognize_google(audio, language='zh-CN') print(f"你说:{text}") return text except sr.UnknownValueError: print("Google Speech Recognition 无法理解音频") return None except sr.RequestError as e: print(f"从Google Speech Recognition服务请求错误; {e}") return None def chat_with_qingyunke(message): """发送消息到清云客 API 并返回回答,并清理返回文本中的 {br}""" base_url = "http://api.qingyunke.com/api.php" params = { "key": "free", "appid": 0, "msg": urllib.parse.quote(message) } response = requests.get(base_url, params=params) if response.status_code == 200: data = response.json() if data['result'] == 0: # 清理 {br} 标记并替换为换行符 clean_content = data['content'].replace('{br}', '\n') return clean_content else: return "机器人回答出错,请稍后再试。" else: return "请求失败,状态码:" + str(response.status_code) def main(): try: speak("你好!我是聊天机器人。请开始说话,或说退出结束对话。") while True: text = listen() if text: if '退出' in text: speak("再见!") break response = chat_with_qingyunke(text) print("机器人回答:", response) speak(response) except KeyboardInterrupt: # 捕获 Ctrl+C 中断,并优雅地处理它 print("\n程序被用户中断,即将退出。") speak("程序被用户中断,即将退出。") except Exception as e: # 捕获并处理其他意外错误 print(f"发生错误:{e}") speak(f"发生错误,请检查程序。") if __name__ == "__main__": main()
3. 实现界面对话
import tkinter as tk from tkinter import scrolledtext, simpledialog import threading import speech_recognition as sr import pyttsx3 import requests import urllib.parse # 初始化语音引擎 engine = pyttsx3.init() def speak(text): """使用 pyttsx3 的函数来说话""" engine.say(text) engine.runAndWait() def listen(): """使用 speech_recognition 监听和识别语音,并在界面上显示听到的话""" r = sr.Recognizer() with sr.Microphone() as source: update_conversation("请说话...") audio = r.listen(source) try: text = r.recognize_google(audio, language='zh-CN') print(f"你说:{text}") return text except sr.UnknownValueError: update_conversation("无法理解音频") return None except sr.RequestError as e: update_conversation("服务请求错误") return None def chat_with_qingyunke(message): """发送消息到清云客 API 并返回回答""" base_url = "http://api.qingyunke.com/api.php" params = { "key": "free", "appid": 0, "msg": urllib.parse.quote(message) } response = requests.get(base_url, params=params) if response.status_code == 200: data = response.json() if data['result'] == 0: return data['content'].replace('{br}', '\n') else: return "机器人回答出错,请稍后再试。" else: return "请求失败,状态码:" + str(response.status_code) def update_conversation(text): """通过 after 方法来更新聊天文本框内容,确保它在主线程中执行""" def update(): conversation.config(state=tk.NORMAL) conversation.insert(tk.END, text + "\n") conversation.see(tk.END) conversation.config(state=tk.DISABLED) conversation.after(0, update) def on_speak_button_click(): """处理语音按钮点击,进行听和说""" def run(): text = listen() if text: process_message(text) threading.Thread(target=run).start() def on_text_entry(event=None): """处理文本输入,并发送消息""" message = text_entry.get() if message: text_entry.delete(0, tk.END) update_conversation("你说:" + message) process_message(message) def process_message(message): """处理消息的发送和响应""" if message.lower() == '退出': speak("再见!") root.quit() else: response = chat_with_qingyunke(message) update_conversation("机器人回答:" + response) speak(response) # 创建主窗口 root = tk.Tk() root.title("语音聊天机器人") # 创建聊天记录框 conversation = scrolledtext.ScrolledText(root, state='disabled', width=80, height=20) conversation.pack(pady=10) # 创建文本输入框 text_entry = tk.Entry(root, width=80) text_entry.bind("<Return>", on_text_entry) text_entry.pack(pady=10) # 创建一个按钮,点击时激活语音识别 speak_button = tk.Button(root, text="开始说话", command=on_speak_button_click) speak_button.pack(pady=20) # 运行主事件循环 root.mainloop()