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

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

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

項(xiàng)目簡(jiǎn)介

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

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

核心功能模塊

語(yǔ)音錄制 - 使用 sounddevice 錄制用戶語(yǔ)音

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

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

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

工作流程

用戶語(yǔ)音輸入 → 錄音 → 語(yǔ)音識(shí)別 → AI對(duì)話 → 語(yǔ)音合成 → 語(yǔ)音播放

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

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

1. 安裝必需的 Python 包

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

# 語(yǔ)音識(shí)別
pip install faster-whisper

# HTTP請(qǐng)求
pip install requests

# 語(yǔ)音合成(可選,如果使用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("?? 正在錄音,請(qǐng)開始說(shuō)話...")
    audio = sd.rec(int(duration * fs), samplerate=fs, channels=1)
    sd.wait()
    sf.write(filename, audio, fs)
    print("? 錄音完成")

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

# 與 Ollama 大模型對(duì)話,獲取回復(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

# 語(yǔ)音合成與播放,將文本轉(zhuǎn)為語(yǔ)音并播放
def speak_text(text, output="reply.wav"):
    """文本轉(zhuǎn)語(yǔ)音并播放"""
    print("?? 正在生成語(yǔ)音...")
    try:
        # 直接使用 edge-tts 命令,避免 echo 管道問(wèn)題
        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"? 語(yǔ)音合成失敗: {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"? 語(yǔ)音合成或播放出錯(cuò): {e}")

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

功能詳解

1. 語(yǔ)音錄制模塊

def record_audio(filename="input.wav", duration=5, fs=16000):
    print("?? 正在錄音,請(qǐng)開始說(shuō)話...")
    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í)長(zhǎng) 5 秒

使用 soundfile 保存為 WAV 格式

2. 語(yǔ)音識(shí)別模塊

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

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

使用 faster-whisper 庫(kù),比原版 Whisper 更快

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

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

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

3. AI對(duì)話模塊

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

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

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

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

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

4. 語(yǔ)音合成模塊

def speak_text(text, output="reply.wav"):
    print("?? 正在生成語(yǔ)音...")
    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 播放生成的音頻文件

支持多種語(yǔ)音選擇

使用說(shuō)明

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

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

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

2. 交互流程

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

性能優(yōu)化建議

1. Whisper 模型選擇

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

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

# 不同計(jì)算類型的性能對(duì)比
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ù)使用場(chǎng)景調(diào)整參數(shù)
record_audio(duration=3, fs=16000)   # 短對(duì)話
record_audio(duration=10, fs=22050)  # 長(zhǎng)對(duì)話,更高音質(zhì)

故障排除

常見(jiàn)問(wèn)題

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

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

2.Ollama 連接失敗

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

3.語(yǔ)音合成失敗

# 測(cè)試 edge-tts
edge-tts --list-voices | grep zh-CN

4.FFmpeg 播放問(wèn)題

# 檢查 FFmpeg 安裝
ffplay -version

擴(kuò)展功能

1. 添加喚醒詞檢測(cè)

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

2. 支持多輪對(duì)話

# 添加對(duì)話歷史管理
conversation_history = []

3. 語(yǔ)音情感識(shí)別

# 可集成情感分析庫(kù)
pip install transformers torch

總結(jié)

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

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

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

適用場(chǎng)景:

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    簡(jiǎn)單介紹Python的Django框架加載模版的方式

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

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

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

    python模塊之subprocess模塊級(jí)方法的使用

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

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

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

    Python urllib庫(kù)如何添加headers過(guò)程解析

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

最新評(píng)論