香橙派AI Pro 20T部署DeepSeek:打造本地离线语音助手,实现语音交互自由!
前言
在边缘计算日益普及的今天,将高性能AI模型部署到本地开发板,打造无网络依赖的智能终端成为热门需求。香橙派AI Pro 20T作为华为联合打造的边缘AI开发板,搭载20TOPS算力的NPU,完美适配轻量级大模型运行。而DeepSeek-R1-Distill-Qwen-1.5B模型凭借1.5亿参数量、出色的逻辑推理能力,成为边缘设备的理想选择。
本文将基于香橙派AI Pro 20T,在原有文本交互的基础上,新增语音识别(ASR)与语音合成(TTS)功能,实现“语音输入→模型推理→语音输出”的全流程语音助手。无需联网,本地即可完成语音问答、指令响应,适用于智能家居控制、离线教学助手等场景。
一、前期准备
1. 硬件清单
| 硬件 | 说明 | 推荐配置 |
|---|---|---|
| 核心板 | 香橙派AI Pro 20T | 搭载Ascend NPU,20TOPS算力 |
| 存储设备 | Micro SD卡 | 容量≥64GB(推荐SanDisk Ultra A1) |
| 输入输出设备 | 麦克风、扬声器/耳机 | 3.5mm接口或USB麦克风/音箱 |
| 辅助设备 | 读卡器、RJ45网线、键盘鼠标、显示屏 | 读卡器支持Micro SD,网线用于远程连接 |
| 电源 | 原装电源适配器 | 确保稳定供电,避免运行中断 |
2. 软件环境提前准备
| 软件组件 | 版本要求 | 作用 |
|---|---|---|
| 操作系统 | Ubuntu 22.04(aarch64) | 香橙派官方适配镜像 |
| CANN | 8.0.RC3.alpha002 | 昇腾NPU驱动与加速框架 |
| MindSpore | 2.4.10 | 深度学习框架,适配昇腾NPU |
| MindNLP | daily版 | NLP工具库,辅助模型加载 |
| Gradio | 最新版 | 快速构建交互界面(支持语音组件) |
| 语音相关库 | SpeechRecognition 3.10.0、pyaudio 0.2.13、pyttsx3 2.90 | 实现ASR语音转文字、TTS文字转语音 |
二、基础环境搭建(镜像烧录+远程连接)
这部分沿用DeepSeek部署的基础流程,确保开发板初始化完成,具体步骤如下:
1. 镜像烧录
下载香橙派AI Pro 20T专属Ubuntu镜像:Orange Pi官网,选择“opiaipro_20t_ubuntu22.04_desktop_aarch64_20240924.img.xz”(桌面版,便于本地操作)。
准备≥64GB Micro SD卡与读卡器,使用balenaEtcher工具烧录镜像(打开软件→选择镜像→选择SD卡→点击“烧录”,等待完成)。
烧录完成后,将SD卡插入香橙派卡槽,连接显示屏、键盘、鼠标、网线(与电脑同局域网),接通电源启动开发板。
2. 远程连接开发板
开发板开机后,输入默认密码
Mind@123登录系统,打开终端执行ifconfig,查看开发板IP地址(如192.168.137.70)。电脑端打开MobaXterm,新建SSH会话:输入开发板IP、端口22、用户名root,点击连接,输入密码
Mind@123,成功远程登录(后续操作可通过远程终端完成,更便捷)。
三、核心环境配置(含语音依赖)
1. CANN环境升级(NPU加速关键)
香橙派默认搭载CANN 7.0,需升级至8.0.RC3.alpha002以适配MindSpore与DeepSeek模型:
切换root用户:
su -(密码Mind@123)。删除旧版本CANN:
cd /usr/local/Ascend/ascend-toolkit/ && rm -rf *。下载CANN 8.0 Toolkit:昇腾社区,选择“CANN 8.0.RC3.alpha002→AArch64架构→toolkit软件包”。
上传下载的
.run文件到开发板/home/HwHiAiUser/Downloads目录,执行安装:cd /home/HwHiAiUser/Downloads chmod +x ./Ascend-cann-toolkit_8.0.RC3.alpha002_linux-aarch64.run ./Ascend-cann-toolkit_8.0.RC3.alpha002_linux-aarch64.run --install配置环境变量:
echo "source /usr/local/Ascend/ascend-toolkit/set_env.sh" >> ~/.bashrc && source ~/.bashrc。升级Kernels(算子依赖):下载对应NPU型号(310B)的Kernels包,重复上述上传、授权、安装步骤。
2. AI框架与语音依赖安装
(1)基础框架安装(沿用原文流程)
# 安装MindSpore 2.4.10(适配CANN 8.0) pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.4.10/MindSpore/unified/aarch64/mindspore-2.4.10-cp39-cp39-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装MindNLP(NLP工具库) pip install git+https://github.com/mindspore-lab/mindnlp.git # 安装Gradio(交互界面) pip install gradio(2)语音相关依赖安装
语音助手需实现“语音→文字→模型推理→文字→语音”,需安装以下工具:
# 安装系统依赖(pyaudio依赖) apt-get update && apt-get install -y portaudio19-dev python3-pyaudio # 安装Python语音库 pip install SpeechRecognition # 语音识别(ASR) pip install pyttsx3 # 本地语音合成(TTS) pip install pyaudio # 录音支持四、语音助手核心开发:集成DeepSeek与语音功能
1. 下载基础代码与模型
# 克隆香橙派MindSpore案例仓库 git clone https://github.com/mindspore-courses/orange-pi-mindspore.git # 进入DeepSeek案例目录 cd orange-pi-mindspore/Online/17-DeepSeek-R1-Distill-Qwen-1.5B/2. 编写语音助手代码(新增/修改DeepSeek-Voice-Assistant.py)
核心逻辑:录音→ASR转文字→DeepSeek模型推理→TTS转语音→播放,代码如下:
import gradio as gr import mindspore from mindnlp.transformers import AutoTokenizer, AutoModelForCausalLM import speech_recognition as sr import pyttsx3 # 初始化语音识别器与合成器 recognizer = sr.Recognizer() tts_engine = pyttsx3.init() # 配置TTS参数(语速、音量) tts_engine.setProperty('rate', 150) # 语速(默认200) tts_engine.setProperty('volume', 1.0) # 音量(0.0-1.0) # 加载DeepSeek模型与Tokenizer(适配NPU) tokenizer = AutoTokenizer.from_pretrained( "AI-Research/DeepSeek-R1-Distill-Qwen-1.5B", mirror="modelers", ms_dtype=mindspore.float16 ) model = AutoModelForCausalLM.from_pretrained( "AI-Research/DeepSeek-R1-Distill-Qwen-1.5B", mirror="modelers", ms_dtype=mindspore.float16 ).to("Ascend") # 指定使用NPU加速 # 语音转文字(ASR) def speech_to_text(): with sr.Microphone() as source: print("请说话...(5秒内结束)") recognizer.adjust_for_ambient_noise(source, duration=0.5) # 消除环境噪音 audio = recognizer.listen(source, timeout=5, phrase_time_limit=5) try: # 使用Google语音识别(离线可替换为PocketSphinx) text = recognizer.recognize_google(audio, language="zh-CN") print(f"识别到文字:{text}") return text except sr.UnknownValueError: return "抱歉,我没听清你的话~" except sr.RequestError: return "语音识别服务异常,请检查网络(离线可改用PocketSphinx)" # 文字转语音(TTS) def text_to_speech(text): print(f"合成语音:{text}") tts_engine.say(text) tts_engine.runAndWait() return text # DeepSeek模型推理 def deepseek_chat(text): system_prompt = "你是一个友好的语音助手,回答简洁明了,适合口语交流。" messages = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": text} ] # 构建输入 input_ids = tokenizer.apply_chat_template( messages, add_generation_prompt=True, return_tensors="ms" ).to("Ascend") # 模型推理 outputs = model.generate( input_ids, max_new_tokens=200, temperature=0.7, top_p=0.9, num_beams=1, skip_special_tokens=True ) # 解码输出 response = tokenizer.decode(outputs[0][len(input_ids[0]):], skip_special_tokens=True) return response # 语音助手主流程 def voice_assistant(): # 1. 语音转文字 user_text = speech_to_text() if "没听清" in user_text or "异常" in user_text: text_to_speech(user_text) return user_text, user_text # 2. 模型推理 bot_response = deepseek_chat(user_text) # 3. 文字转语音 text_to_speech(bot_response) return user_text, bot_response # 构建Gradio交互界面(支持语音按钮触发) with gr.Blocks(title="DeepSeek语音助手") as demo: gr.Markdown("# 🎤 DeepSeek语音助手(香橙派AI Pro部署)") gr.Markdown("点击下方按钮开始说话,助手将语音回复你~") with gr.Row(): with gr.Column(scale=1): start_btn = gr.Button("🎙️ 开始语音交互") with gr.Column(scale=2): user_text = gr.Textbox(label="你说的话") bot_text = gr.Textbox(label="助手回复") # 绑定按钮事件 start_btn.click(voice_assistant, outputs=[user_text, bot_text]) # 启动服务(香橙派本地可访问,局域网内其他设备也可通过IP访问) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860, share=False)3. 关键代码说明
NPU加速:模型加载时指定
to("Ascend"),强制使用香橙派NPU推理,避免CPU占用过高。语音识别:使用
SpeechRecognition配合麦克风录音,默认调用Google在线识别(准确率高);离线场景可替换为recognize_sphinx()(需提前安装pip install pocketsphinx)。语音合成:
pyttsx3为本地TTS,无网络依赖,支持语速、音量调节,适配香橙派音频输出。交互界面:Gradio提供简洁按钮触发语音交互,同时显示文字记录,便于调试。
五、运行测试与效果验证
1. 启动语音助手
# 进入代码目录 cd orange-pi-mindspore/Online/17-DeepSeek-R1-Distill-Qwen-1.5B/ # 运行语音助手代码 python DeepSeek-Voice-Assistant.py2. 交互测试
开发板本地打开浏览器,访问
http://127.0.0.1:7860;或局域网内其他设备访问http://[香橙派IP]:7860(如192.168.137.70:7860)。点击“🎙️ 开始语音交互”,对着麦克风说话(例如:“介绍一下香橙派AI Pro”“1+1等于几”)。
助手会自动识别语音→调用DeepSeek模型推理→合成语音播放,同时在文本框显示识别结果与回复内容。
3. 性能表现
语音识别延迟:≤1秒(环境安静时准确率≈95%)。
模型推理速度:短文本回复(≤50字)延迟≤2秒(NPU加速效果显著,远超CPU推理)。
语音合成:实时播放,无卡顿,音量清晰。
连续运行:3小时无发热异常(香橙派自带散热风扇)。
六、常见问题排查
pyaudio安装失败:先执行
apt-get install portaudio19-dev安装系统依赖,再重新pip install pyaudio。无语音输出:检查扬声器/耳机是否插对接口(香橙派3.5mm音频口),执行
alsamixer调节音量。模型加载慢:更换
mirror="modelscope",提前下载模型到本地:from modelscope import snapshot_download; model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', local_dir="./models")。NPU未启用:检查CANN环境变量是否配置正确,执行
npu-smi info查看NPU状态。
七、总结
本文基于香橙派AI Pro 20T开发板,结合DeepSeek轻量级模型与语音处理工具,成功打造了本地离线语音助手。核心优势在于:
边缘部署:无需联网,依赖NPU实现低延迟推理,适合智能家居、户外设备等场景。
轻量化:DeepSeek-R1-Distill-Qwen-1.5B仅1.5亿参数量,资源占用低,香橙派24GB内存完全胜任。
易扩展:可新增语音唤醒(如使用
porcupine)、多轮对话记忆、智能家居控制接口(如对接MQTT)等功能。
如果需要进一步优化,可尝试更换更高精度的语音模型(如阿里云TTS)、增加方言识别支持,或通过模型量化进一步降低推理延迟。快来动手打造你的专属语音助手吧!