欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python調(diào)用本地ollama大模型實(shí)現(xiàn)智能語音助手

 更新時(shí)間:2025年05月29日 08:39:31   作者:老大白菜  
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用本地ollama大模型實(shí)現(xiàn)智能語音助手,集成了語音錄制,語音識別等功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

項(xiàng)目簡介

本項(xiàng)目是一個(gè)基于 Python 的智能語音助手,集成了語音錄制、語音識別、AI對話和語音合成功能。用戶可以通過語音與本地部署的 Ollama 大模型進(jìn)行自然對話。

技術(shù)架構(gòu)

核心功能模塊

語音錄制 - 使用 sounddevice 錄制用戶語音

語音識別 - 使用 faster-whisper 將語音轉(zhuǎn)換為文本

AI對話 - 與本地 Ollama 模型進(jìn)行文本對話

語音合成 - 使用 edge-tts 將AI回復(fù)轉(zhuǎn)換為語音并播放

工作流程

用戶語音輸入 → 錄音 → 語音識別 → AI對話 → 語音合成 → 語音播放

實(shí)現(xiàn)效果

環(huán)境準(zhǔn)備

1. 安裝必需的 Python 包

# 音頻處理相關(guān)
pip install sounddevice soundfile pyaudio

# 語音識別
pip install faster-whisper

# HTTP請求
pip install requests

# 語音合成(可選,如果使用edge-tts)
pip install edge-tts

2. 系統(tǒng)依賴

Windows 系統(tǒng)

# 使用 Chocolatey 安裝 FFmpeg(推薦)
choco install ffmpeg

# 或者手動(dòng)下載 FFmpeg 并添加到系統(tǒng) PATH
# 下載地址:https://ffmpeg.org/download.html

Linux/macOS 系統(tǒng)

# Ubuntu/Debian
sudo apt update
sudo apt install ffmpeg

# macOS
brew install ffmpeg

3. Ollama 模型部署

# 安裝 Ollama
curl -fsSL https://ollama.ai/install.sh | sh

# 拉取模型(選擇其中一個(gè))
ollama pull yi:9b
# 或者
ollama pull llama3-8b

# 啟動(dòng) Ollama 服務(wù)
ollama serve

完整源代碼

import subprocess
import sounddevice as sd
import soundfile as sf
from faster_whisper import WhisperModel
import requests

OLLAMA_MODEL = "yi:9b"  # 或者 llama3-8b,已在 Ollama 里拉取好的模型

# 錄音函數(shù),錄制音頻并保存為 input.wav
def record_audio(filename="input.wav", duration=5, fs=16000):
    print("?? 正在錄音,請開始說話...")
    audio = sd.rec(int(duration * fs), samplerate=fs, channels=1)
    sd.wait()
    sf.write(filename, audio, fs)
    print("? 錄音完成")

# 語音識別函數(shù),調(diào)用 WhisperModel 將音頻轉(zhuǎn)為文本
def transcribe_whisper(filename="input.wav"):
    print("?? Whisper 正在識別語音...")
    model = WhisperModel("medium", compute_type="int8")
    segments, _ = model.transcribe(filename, beam_size=5)
    text = "".join([seg.text for seg in segments])
    print(f"?? 識別結(jié)果:{text}")
    return text

# 與 Ollama 大模型對話,獲取回復(fù)
def chat_with_ollama(prompt):
    print("?? 發(fā)送給 Ollama 中...")
    response = requests.post("http://ollama.jjsos.cn/api/generate", json={
        "model": OLLAMA_MODEL,
        "prompt": prompt,
        "stream": False
    })
    answer = response.json()["response"]
    print(f"?? Ollama 回復(fù):{answer}")
    return answer

# 語音合成與播放,將文本轉(zhuǎn)為語音并播放
def speak_text(text, output="reply.wav"):
    """文本轉(zhuǎn)語音并播放"""
    print("?? 正在生成語音...")
    try:
        # 直接使用 edge-tts 命令,避免 echo 管道問題
        tts_command = ["edge-tts", "--text", text, "--voice", "zh-CN-XiaoxiaoNeural", "--write-media", output]
        result = subprocess.run(tts_command, capture_output=True, text=True)
        
        # 檢查命令是否成功執(zhí)行
        if result.returncode != 0:
            print(f"? 語音合成失敗: {result.stderr}")
            return
        
        # 檢查文件是否存在
        import os
        if not os.path.exists(output):
            print(f"? 音頻文件 {output} 未生成")
            return
            
        print("?? 播放中...")
        subprocess.run(["ffplay", "-nodisp", "-autoexit", output])
        
    except Exception as e:
        print(f"? 語音合成或播放出錯(cuò): {e}")

# 主流程:錄音 -> 語音識別 -> AI對話 -> 語音合成與播放
if __name__ == "__main__":
    record_audio()  # 錄音
    user_text = transcribe_whisper()  # 語音轉(zhuǎn)文本
    reply_text = chat_with_ollama(user_text)  # AI對話
    speak_text(reply_text)  # 語音合成與播放

功能詳解

1. 語音錄制模塊

def record_audio(filename="input.wav", duration=5, fs=16000):
    print("?? 正在錄音,請開始說話...")
    audio = sd.rec(int(duration * fs), samplerate=fs, channels=1)
    sd.wait()
    sf.write(filename, audio, fs)
    print("? 錄音完成")

技術(shù)要點(diǎn):

使用 sounddevice 進(jìn)行實(shí)時(shí)音頻錄制

采樣率設(shè)置為 16kHz,單聲道錄制

默認(rèn)錄制時(shí)長 5 秒

使用 soundfile 保存為 WAV 格式

2. 語音識別模塊

def transcribe_whisper(filename="input.wav"):
    print("?? Whisper 正在識別語音...")
    model = WhisperModel("medium", compute_type="int8")
    segments, _ = model.transcribe(filename, beam_size=5)
    text = "".join([seg.text for seg in segments])
    print(f"?? 識別結(jié)果:{text}")
    return text

技術(shù)要點(diǎn):

使用 faster-whisper 庫,比原版 Whisper 更快

選擇 “medium” 模型,平衡準(zhǔn)確性和速度

compute_type="int8" 量化加速,減少內(nèi)存占用

beam_size=5 提高識別準(zhǔn)確率

3. AI對話模塊

def chat_with_ollama(prompt):
    print("?? 發(fā)送給 Ollama 中...")
    response = requests.post("http://localhost:11434/api/generate", json={
        "model": OLLAMA_MODEL,
        "prompt": prompt,
        "stream": False
    })
    answer = response.json()["response"]
    print(f"?? Ollama 回復(fù):{answer}")
    return answer

技術(shù)要點(diǎn):

通過 HTTP API 與 Ollama 服務(wù)通信(支持本地或遠(yuǎn)程部署)

支持多種模型:yi:9b、llama3-8b 等

stream=False 獲取完整回復(fù)

可配置本地部署(http://localhost:11434)或遠(yuǎn)程服務(wù)

4. 語音合成模塊

def speak_text(text, output="reply.wav"):
    print("?? 正在生成語音...")
    tts_command = f"echo '{text}' | edge-tts --voice zh-CN-XiaoxiaoNeural --write-media {output}"
    subprocess.run(tts_command, shell=True)
    print("?? 播放中...")
    subprocess.run(["ffplay", "-nodisp", "-autoexit", output])

技術(shù)要點(diǎn):

使用 Microsoft Edge TTS 引擎

選擇中文女聲 “zh-CN-XiaoxiaoNeural”

使用 FFplay 播放生成的音頻文件

支持多種語音選擇

使用說明

1. 啟動(dòng)準(zhǔn)備

# 1. 確保 Ollama 服務(wù)運(yùn)行
ollama serve

# 2. 運(yùn)行語音助手
python v.py

2. 交互流程

  • 程序啟動(dòng)后自動(dòng)開始錄音(5秒)
  • 錄音結(jié)束后進(jìn)行語音識別
  • 識別結(jié)果發(fā)送給 Ollama 模型
  • AI 回復(fù)轉(zhuǎn)換為語音并播放

性能優(yōu)化建議

1. Whisper 模型選擇

模型大小內(nèi)存占用識別速度準(zhǔn)確率
tiny~39MB最快較低
base~74MB中等
small~244MB中等良好
medium~769MB較慢很好
large~1550MB最慢最佳

2. 計(jì)算類型優(yōu)化

# 不同計(jì)算類型的性能對比
model = WhisperModel("medium", compute_type="int8")    # 推薦:速度快,內(nèi)存少
model = WhisperModel("medium", compute_type="float16") # 平衡:中等速度和精度
model = WhisperModel("medium", compute_type="float32") # 最高精度,最慢速度

3. 錄音參數(shù)調(diào)優(yōu)

# 根據(jù)使用場景調(diào)整參數(shù)
record_audio(duration=3, fs=16000)   # 短對話
record_audio(duration=10, fs=22050)  # 長對話,更高音質(zhì)

故障排除

常見問題

1.錄音設(shè)備問題

# 查看可用音頻設(shè)備
import sounddevice as sd
print(sd.query_devices())

2.Ollama 連接失敗

# 檢查 Ollama 服務(wù)狀態(tài)
curl http://localhost:11434/api/tags

3.語音合成失敗

# 測試 edge-tts
edge-tts --list-voices | grep zh-CN

4.FFmpeg 播放問題

# 檢查 FFmpeg 安裝
ffplay -version

擴(kuò)展功能

1. 添加喚醒詞檢測

# 可集成 pvporcupine 實(shí)現(xiàn)喚醒詞功能
pip install pvporcupine

2. 支持多輪對話

# 添加對話歷史管理
conversation_history = []

3. 語音情感識別

# 可集成情感分析庫
pip install transformers torch

總結(jié)

本項(xiàng)目展示了如何構(gòu)建一個(gè)完整的語音助手系統(tǒng),涵蓋了從語音輸入到語音輸出的完整鏈路。通過本地部署的方式,既保證了響應(yīng)速度,又保護(hù)了用戶隱私。

項(xiàng)目特點(diǎn):

  • 隱私保護(hù):所有處理都在本地完成
  • 響應(yīng)迅速:優(yōu)化的模型配置和本地部署
  • 易于擴(kuò)展:模塊化設(shè)計(jì),便于功能擴(kuò)展
  • 成本低廉:無需調(diào)用付費(fèi)API

適用場景:

  • 個(gè)人語音助手
  • 智能家居控制
  • 語音筆記工具
  • 教育輔助工具

到此這篇關(guān)于Python調(diào)用本地ollama大模型實(shí)現(xiàn)智能語音助手的文章就介紹到這了,更多相關(guān)Python ollama智能語音助手內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python socket模塊方法實(shí)現(xiàn)詳解

    Python socket模塊方法實(shí)現(xiàn)詳解

    這篇文章主要介紹了Python socket模塊方法實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python Matplotlib底圖中鼠標(biāo)滑過顯示隱藏內(nèi)容的實(shí)例代碼

    python Matplotlib底圖中鼠標(biāo)滑過顯示隱藏內(nèi)容的實(shí)例代碼

    這篇文章主要介紹了python Matplotlib底圖中鼠標(biāo)滑過顯示隱藏內(nèi)容,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 2021年最新用于圖像處理的Python庫總結(jié)

    2021年最新用于圖像處理的Python庫總結(jié)

    為了快速地處理大量信息,科學(xué)家需要利用圖像準(zhǔn)備工具來完成人工智能和深度學(xué)習(xí)任務(wù).在本文中,我將深入研究Python中最有用的圖像處理庫,這些庫正在人工智能和深度學(xué)習(xí)任務(wù)中得到大力利用.我們開始吧,需要的朋友可以參考下
    2021-06-06
  • 使用TensorFlow實(shí)現(xiàn)二分類的方法示例

    使用TensorFlow實(shí)現(xiàn)二分類的方法示例

    這篇文章主要介紹了使用TensorFlow實(shí)現(xiàn)二分類的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • Ubuntu下升級 python3.7.1流程備忘(推薦)

    Ubuntu下升級 python3.7.1流程備忘(推薦)

    這篇文章主要介紹了Ubuntu下升級 python3.7.1流程備忘,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • 簡單介紹Python的Django框架加載模版的方式

    簡單介紹Python的Django框架加載模版的方式

    這篇文章主要介紹了Python的Django框架加載模版的方式,包括一些對加載順序的介紹,需要的朋友可以參考下
    2015-07-07
  • python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法分析

    python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法分析

    這篇文章主要介紹了python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法,簡單分析了AES加密解密算法的基本概念并結(jié)合實(shí)例形式給出了AES加密解密算法的相關(guān)實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • python模塊之subprocess模塊級方法的使用

    python模塊之subprocess模塊級方法的使用

    這篇文章主要介紹了python模塊之subprocess模塊級方法的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 弄懂這56個(gè)Python使用技巧(輕松掌握Python高效開發(fā))

    弄懂這56個(gè)Python使用技巧(輕松掌握Python高效開發(fā))

    這篇文章主要介紹了弄懂這56個(gè)Python使用技巧(輕松掌握Python高效開發(fā)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-09-09
  • Python urllib庫如何添加headers過程解析

    Python urllib庫如何添加headers過程解析

    這篇文章主要介紹了Python urllib庫如何添加headers過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評論