簡單的 語音助手

前言

藉由開發可直接執行的簡單的語音助手專案,了解如何運用 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("抱歉,我不太明白你的意思。")

終端機 測試

相关推荐
wflynn1 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
2601_967980111 小时前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包
心疼你的一切1 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
李剑一2 小时前
没收用户的钱冲史上最大IPO?2 万亿美元的估值有多少是罚没来的
aigc·openai·ai编程
张益达Yida2 小时前
我把 0.6B 大模型塞进安卓手机:596 秒到 10 秒
ai编程
卡提西亚3 小时前
FastAPI基础入门
python·fastapi
fanruitian3 小时前
python 机器学习 ML LinearRegression KNN KMeans
python·机器学习·kmeans
鱼宵3 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
小虎AI生活3 小时前
腾讯 Buddy One 架构解读:跨应用 Agent 底座怎么打通办公协同
aigc·ai编程
卷无止境3 小时前
给AI装上一双眼睛:快速构建代码验证器的思路与落地方案
后端·python