一、所需硬件清单(可选补充)

名称

说明

是否必需

USB麦克风

若台式机麦克风效果差可补充

可选

外接音箱

若台式机扬声器效果差可补充

可选


二、软件准备

1. 安装Python
  • 访问 Python官网 下载最新版 Python 3.x,安装时勾选 “Add Python to PATH”。

2. 安装依赖库

在 命令提示符(CMD) 中执行以下命令:

pip install speechrecognition pyaudio vosk pyttsx3 gTTS
3. 下载Vosk中文模型

三、代码实现

1. 语音识别(离线+在线混合模式)

创建文件 voice_assistant.py,输入以下代码:

import speech_recognition as sr
from vosk import Model, KaldiRecognizer
import json
import os

# 配置Vosk离线模型路径
vosk_model_path = r"C:\vosk-model-cn"
model = Model(vosk_model_path)
recognizer = KaldiRecognizer(model, 16000)

def listen_offline():
    """离线语音识别(Vosk)"""
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("请说话...")
        audio = r.listen(source)
    
    # 将音频数据转换为Vosk需要的格式
    raw_data = audio.get_raw_data(convert_rate=16000, convert_width=2)
    if recognizer.AcceptWaveform(raw_data):
        result = json.loads(recognizer.Result())
        return result.get("text", "")
    else:
        return ""

def listen_online():
    """在线语音识别(Google API)"""
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("请说话...")
        audio = r.listen(source)
    try:
        return r.recognize_google(audio, language="zh-CN")
    except:
        return ""
2. 语音合成
import pyttsx3
from gtts import gTTS
import playsound

def speak(text, use_online=True):
    """语音合成(在线gTTS或离线pyttsx3)"""
    if use_online:
        # 在线合成(需联网)
        tts = gTTS(text=text, lang='zh-cn')
        tts.save("output.mp3")
        playsound.playsound("output.mp3")
        os.remove("output.mp3")
    else:
        # 离线合成
        engine = pyttsx3.init()
        engine.setProperty("rate", 150)
        engine.say(text)
        engine.runAndWait()
3. 主循环逻辑
if __name__ == "__main__":
    print("语音助手已启动!")
    while True:
        # 使用离线识别(若失败则切换在线)
        text = listen_offline()
        if not text:
            text = listen_online()
        
        if text:
            print("识别结果:", text)
            # 简单问答逻辑
            if "你好" in text:
                response = "你好,我是DeepSeek助手!"
            elif "时间" in text:
                import datetime
                now = datetime.datetime.now().strftime("%H点%M分")
                response = f"现在时间是{now}"
            else:
                response = "我还在学习中,请说更简单的指令。"
            
            # 语音输出(优先在线)
            speak(response, use_online=True)

四、运行与调试

1. 测试麦克风
  • 在代码中指定麦克风设备ID(若有多麦克风):

2. 运行程序

在CMD中执行:

python voice_assistant.py

五、扩展功能

1. 接入DeepSeek API
  • 安装请求库:

  • 在代码中添加:

2. 添加唤醒词
  • 使用 pocketsphinx 实现离线唤醒词检测:

  • 代码片段:


六、常见问题解决

  1. PyAudio安装失败:

    • 手动安装:下载 PyAudio Wheel(例如 PyAudio‑0.2.12‑cp310‑cp310‑win_amd64.whl),在CMD中执行:

  2. 麦克风无权限:

    • 右键点击任务栏音量图标 → 声音设置 → 麦克风隐私权限 → 允许应用访问麦克风。

  3. Vosk模型路径错误:

    • 检查 vosk_model_path 路径是否为解压后的模型目录(包含 am, conf 等子文件夹)。


通过以上步骤,你可以直接在 Windows 台式机上实现一个完整的语音交互系统。如果需要更复杂的逻辑(如智能家居控制),只需在主循环中添加对应代码即可!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐