【欧时RS x Arduino】部署离线语音识别ASR
最初想用官方 App Lab 的 CloudASR 例程做语音识别,结果发现需要填写API KEY,这个KEY需要用原厂库支持的平台才可以。所以放弃官方例程,按照上次探索的方式,直接在Linux侧部署离线模型。
第一个遇到的麻烦是怎么添加麦克风。查看资料发现可以在扩展接口使用带麦的耳机直接连接模拟接口,也可以使用USB接口的麦克风。这么看肯定是直接
插个usb的方便,那么就会遇到下一个坑,板子就一个USB-C口,且用它供电默认就是device模式。用外部供电他又不会自己切换到主机模式。好在找到用户手册
按照这个短接了引脚,结果还是不行,测试发现HUB压根就没供电,那么就是UNO Q虽然USB工作在了主机模式但没有提供对完供电。所以,HUB还要支持外部供电。
解决供电问题,发现lsusb还是啥都没有,又问了问AI,才意识到,这几个typec口得注意接插顺序,这样工作模式才能正确。也就是,先给hub供上电,再接到UNO Q的
USB口,这次就通了。
使用这两个命令查看USB识别结果。
lsusb
arecord -l
接下来就安装必要依赖
sudo apt update
sudo apt install -y alsa-utils ffmpeg 安装 Vosk pip3 install vosk --break-system-packages 下载中文模型
mkdir -p ~/asr && cd ~/asr
wget https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip
unzip vosk-model-small-cn-0.22.zip
mv vosk-model-small-cn-0.22 model-cn 整个python测试一下
#!/usr/bin/env python3
# offline_asr.py
import json, subprocess, sys
try:
from vosk import Model, KaldiRecognizer
except ImportError:
print("pip install vosk"); sys.exit(1)
MODEL_PATH = "/home/arduino/asr/model-cn"
MIC_DEV = "plughw:1,0"
RATE = 16000
CHUNK = 4000
def main():
model = Model(MODEL_PATH)
rec = KaldiRecognizer(model, RATE)
rec.SetWords(False)
# arecord 输出 PCM 裸流
cmd = ["arecord", "-q", "-D", MIC_DEV,
"-f", "S16_LE", "-r", str(RATE), "-c", "1", "-t", "raw"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
print("离线识别中... 说 '停止' 退出")
try:
while True:
data = proc.stdout.read(CHUNK)
if not data: continue
if rec.AcceptWaveform(data):
res = json.loads(rec.Result())
text = res.get("text", "").strip()
if text:
print(f"[最终] {text}")
# 串口发给 MCU(可选)
# with open("/dev/ttyACM0","w") as f: f.write(text+"\n")
if "停止" in text: break
else:
par = json.loads(rec.PartialResult()).get("partial","")
if par: print(f"\r[临时] {par}", end="", flush=True)
except KeyboardInterrupt:
pass
finally:
proc.terminate()
if __name__ == "__main__":
main() 对着麦克风近一点说句话:你好, Arduino!
嗯,还行,基本能认出来。
页:
[1]