【AI實踐】Mac一天熟悉AI模型智能體應用(百煉版)

25.6.29增加Gummy 實時/一句話語音識別
25.6.28增加Qwen TTS本地音頻和實時播報

背景

準備環境

MacOS M1電腦(其他M系列芯片也可以)

為了方便python的使用環境,使用Miniconda:下載鏈接:Download Anaconda Distribution | Anaconda

安裝阿里模型的依賴庫:https://bailian.console.aliyun.com/?tab=api#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2712193.html%23f3e80b21069aa

為了配置環境變量:https://bailian.console.aliyun.com/?tab=api#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2803795.html

?

為了方便編輯代碼,下載安裝最流行的:vscode,最新版本已經有了Github Copilot免費用,記得要打開。

?為了解決使用了Miniconda的python環境,導致vscode自帶的運行環境找不到dashscope出錯的問題;

  • 按下?Cmd+Shift+P,輸入并選擇?Python: Select Interpreter
  • 選擇你用 miniconda 安裝 dashscope 的那個環境(比如?miniconda3/envs/xxx)。
  • 右下角狀態欄會顯示當前環境。
  • 驗證:which python

Gummy-ASR

實時識別

一句話識別

官方demo,未修改;

原理:程序啟動時,會開始錄音;錄音結束判停:經過查看代碼,和日志查看,由云端判定的),一分鐘音頻是上限。

# For prerequisites running the following sample, visit https://help.aliyun.com/document_detail/xxxxx.html
# 一句話識別能夠對一分鐘內的語音數據流(無論是從外部設備如麥克風獲取的音頻流,還是從本地文件讀取的音頻流)進行識別并流式返回結果。import pyaudio
import dashscope
from dashscope.audio.asr import *# 若沒有將API Key配置到環境變量中,需將your-api-key替換為自己的API Key
# dashscope.api_key = "your-api-key"mic = None
stream = Noneclass Callback(TranslationRecognizerCallback):def on_open(self) -> None:global micglobal streamprint("TranslationRecognizerCallback open.")mic = pyaudio.PyAudio()stream = mic.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True)def on_close(self) -> None:global micglobal streamprint("TranslationRecognizerCallback close.")stream.stop_stream()stream.close()mic.terminate()stream = Nonemic = Nonedef on_event(self,request_id,transcription_result: TranscriptionResult,translation_result: TranslationResult,usage,) -> None:print("request id: ", request_id)print("usage: ", usage)if translation_result is not None:print("translation_languages: ",translation_result.get_language_list(),)english_translation = translation_result.get_translation("en")print("sentence id: ", english_translation.sentence_id)print("translate to english: ", english_translation.text)if english_translation.vad_pre_end:print("vad pre end {}, {}, {}".format(transcription_result.pre_end_start_time, transcription_result.pre_end_end_time, transcription_result.pre_end_timemillis))if transcription_result is not None:print("sentence id: ", transcription_result.sentence_id)print("transcription: ", transcription_result.text)callback = Callback()translator = TranslationRecognizerChat(model="gummy-chat-v1",format="pcm",sample_rate=16000,transcription_enabled=True,translation_enabled=True,translation_target_languages=["en"],callback=callback,
)
translator.start()
print("請您通過麥克風講話體驗一句話語音識別和翻譯功能")
while True:if stream:data = stream.read(3200, exception_on_overflow=False)if not translator.send_audio_frame(data):print("sentence end, stop sending")breakelse:breaktranslator.stop()

Qwen-TTS

非實時TTS

將生成的音頻,保存到本地。文檔見https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2879134.html&renderType=iframe

修復了tts請求時,response出錯的情況(比如API_KEY不對)

import os
import requests
import dashscopetext = "那我來給大家推薦一款T恤,這款呢真的是超級好看,這個顏色呢很顯氣質,而且呢也是搭配的絕佳單品,大家可以閉眼入,真的是非常好看,對身材的包容性也很好,不管啥身材的寶寶呢,穿上去都是很好看的。推薦寶寶們下單哦。"
response = dashscope.audio.qwen_tts.SpeechSynthesizer.call(model="qwen-tts",api_key=os.getenv("DASHSCOPE_API_KEY"),text=text,voice="Cherry",
)# ====== 開始檢查 response 是否有效 ======
print(response)
if not hasattr(response, 'output') or response.output is None:print("響應中沒有 output 字段,請檢查權限或模型是否開通")exit()if not hasattr(response.output, 'audio') or response.output.audio is None:print("響應中沒有 audio 數據,請檢查返回內容")exit()if not hasattr(response.output.audio, 'url'):print("響應中 audio 沒有 url 字段,請檢查返回結構")exit()# ====== 結束檢查 response 是否有效 ======audio_url = response.output.audio["url"]save_path = "downloaded_audio.wav"  # 自定義保存路徑try:response = requests.get(audio_url)response.raise_for_status()  # 檢查請求是否成功with open(save_path, 'wb') as f:f.write(response.content)print(f"音頻文件已保存至:{save_path}")
except Exception as e:print(f"下載失敗:{str(e)}")

問題1:pip install pyaudio失敗

解決方案:

(1)先安裝brew:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)",重啟

(2)再安裝brew install portaudio

(3)再安裝pip install pyaudio

生成的TTS音頻文件,放到了本地。適合音頻生成離線播報場景,比如PPT。

不適合實時的語音交互,我們需要實時TTS。

實時TTS

按照官方demo跑就好。

我們把實時TTS封裝成函數api,并提供了api測試demo;

函數封裝代碼:qwen_play_tts.py

# coding=utf-8import os
import dashscope
import pyaudio
import time
import base64
import numpy as npdef qwen_play_tts(text, voice="Ethan", api_key=None):"""使用通義千問 TTS 進行流式語音合成并播放:param text: 合成文本:param voice: 發音人:param api_key: Dashscope API Key(可選,默認讀取環境變量)"""api_key = api_key or os.getenv("DASHSCOPE_API_KEY")if not api_key:raise ValueError("DASHSCOPE_API_KEY is not set.")p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paInt16,channels=1,rate=24000,output=True)responses = dashscope.audio.qwen_tts.SpeechSynthesizer.call(model="qwen-tts",api_key=api_key,text=text,voice=voice,stream=True)for chunk in responses:audio_string = chunk["output"]["audio"]["data"]wav_bytes = base64.b64decode(audio_string)audio_np = np.frombuffer(wav_bytes, dtype=np.int16)stream.write(audio_np.tobytes())time.sleep(0.8)stream.stop_stream()stream.close()p.terminate()# 示例調用
if __name__ == "__main__":sample_text = "你好,這是一段測試語音。"qwen_play_tts(sample_text)

api測試代碼:qwen_api_test.py

from qwen_play_tts import qwen_play_ttsqwen_play_tts("這是一個函數調用測試。")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86837.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86837.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WEB安全--Java安全--jsp webshell免殺1

1.1、BCEL ClassLoader 介紹(僅適用于BCEL 6.0以下): BCEL(Apache Commons BCEL?)是一個用于分析、創建和操縱Java類文件的工具庫;BCEL的類加載器在解析類名時會對ClassName中有$$BCEL$$標識的類做特殊處…

Valkey與Redis評估對比:開源替代方案的技術演進

#作者:朱雷 文章目錄 1 概述1.1內存數據結構存儲核心特性1.2主流內存數據結構存儲設計與適用場景1.3目前主流內存數據結構存儲對比 2 Valkey 說明2.1 哨兵架構設計2.2 集群架構設計2.3 valkey 使用企業和業內生態? 3 評估指標4 評估結果 1 概述 內存數據結構存儲…

華為云Flexus+DeepSeek征文 | 基于華為云ModelArts Studio安裝NoteGen AI筆記應用程序

華為云FlexusDeepSeek征文 | 基于華為云ModelArts Studio安裝NoteGen AI筆記應用程序 引言一、ModelArts Studio平臺介紹華為云ModelArts Studio簡介ModelArts Studio主要特點 二、NoteGen介紹NoteGen簡介主要特點 三、安裝NoteGen工具下載NoteGen軟件安裝NoteGen工具 四、開通…

BUUCTF在線評測-練習場-WebCTF習題[BJDCTF2020]Easy MD51-flag獲取、解析

解題思路 打開靶場,有個提交框,輸入后url會出現我們提交的參數password http://a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81/leveldo4.php?password123 查看源碼并沒用發現什么貓膩,抓包在響應頭發現了貓膩 hint: select * …

面向對象三大特性深度解析:封裝、繼承與多態

面向對象三大特性深度解析:封裝、繼承與多態 思維導圖概覽 #mermaid-svg-v2u0XIzKotjyXYei {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-v2u0XIzKotjyXYei .error-icon{fill:#552222;}#mermaid-svg-v2…

mmap映射物理內存之三invalid cache

目錄 流程設計 invalid 命令 內核態invalid 內核態invalid,用戶態mmap物理地址 PAN機制 PAN機制歷程 硬件支持 ARMv8.1-PAN 特性 Linux 內核的適配 軟件模擬 PAN(SW PAN) 背景 Linux 的實現 總結 前述刷新cache的流程也同樣可…

記憶化搜索(dfs+memo)無環有向圖

這是一道可以當作板子的極簡記憶化搜索 建立a 是鄰接表,其中 a[x] 存儲從節點 x 出發能到達的所有節點。 b[x] 記錄從節點 x 出發的所有邊的權重之和。根據數學原理,我們很容易發現,一個根(起點)的期望,等…

使用AI豆包寫一個車輛信息管理頁面

記錄一個基本的車輛信息管理頁面,由豆包撰寫完成,只需要微調頁面即可。 主要功能是車輛信息的查詢、新增、編輯,項目用到了uniapp、vue3、ts、uni-ui、z-paging 頁面效果如下: 以上界面均由豆包生成,完成度非常高&am…

《HarmonyOSNext應用防崩指南:30秒定位JS Crash的破案手冊》

《HarmonyOSNext應用防崩指南:30秒定位JS Crash的破案手冊》 ##Harmony OS Next ##Ark Ts ##教育 本文適用于教育科普行業進行學習,有錯誤之處請指出我會修改。 💥 哇哦!JS Crash崩潰日志完全解析手冊 當你的應用突然閃退時&am…

閱讀筆記(3) 單層網絡:回歸(下)

閱讀筆記(3) 單層網絡:回歸(下) 該筆記是DataWhale組隊學習計劃(共度AI新圣經:深度學習基礎與概念)的Task03 以下內容為個人理解,可能存在不準確或疏漏之處,請以教材為主。 1. 為什么書上要提到決策理論? …

Mac OS系統每次開機啟動后,提示:輸入密碼來解鎖磁盤“Data”,去除提示的解決方法

問題描述: Mac mini外接了一個磁盤(EX_Mac)為默認使用的系統盤,內置的硬盤(Macintosh HD)為Mac mini自帶的系統盤 外置硬盤系統每次開機都會掛載內置磁盤,同時會提示需要輸入密碼來解鎖磁盤“…

CSS Flex 布局中flex-shrink: 0使用

flex-shrink: 0 是 CSS Flexbox 布局中的一個關鍵屬性,用于禁止彈性項目(flex item)在容器空間不足時被壓縮。以下是詳細解釋和示例: 核心作用 當容器的可用空間小于所有彈性項目的總寬度(或高度)時&#…

WHERE 子句中使用子查詢:深度解析與最佳實踐

🔍 WHERE 子句中使用子查詢:深度解析與最佳實踐 在 WHERE 子句中使用子查詢是 SQL 的高階技巧,可實現動態條件過濾。以下是全面指南,涵蓋語法、類型、陷阱及優化策略: 📜 一、基礎語法結構 SELECT 列 FR…

從0到1:不文明現象隨手拍小程序開發日記(一)

前期調研 不文明現象隨手拍小程序:在城市的快速發展進程中,不文明現象時有發生,為了有效解決這一問題,提升城市文明程度, 市民若發現不文明行為,如亂扔垃圾、隨地吐痰、破壞公共設施、違規停車等&#xff…

STM32F103之SPI軟件讀寫W25Q64

一、W25Q64簡介 1.1 簡介 W25Q64(Nor flash)、 24位地址,64Mbit/8MByte、是一種低成本、小型化、使用簡單的非易失性存儲器,常用于數據存儲、字庫存儲、固件程序存儲等場景 時鐘頻率:最大80MHz(STM32F103系統時鐘為72MHz…

vue3+element-plus 組件功能實現 上傳功能

一、整體功能概述 這段代碼實現了一個基于 Vue 3 和 Element Plus 組件庫的文件導入及預覽功能模塊。主要包含了一個主導入對話框(用于上傳文件、展示文件相關信息、進行導入操作等)以及一個用于預覽文件內容的預覽對話框。支持導入特定格式(…

OpenCV中創建Mat對象

第1章 創建Mat對象 1.1. 創建空的 Mat 對象 cv::Mat mat; 1.2. 創建灰度圖像 // 創建一個 3 行 4 列、8位無符號單通道矩陣(相當于灰度圖) cv::Mat mat(3, 4, CV_8UC1); 1.3. 創建彩色圖像 // 創建三通道矩陣(相當于彩色圖像&#xff0…

10、做中學 | 五年級下期 Golang循環控制

一、一個小需求 我想要打印10遍hello world,你想怎么編寫呢? // 需求:打印10遍"hello world"fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world…

機器學習算法-K近鄰算法-KNN

1. K近鄰算法是什么? 定義: K近鄰是一種基于實例的懶惰學習(Lazy Learning)算法,用于分類和回歸任務。 核心思想:“物以類聚”——通過計算樣本間的距離,找到目標點的最近K個鄰居,…

基于vue框架的法律知識咨詢普及系統gwuv7(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能:用戶,知識類型,律師,律師推薦,法律知識,新聞類型,法律新聞,咨詢律師 開題報告內容 基于Vue框架的法律知識咨詢普及系統開題報告 一、研究背景與意義 隨著法治社會建設的深入推進,公眾對法律知識的需求呈現爆發式增長。然而…