2. 环境搭建与工具链:Python环境配置、TensorFlow Lite安装、ONNX Runtime安装、音频处理库(librosa、sounddevice)
好,咱们正式开始动手了。
这一章,说白了就是“把家伙事儿备齐”。你想想看,一个厨师要炒菜,总得先把锅碗瓢盆、油盐酱醋摆好吧?咱们做语音唤醒词模型部署也一样。环境搭不好,后面全是坑。我见过太多同学,代码写得很漂亮,结果一跑就报错,最后发现是Python版本不对,或者某个库没装对。嗯,咱们别走弯路。
2.1 Python环境配置:选对版本,省一半心
我个人习惯用Python 3.8或3.9。为什么?因为TensorFlow Lite和ONNX Runtime对这两个版本的支持最稳定。Python 3.10以上,有些老库的兼容性会出问题。我在项目中遇到过,用Python 3.11装某个音频处理库,死活装不上,最后降级到3.9,一分钟搞定。
我建议你用虚拟环境。别图省事,直接在系统Python里装一堆包。那样做,项目一多,依赖冲突能让你崩溃。
推荐做法:
- 使用
conda或venv创建独立环境 - Python版本锁定在 3.8 或 3.9
- 每个项目一个环境,互不干扰
创建环境的命令很简单:
# 使用 conda
conda create -n wakeup_env python=3.9
conda activate wakeup_env
# 或者使用 venv
python -m venv wakeup_env
source wakeup_env/bin/activate # Linux/Mac
wakeup_env\Scripts\activate # Windows
环境激活后,你会看到命令行前面多了个 (wakeup_env)。看到这个,就说明你已经在虚拟环境里了。接下来装什么,都不会污染系统。
2.2 TensorFlow Lite安装:轻量级推理的利器
TensorFlow Lite,简称TFLite。它是专门为移动端和嵌入式设备设计的。咱们做唤醒词模型,最终要跑在树莓派、手机或者智能音箱上,TFLite是首选。
安装其实很简单,但有个坑:别装错了版本。
我曾经帮一个同学排查问题,他装的是 tensorflow 而不是 tflite-runtime。结果模型文件大了10倍,推理速度慢得离谱。记住,咱们要的是 tflite-runtime,它只包含推理引擎,不包含训练功能,体积小、速度快。
# 安装 TensorFlow Lite 运行时
pip install tflite-runtime
# 如果你需要完整的 TensorFlow(比如还要训练模型),可以装这个
# pip install tensorflow
小提示: 在树莓派上,你可能需要安装针对ARM架构的版本。命令是:
pip install https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp39-cp39-linux_armv7l.whl
具体版本号,去GitHub上找最新的就行。
装完之后,验证一下:
python -c "import tflite_runtime; print(tflite_runtime.__version__)"
如果输出版本号,恭喜你,装对了。
2.3 ONNX Runtime安装:跨平台的推理引擎
ONNX Runtime,是微软开源的推理引擎。它支持ONNX格式的模型。为什么咱们要提它?因为有些模型,比如用PyTorch训练的,转成ONNX格式后,用ONNX Runtime跑,效率非常高。
我个人习惯是:TFLite和ONNX Runtime都装上。为什么?因为不同的部署场景,可能需要不同的方案。比如,你要跑在iOS上,TFLite更合适;跑在Windows服务器上,ONNX Runtime可能更快。多一个选择,多一条路。
安装命令:
# CPU版本(大多数情况够用)
pip install onnxruntime
# GPU版本(如果你有NVIDIA显卡,且需要加速)
# pip install onnxruntime-gpu
注意: GPU版本需要安装CUDA和cuDNN。版本匹配很重要。我曾经因为CUDA版本不对,折腾了一下午。建议先查一下ONNX Runtime官方文档,看看它支持哪个CUDA版本。
验证安装:
python -c "import onnxruntime; print(onnxruntime.__version__)"
2.4 音频处理库:librosa 和 sounddevice
做语音唤醒,离不开音频处理。这两个库,一个负责分析,一个负责采集。
2.4.1 librosa:音频分析的瑞士军刀
librosa,说白了就是Python界的音频处理神器。提取MFCC特征、计算频谱、重采样、时频变换……它全包了。咱们后面做唤醒词模型,特征提取全靠它。
安装:
pip install librosa
注意,librosa依赖很多底层库。在Windows上,可能会遇到 soundfile 装不上的问题。解决办法是装个 conda 版本:
conda install -c conda-forge librosa
我在项目中遇到过,用pip装librosa,结果报错说缺少 libsndfile。后来用conda装,一步到位。所以,如果你在Windows上,我建议直接用conda。
简单测试一下:
import librosa
# 加载一个音频文件
audio, sr = librosa.load('test.wav', sr=16000)
print(f"音频长度: {len(audio)} 采样点, 采样率: {sr} Hz")
# 提取MFCC特征
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
print(f"MFCC形状: {mfcc.shape}")
2.4.2 sounddevice:实时音频采集
sounddevice,是用来从麦克风采集音频的。咱们做唤醒词,总不能每次都读文件吧?得实时监听麦克风,检测到唤醒词就触发动作。
安装:
pip install sounddevice
这个库底层依赖PortAudio。在Linux上,你可能需要先装PortAudio:
sudo apt-get install portaudio19-dev
在Mac上,用Homebrew:
brew install portaudio
Windows上,一般直接pip就能用。如果不行,装个 pip install sounddevice --global-option='--with-portaudio'。
测试代码:
import sounddevice as sd
import numpy as np
# 列出所有音频设备
print(sd.query_devices())
# 录制3秒音频
fs = 16000
duration = 3
print("开始录音...")
recording = sd.rec(int(duration * fs), samplerate=fs, channels=1)
sd.wait()
print("录音结束")
# 保存为numpy数组,后面可以直接喂给模型
np.save('test_audio.npy', recording)
小技巧: 在树莓派上,默认的音频设备可能不对。你可以用 sd.default.device 来指定设备编号。比如:
sd.default.device = 2 # 假设设备2是你的USB麦克风
2.5 一键安装脚本
为了方便,我写了个一键安装脚本。你直接复制到终端运行就行:
# install_env.sh
# 创建环境
conda create -n wakeup_env python=3.9 -y
conda activate wakeup_env
# 安装核心库
pip install tflite-runtime
pip install onnxruntime
pip install librosa
pip install sounddevice
# 验证安装
python -c "
import tflite_runtime
import onnxruntime
import librosa
import sounddevice
print('所有库安装成功!')
print(f'TFLite版本: {tflite_runtime.__version__}')
print(f'ONNX Runtime版本: {onnxruntime.__version__}')
print(f'librosa版本: {librosa.__version__}')
print(f'sounddevice版本: {sounddevice.__version__}')
"
运行完,如果看到“所有库安装成功!”,那环境就搭好了。
2.6 常见问题与避坑指南
| 问题 | 原因 | 解决办法 |
|---|---|---|
| pip安装librosa报错 | 缺少libsndfile | 用conda安装:conda install -c conda-forge librosa |
| sounddevice找不到设备 | PortAudio未安装 | Linux: sudo apt-get install portaudio19-devMac: brew install portaudio |
| tflite-runtime导入失败 | Python版本不匹配 | 检查Python版本,建议3.8或3.9 |
| onnxruntime-gpu装不上 | CUDA版本不对 | 先装CUDA 11.x,再装onnxruntime-gpu |
我曾经在Windows上,因为Python是64位但装了32位的库,折腾了整整一天。所以,一定要确认你的Python是64位还是32位。用 python -c "import platform; print(platform.architecture())" 查看。
好了,环境搭好了。下一章,咱们就开始写真正的代码——从零实现一个唤醒词检测器。到时候,这些库就全派上用场了。