99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

【 DigiKey DIY原創(chuàng)大賽】基于樹莓派5的llm本地語音助手系統(tǒng)

引言

隨著人工智能技術的廣泛應用,各種專門為AI設計的硬件設備正迅速涌現。這些設備不僅提升了AI應用的性能,還將其帶入更多生活和工作場景。

比如最先乘著大語言模型的東風,在互聯(lián)網上火起來的rabbit R1硬件。其擁有一塊觸摸屏(官方設定為非觸摸,聽說可以修改系統(tǒng)設置變成可以識別觸屏),以及上下推拉式的對話按鈕,同時還配備了一個360度攝像頭。我們在rabbit R1官網上可以查看到,其擁有一些很酷的小技能。如語音對話,物品識別,雙向翻譯,網絡購物之類的。其在系統(tǒng)級別集成大語言模型的接口,將設備傳感器獲取的多模態(tài)數據(圖像,語言,文字等等,甚至是按鈕操作),在本地進行一些低算力的應用,如果需要高算力的應用支持則需要接入網絡,借助服務器的算力識別。

另外最近各個公司都在積極推出結合自家大模型技術的ai硬件產品,比如智能戒指,智能鼠標之類的。其中最引入矚目的便是字節(jié)跳動公司計劃推出的ai眼鏡、智能耳機產品,相關計算接入了自家的豆包大模型。處理一些語音對話,實時翻譯之類的任務。通過在硬件上搭載的傳感器,收集相關語音輸入,把ai推理所需要的計算放在云端,云端處理完過后將處理結果返回。當然本地也可以執(zhí)行一些算力低的推理任務,將一部分計算上傳至云,此時如何將調度部分任務卸載至云的問題亟待解決。

另外就是一些將ai計算加速硬件,嵌入到產品中。比如npu加速,以及最近很火的ai pc名詞。

為了支持大規(guī)模AI計算,硬件廠商推出了大量適合邊緣設備和嵌入式應用的AI芯片。例如:

谷歌 Coral:基于 Edge TPU,專為邊緣AI任務設計,支持低功耗運行和快速模型推理。英偉達 Jetson 系列:提供強大的GPU性能,用于邊緣設備上的計算密集型AI任務。自家廠商推出的npu,適用于自家硬件平臺,在一些特定任務上有高效加速作用。

此前在llama.cpp剛出來的時候,本人在樹莓派4B上測試推理結果,一個7B參數的模型,推理速度大概是每20s一個token,速度完全不能夠實用。現如今,各種場景下的應用ai模型發(fā)展的都十分迅速,技術更迭也很快,如今已經出現了很多易于配置,應用大模型的一套解決方案。比如dify,ollama之類的大模型應用框架。直接在應用中就可以拉取模型,處理輸入輸出。剛好感謝得捷電子以及電源網聯(lián)合推出的diy活動,希望能通過這個機會體驗一下ai應用,嘗試將大模型更好地、方便地帶入生活之中。

項目目標

計劃是基于樹莓派實現一個本地語言助手,數據保存本地保護隱私。

tip:但在實際開發(fā)過程中,覺得ollama的性能在樹莓派上的表現實在還是不夠,需要更換一些更快的推理引擎。

語音識別:通過 SenseVoice 模型將語音轉化為文字,支持多種語言的語音輸入。

自然語言理解與生成:通過調用 Ollama API 的 Qwen 模型生成智能對話,理解用戶問題并給予自然語言的響應。

語音輸出:通過 pyttsx3 將 Qwen 模型生成的文字回答轉換為語音,返回給用戶。

喚醒功能:實現按鍵和語音(通過 Snowboy)喚醒功能,允許用戶通過不同方式啟動語音助手。

項目材料

樹莓派 5:主控板,負責運行所有邏輯。

USB 聲卡 + 麥克風:用于高質量語音輸入以及輸出。樹莓派是自帶有i2s接口的,但是為了方便還是用的usb免驅的。

軟件

操作系統(tǒng):基于 ubuntu 24。

語音處理ASR:使用 阿里推出的sensevoice模型,支持多國語言,擁有情感分析

TTS:基于 pyttsx3

LLM 推理:使用ollama大模型應用框架,進行本地語音模型推理

安裝ollama推理框架

Ollama 是一個開源框架,專注于本地部署大型語言模型(LLM),讓用戶無需依賴云服務即可運行強大的 AI 應用。它通過容器化模型管理和輕量化的 API 接口,支持聊天交互、文本生成、模型定制等功能。

curl https://ollama.ai/install.sh | sh

ollama并不支持使用rapberrypi5的gpu處理,雖然自帶的gpu很羸弱。樹莓派5可以裝配pcie擴展的ai加速 kit。

ollama pull tinyllama //拉取模型

ollama list //顯示本地模型

ollama有一套很完整的大模型調用框架。

ollama有對話模式,以及可以調用api。但在我實際運行中,樹莓派上本地調用api返回回答非常慢。

可以通過簡單的 HTTP 請求調用 Ollama 提供的 API 生成文本。

import requests

# 定義請求的 URL 和頭部信息
url = "https://api.ollama.com/v1/generate"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
}

# 定義請求的 payload
payload = {
    "model": "qwen",  # 使用的模型名稱,支持多個模型
    "input": "Hello, how are you?",  # 輸入的對話或文本
}

# 發(fā)送請求
response = requests.post(url, json=payload, headers=headers)

# 輸出結果
if response.status_code == 200:
    data = response.json()
    print("Response:", data['text'])  # 返回的生成文本
else:
    print(f"Error: {response.status_code}")

使用不同的模型

除了 qwen,Ollama 還支持其他模型。想使用不同的模型,只需在命令中指定模型名稱:

ollama run <model_name> "<input_text>"

例如,如果您想使用 llama 模型進行文本生成,可以執(zhí)行:

ollama run llama "What is the meaning of life?"

模型列表

可以列出 Ollama 支持的所有可用模型:

ollama models

此命令會列出當前可以使用的

安裝阿里的sencevoice

SenseVoice 是一個語音基礎模型,具有多種語音理解功能,包括自動語音識別 (ASR)、口語識別 (LID)、語音情感識別 (SER) 和音頻事件檢測 (AED)。

安裝為python模塊

git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./

tts可以使用pip 下的pyttsx3

喚醒進行錄音

# 按鍵喚醒線程
def button_wakeup():
    import keyboard
    global wakeup_flag
    while True:
        if keyboard.read_key() == "enter":
            with lock:
                wakeup_flag = True
            print("按鍵喚醒成功!")

# Snowboy 喚醒線程
def snowboy_wakeup(model_path="resources/snowboy.umdl"):
    def detected_callback():
        global wakeup_flag
        with lock:
            wakeup_flag = True
        print("語音喚醒成功!")

    detector = snowboydecoder.HotwordDetector(model_path, sensitivity=0.5)
    print("正在監(jiān)聽語音喚醒...")
    detector.start(detected_callback=detected_callback)
    detector.terminate()

sencevoice語音轉文字

# SenseVoice 音頻轉錄函數
def recognize_speech_with_sensevoice(audio_data, language="auto"):
    model_dir = "iic/SenseVoiceSmall"
    model = AutoModel(
        model=model_dir,
        trust_remote_code=True,
        remote_code="./model.py",
        vad_model="fsmn-vad",
        vad_kwargs={"max_single_segment_time": 30000},
        device="cuda:0",
    )
    
    # 將錄音傳給模型進行轉錄
    res = model.generate(
        input=audio_data,
        cache={},
        language=language,  # "zh", "en", "yue", "ja", "ko", "nospeech"
        use_itn=True,
        batch_size_s=60,
        merge_vad=True,
        merge_length_s=15,
    )
    text = rich_transcription_postprocess(res[0]["text"])
    return text

調用ollama的api功能進行推理

# Ollama API 調用
def call_ollama(prompt, api_url="http://localhost:8000/api/generate"):
    headers = {"Content-Type": "application/json"}
    payload = {"prompt": prompt, "model": "qwen"}
    try:
        response = requests.post(api_url, json=payload)
        if response.status_code == 200:
            return response.json().get("text", "No response.")
        else:
            return f"Error: {response.status_code}"
    except Exception as e:
        return f"Exception occurred: {str(e)}"

這里的推理速度很奇怪,在ollama進入對話模式的時候,推理速度是很快的,但是調用api的時候推理十分慢。感覺應該是cpu占用問題,ollama的cpu占用較大,很影響效率。

錄音功能

# 錄音功能
def record_audio(duration=5, sample_rate=16000):
    print("開始錄音...")
    audio = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=1, dtype=np.int16)
    sd.wait()
    print("錄音結束。")
    return audio

調用tts語音

# 全局變量
wakeup_flag = False
lock = threading.Lock()

# 初始化語音合成
def speak(text):
    engine = pyttsx3.init()
    engine.setProperty('rate', 150)  # 設置語速
    engine.setProperty('voice', 'english')  # 設置語音
    engine.say(text)
    engine.runAndWait()

語音本來是也想用阿里的cozyvoice模型的,但是看了一下好像對arm支持不是很好,并且自帶了英偉達顯卡的加速,如果不能用加速的話本地跑是非常非常慢的,對于想實時對話來說不太現實。可以考慮在服務器部署然后調用相關的api。

總結:

在本項目中,我開發(fā)了一個基于大語言模型(LLM)的語音助手系統(tǒng),使用了Ollama API來處理文本生成任務,結合 SenseVoice 進行語音轉錄,最終使用 pyttsx3 進行語音合成,使用了按鍵或者是snowboy進行喚醒錄音。

項目不足:推理速度較慢: 使用 Ollama API 進行大語言模型推理時,響應速度不盡如人意。雖然 OLLama 提供了便捷的接口,但由于網絡延遲及模型本身推理的時間,導致響應速度較慢,尤其是在進行長文本生成時。

語音識別的準確性問題: 盡管 SenseVoice 支持多語言轉錄,但在嘈雜環(huán)境或發(fā)音不清晰時,識別效果仍存在一定局限性,尤其是在口音多樣化的情況下。

改進方向:本地部署優(yōu)化: 為了提升推理速度,考慮將 Ollama 或類似的大語言模型替換為其他支持大模型的推理引擎llama.cpp,這樣可以提升響應速度。

由于在大模型應用做實踐的比較少,ollama在算力高的平臺是非常易用的,但是跑在樹莓派5上性能就有點不盡人意。這也讓我認識到,在項目初期制定方案的時候,應該參考網上已有的用例,看是否可行并且高效。在邊緣設備上一般采用性能更好的使用c++推理的框架。

全部回復(0)
正序查看
倒序查看
現在還沒有回復呢,說說你的想法
發(fā)
主站蜘蛛池模板: 午夜爽爽爽男女免费观看影院 | 无码一区二区三区不卡AV | 欧美视频亚洲视频 | 最新永久无码AV网址亚洲 | 久久AV无码乱码A片无码 | 免费观看黄页网站 | 亚洲国产精品久久久久日本竹山梨 | 国产精品午夜久久久久久99热 | 人妻互换一二三区激情视频 | www.豆花福利视频 | 精品婷婷久久 | 亚洲国产精品久久久久久69 | 成人日韩精品 | 46集连续剧免费观看 | 色噜噜亚洲男人的天堂 | 日本japanese少妇漂亮 | 性色av一区二区怡红 | 黄色一区二区三区四区 | 国产福利一区二区三区在线视频 | 无码性按摩AV在线观看 | 国产亚洲亚洲国产一二区 | 橘梨纱av一区二区三区在线观看 | 国产视频久久网 | 精品久久AⅤ人妻中文字幕 国产高清无码黄片亚洲大尺度视频 | 九一视频国产 | 高清黄色一级片 | 久久精品国产亚洲A∨麻豆 日本在线看片免费人成视频 | 亚洲AⅤ人片在线观看无 | 一区三区在线观看 | 色网址在线观看 | 久草不卡视频 | 精品在线观看一区二区三区 | 女同久久精品国产99国产精品网站 | 日韩不卡中文字幕 | 中文字幕久久久久一区 | 欧洲成人午夜精品无码区久久 | 999www人成免费视频 | 亚洲AV无码之国产精品 | 国产一级片 | 久久99国产精品亚洲 | 久久久精品国产一区 |