python实现智能ai机器人界面对话

需要用到的库:

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()

  • 34
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好运仅李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值