性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

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

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

引言

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

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

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

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

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

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

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

項目目標(biāo)

計劃是基于樹莓派實現(xiàn)一個本地語言助手,數(shù)據(jù)保存本地保護(hù)隱私。

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

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

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

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

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

項目材料

樹莓派 5:主控板,負(fù)責(zé)運行所有邏輯。

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

軟件

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

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

TTS:基于 pyttsx3

LLM 推理:使用ollama大模型應(yīng)用框架,進(jìn)行本地語音模型推理

安裝ollama推理框架

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

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

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

ollama pull tinyllama //拉取模型

ollama list //顯示本地模型

ollama有一套很完整的大模型調(diào)用框架。

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

可以通過簡單的 HTTP 請求調(diào)用 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)

# 輸出結(jié)果
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 模型進(jìn)行文本生成,可以執(zhí)行:

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

模型列表

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

ollama models

此命令會列出當(dāng)前可以使用的

安裝阿里的sencevoice

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

安裝為python模塊

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

tts可以使用pip 下的pyttsx3

喚醒進(jìn)行錄音

# 按鍵喚醒線程
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語音轉(zhuǎn)文字

# SenseVoice 音頻轉(zhuǎn)錄函數(shù)
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",
    )
    
    # 將錄音傳給模型進(jìn)行轉(zhuǎn)錄
    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

調(diào)用ollama的api功能進(jìn)行推理

# Ollama API 調(diào)用
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進(jìn)入對話模式的時候,推理速度是很快的,但是調(diào)用api的時候推理十分慢。感覺應(yīng)該是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("錄音結(jié)束。")
    return audio

調(diào)用tts語音

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

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

語音本來是也想用阿里的cozyvoice模型的,但是看了一下好像對arm支持不是很好,并且自帶了英偉達(dá)顯卡的加速,如果不能用加速的話本地跑是非常非常慢的,對于想實時對話來說不太現(xiàn)實??梢钥紤]在服務(wù)器部署然后調(diào)用相關(guān)的api。

總結(jié):

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

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

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

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

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

全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法
發(fā)