最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

核心功能模塊

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

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

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

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

工作流程

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

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

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

1. 安裝必需的 Python 包

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

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

# HTTP請(qǐng)求
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("?? 正在錄音,請(qǐng)開始說話...")
    audio = sd.rec(int(duration * fs), samplerate=fs, channels=1)
    sd.wait()
    sf.write(filename, audio, fs)
    print("? 錄音完成")

# 語音識(shí)別函數(shù),調(diào)用 WhisperModel 將音頻轉(zhuǎn)為文本
def transcribe_whisper(filename="input.wav"):
    print("?? Whisper 正在識(shí)別語音...")
    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

# 語音合成與播放,將文本轉(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}")

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

功能詳解

1. 語音錄制模塊

def record_audio(filename="input.wav", duration=5, fs=16000):
    print("?? 正在錄音,請(qǐng)開始說話...")
    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. 語音識(shí)別模塊

def transcribe_whisper(filename="input.wav"):
    print("?? Whisper 正在識(shí)別語音...")
    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):

通過 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)行語音識(shí)別
  • 識(shí)別結(jié)果發(fā)送給 Ollama 模型
  • AI 回復(fù)轉(zhuǎn)換為語音并播放

性能優(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ì)

故障排除

常見問題

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

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

2.Ollama 連接失敗

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

3.語音合成失敗

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

4.FFmpeg 播放問題

# 檢查 FFmpeg 安裝
ffplay -version

擴(kuò)展功能

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

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

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

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

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

# 可集成情感分析庫(kù)
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

適用場(chǎng)景:

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

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

相關(guān)文章

  • Python使用chardet判斷字符編碼

    Python使用chardet判斷字符編碼

    這篇文章主要介紹了Python使用chardet判斷字符編碼的方法,較為詳細(xì)的分析了Python中chardet的功能、安裝及使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python下的Softmax回歸函數(shù)的實(shí)現(xiàn)方法(推薦)

    Python下的Softmax回歸函數(shù)的實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄狿ython下的Softmax回歸函數(shù)的實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 用python建立兩個(gè)Y軸的XY曲線圖方法

    用python建立兩個(gè)Y軸的XY曲線圖方法

    今天小編就為大家分享一篇用python建立兩個(gè)Y軸的XY曲線圖方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python判斷MySQL表是否存在的兩種方法

    Python判斷MySQL表是否存在的兩種方法

    在數(shù)據(jù)庫(kù)開發(fā)中,經(jīng)常需要檢查某個(gè)表是否存在,如果不存在則創(chuàng)建它,下面我們就來看看如何使用Python連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)表存在性檢查與創(chuàng)建的功能吧
    2026-02-02
  • python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理

    python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理

    這篇文章主要為大家詳細(xì)介紹了python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 使用Python和jieba庫(kù)生成中文詞云的示例代碼

    使用Python和jieba庫(kù)生成中文詞云的示例代碼

    在文本分析和數(shù)據(jù)可視化的領(lǐng)域中,詞云是一種展示文本數(shù)據(jù)中關(guān)鍵詞頻率的直觀方式,Python作為一種強(qiáng)大的編程語言,提供了多種庫(kù)來幫助我們生成詞云,在本文中,我們將通過一個(gè)簡(jiǎn)單的示例,展示如何使用Python生成中文詞云,需要的朋友可以參考下
    2024-07-07
  • Python整數(shù)與Numpy數(shù)據(jù)溢出問題解決

    Python整數(shù)與Numpy數(shù)據(jù)溢出問題解決

    這篇文章主要介紹了Python 的整數(shù)與 Numpy 的數(shù)據(jù)溢出,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 深入解析 Python 的 argparse命令行參數(shù)的實(shí)戰(zhàn)案例

    深入解析 Python 的 argparse命令行參數(shù)的實(shí)戰(zhàn)案例

    argparse是開發(fā)Python命令行工具不可或缺的標(biāo)準(zhǔn)模塊,它功能全面、文檔豐富、學(xué)習(xí)曲線平緩,只要掌握了它,你就可以輕松將任何 Python 腳本變成一個(gè)強(qiáng)大、優(yōu)雅、可維護(hù)的命令行工具,本文帶領(lǐng)深入解析Python的argparse命令行參數(shù),需要的朋友跟隨小編一起看看吧
    2025-08-08
  • 深度學(xué)習(xí)小工程練習(xí)之tensorflow垃圾分類詳解

    深度學(xué)習(xí)小工程練習(xí)之tensorflow垃圾分類詳解

    這篇文章主要介紹了練習(xí)深度學(xué)習(xí)的一個(gè)小工程,代碼簡(jiǎn)單明確,用來作為學(xué)習(xí)深度學(xué)習(xí)的練習(xí)很適合,對(duì)于有需要的朋友可以參考下,希望大家可以體驗(yàn)到深度學(xué)習(xí)帶來的收獲
    2021-04-04
  • Python爬蟲必備之XPath解析庫(kù)

    Python爬蟲必備之XPath解析庫(kù)

    今天給大家?guī)淼氖荘ython爬蟲的相關(guān)知識(shí),文章圍繞著XPath解析庫(kù)展開,文中有非常詳細(xì)的代碼示例及介紹,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

湖北省| 兴和县| 民丰县| 桂林市| 宁南县| 庄河市| 林州市| 武邑县| 嘉禾县| 曲阜市| 安达市| 吴江市| 乌海市| 汉沽区| 浙江省| 沾化县| 岑巩县| 绥阳县| 台前县| 桐梓县| 高唐县| 调兵山市| 翁源县| 永丰县| 清流县| 盐山县| 峨眉山市| 井研县| 海安县| 陵水| 辽宁省| 华坪县| 连云港市| 大荔县| 牙克石市| 策勒县| 克东县| 清新县| 陵川县| 西安市| 恩施市|