香橙派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目录,执行安装:Bashcd /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)基础框架安装(沿用原文流程)
Bash
# 安装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)语音相关依赖安装
语音助手需实现"语音→文字→模型推理→文字→语音",需安装以下工具:
Bash
# 安装系统依赖(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. 下载基础代码与模型
Bash
# 克隆香橙派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转语音→播放,代码如下:
Python
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. 启动语音助手
Bash
# 进入代码目录
cd orange-pi-mindspore/Online/17-DeepSeek-R1-Distill-Qwen-1.5B/
# 运行语音助手代码
python DeepSeek-Voice-Assistant.py
2. 交互测试
-
开发板本地打开浏览器,访问
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)、增加方言识别支持,或通过模型量化进一步降低推理延迟。快来动手打造你的专属语音助手吧!