簡單的 語音助手

前言

藉由開發可直接執行的簡單的語音助手專案,了解如何運用 python 語音套件:

  1. 語音輸入(SpeechRecognition),把「人講的話」轉成文字(Speech → Text)

  2. 語音輸出(pyttsx3),把「文字」轉成語音(Text → Speech)

簡單流程

  1. 開啟麥克風
  2. 接收聲音
  3. 將聲音送去辨識,呼叫語音辨識引擎
  4. 得到文字結果
  5. 將文字丟給 TTS(文字轉語音引擎)
  6. 由電腦播放出聲音

安裝所需套件

如果需要使用麥克風,建議安裝此套件

pip3 install pyaudio

註:

pyaudio 如出現問題 ->

note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for pyaudio

原因 ->

pyaudio 需要編譯 C 擴展,但你的系統缺少底層音訊函式庫

macOS 處理->

步驟 1:安裝 PortAudio

brew install portaudio

步驟 2:重新安裝 PyAudio

pip3 install pyaudio

「文字轉語音(Text-to-Speech, TTS)」套件

pip3 install pyttsx3

「語音(音訊)」轉成「文字」

pip3 install SpeechRecognition

程式碼

python 复制代码
import random
import speech_recognition as sr
import datetime
import pyttsx3

engine = pyttsx3.init()
engine.setProperty('rate', 160)

def speak(text):
    engine.say(text)
    engine.runAndWait()
    
intents = {
    "greeting": ["你好", "嗨", "您好"],
    "farewell": ["再見", "拜拜", "下次見"],
    "query": ["你是誰","幫助","你可以做什麼"],
    "time": ["現在幾點","現在時間",],
    "weather": ["今天天氣如何","天氣怎麼樣",]
}

responses = {
    "greeting": [
                "你好!很高興見到你!",
                "哈囉~今天過得如何?",
                "嗨,有什麼我可以幫忙的嗎?"
            ],
    "farewell": [
                "See you later!",
                "再見!祝你有美好的一天!",
                "拜拜~期待下次聊天!"
            ],
    "query": [
            "我是一個簡單的聊天機器人,隨時準備和你聊天!",
            "我很好,謝謝你的關心!你呢?",
            "我在這裡幫助你解答問題或是陪你聊天!"
            ],
    "weather": [
                "The weather is sunny today!",
                "我目前無法提供天氣資訊,但你可以試著問問其他問題!",
                "抱歉,我還在學習中,暫時無法回答天氣相關的問題。",
                "我還不太懂天氣,但我可以陪你聊聊其他話題!"
            ],
    "time": [
            "The current time is " + datetime.datetime.now().strftime("%I:%M %p") + ".",
            "我目前無法提供時間資訊,但你可以試著問問其他問題!",
            "抱歉,我還在學習中,暫時無法回答時間相關的問題。",
            "我還不太懂時間,但我可以陪你聊聊其他話題!"
            ]
}

def recognize_speech():
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
        print("請說話...")
        recognizer.adjust_for_ambient_noise(source, duration=1)
        audio = recognizer.listen(source, timeout=5)

    try:
        text = recognizer.recognize_google(audio, language="zh-TW")
        print(f"你說: {text}")
        return text
    except sr.UnknownValueError:
        print("抱歉,我聽不懂你在說什麼")
        return None
    except sr.RequestError:
        print("無法從 Google 服務取得結果")
        return None
    
    
if __name__ == "__main__":
    while True:
        user_input = recognize_speech()
        if user_input:
            response = None
            for intent, data in intents.items():
                for pattern in data:
                    if pattern in user_input:
                        response = random.choice(responses[intent])
                    break
            if response:
                print(f"AI: {response}")
                speak(response)
            elif user_input in ["退出", "離開", "結束"]:
                print("再見!")
                speak("再見!")
                break
            else:
                print("抱歉,我不太明白你的意思。")
                speak("抱歉,我不太明白你的意思。")

終端機 測試

相关推荐
计算机毕业编程指导师2 小时前
【计算机毕设推荐】Python+Hadoop+Spark共享单车数据可视化分析系统 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·课程设计
2301_795099742 小时前
golang如何在Gin中自定义验证器_golang Gin自定义验证器实现方法
jvm·数据库·python
计算机毕业编程指导师2 小时前
【计算机毕设】基于Hadoop的共享单车订单数据分析系统+Python+Django全栈开发 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·django
2301_766283442 小时前
如何在MongoDB GridFS中进行按文件大小(length)范围的查询
jvm·数据库·python
OpenTiny社区2 小时前
生成式 UI 藏大招!看似露营案例,实则电商集成 GenUI SDK 干货
前端·ai编程·交互设计
他是龙5512 小时前
71:Python安全 & 反序列化 & PYC反编译 & 格式化字符串安全
开发语言·python·安全
2601_956139422 小时前
文体娱媒品牌全案公司哪家强
大数据·人工智能·python
码途漫谈2 小时前
Easy-Vibe高级开发篇阅读笔记(五)——CC教程之Agent Teams
人工智能·笔记·ai·开源·ai编程
水木流年追梦3 小时前
【python因果库实战27】逆概率加权模型2
开发语言·python