Audio Card for Jetson Nano
| ||||||||||||||||||||
| ||||||||||||||||||||
说明
Jetson Nano声卡使用
硬件连接
1. 将Audio Card for Jetson Nano音频模块安装到Jetson Nano上,并通过USB连接
2. 将8 欧 5W 立体声喇叭接入到喇叭接口
3. 上电开机,登录Jetson Nano,登录教程点击查看.
4. 硬件连接如下图所示
检测声卡
- 检查播放:aplay -l
jetson@linux:~$ aplay -l **** List of PLAYBACK Hardware Devices **** ... ... ... ... card 2: Device [USB PnP Audio Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
- 检查录音:arecord -l
jetson@linux:~$ arecord -l **** List of CAPTURE Hardware Devices **** ... ... ... ... card 2: Device [USB PnP Audio Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
录音播放测试
- 录音
jetson@linux:~$ arecord -D plughw:2,0 -f S16_LE -r 48000 -c 2 test.wav Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
-D "plughw:1,0"表示card 1 , device 0,即我们使用的USB声卡,-f S16_LE代表有符号16位小端序,-c 2表示双声道,test.wav是录制生成的文件名。
按Ctl+C结束录音
- 播放
jetson@linux:~$ aplay -D hw:2,0 test.wav Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
播放刚刚录制的音频
调节音量
sudo alsamixer
如果USB声卡没有设置为默认声卡则需要按 F6 选择声卡设备。
Speaker为喇叭输出音量,Mic为麦克风录音音量
设置默认声卡
由于JP4.5系统版本4G和2G版本系统界面不一样所以导致两个版本的设置方法不一致。
注意:如果没有将Audio Card for Jetson Nano作为默认声卡,运行示例程序可能会出现没有声音或者不能录音等情况导致程序运行异常。
Jetson nano 4G版本
进入系统图形界面,点击右上角的音频图标进去声音设置界面。Output/Input 设备均选择USB PnP Audio Device
Jetson nano 2G版本
进入系统图形界面,点击右下角开始菜单,选择Sound & Video - >PulseAudio Volume Control 软件打开。
在Playback/Recording 将程序声卡设置为USB PnP Auido Device。
此处需要注意,只有程序正在运行的时候才会出现对应的选项,如果没有运行程序可能只有System Sounds而没有SoX。如果运行实例程序没有声音可以进去此软件看下对应的程序声卡是否设置为USB PnP Auido Device。
下载示例程序
wget https://www.waveshare.net/w/upload/a/ae/Audio_Card_for_jetson_nano.tar.gz tar zxvf Audio_Card_for_jetson_nano.tar.gz
中文语音例程
安装依赖库
输入如下命令安装依赖库
sudo apt update sudo apt install python3-pip sudo pip3 install websocket sudo pip3 install websocket-client sudo apt-get install sox libsox-fmt-all sudo apt-get install portaudio19-dev sudo pip3 install pyaudio sudo pip3 install webrtcvad sudo apt-get install libatlas-base-dev sudo apt-get install flac sudo pip3 install SpeechRecognition
运行示例程序
注意:示例程序中使用的是本人的账号,科大讯飞服务每天有申请次数限制,超过将不再响应。用户可以将申请账户,修改程序APPID和APPKEY的值。详细教程请参考相关网站
- 讯飞开放平台:https://www.xfyun.cn/
- AIUI开放平台:https://aiui.xfyun.cn/
- 图灵机器人:http://www.turingapi.com/
1.在线语音合成
输入如下命令运行程序:
cd ~/Audio_Card_for_jetson_nano/tts python3 tts.py
运行程序后会将文本转换成MP3格式的音频文件并播放。如果要修改语音内容,只需替换Text文件内容即可
2.语音听写流式
输入如下命令运行程序:
cd ~/Audio_Card_for_jetson_nano/iat python3 iat.py
运行程序后会将语音转换成文字文本输出。
3.图灵机器人
输入如下命令运行程序:
cd ~/Audio_Card_for_jetson_nano/turing python3 turing.py
运行程序后将显示”我:”,输入对话内容后(例如:你好),机器人将会回复对话的内容。
如果运行如下程序,机器人的对话的内容将会通过语音播报出来
python3 turing_tts.py
4.AIUI
AIUI是科大讯飞2015年推出的自然语言理解为核心的全链路人机交互语音解决方案,可快速让你的应用和设备能听会说,能理解会思考。
简单的说是AIUI是科大讯飞的机器人,和图灵机器人的区别是aiui是语音输入,输出对话文字,图灵机器输入输出都是文字。
输入如下命令运行程序
cd ~/Audio_Card_for_jetson_nano/AIUI python3 aiui.py
程序会将record.wav文件的语音作为语音输入,运行程序将显示语音对话内容。
如图要替换语音运行如下命令重新录音。
arecord -r 16000 -c 1 -t wav -f S16_LE test.wav
如果运行如下程序,机器人的对话的内容将会通过语音播报出来
python3 aiui_tts.py
5.VAD
语音活动检测(Voice Activity Detection,VAD)又称语音端点检测,语音边界检测。简单的说VAD就是检测音频流中的有声音部分,消除拟制静音部分。
即通过VAD录音只录制人说话的部分,其他静音期不录音。
输入如下命令运行程序:
cd ~/Audio_Card_for_jetson_nano/VAD python3 vad.py
程序运行将显示”* recording:”,表示程序在录音检测状态,此时说话将会被检测到并录音。直到显示”* done recording”完成录音并播放录音内容。
6.小微机器人语音对话
输入如下命令运行程序:
cd ~/Audio_Card_for_jetson_nano/xiaowei python3 xiaowei.py
运行程序后将进入对话状态,例如问深圳今天天气怎样?,小微机器人将会通过语音回答深圳今天的天气。
7.snowboy语音唤醒
输入如下命令运行程序:
cd ~/Audio_Card_for_jetson_nano/snowboy python3 demo.py hotword.pmdl
运行程序后将显示"Listening...",表示程序在待机检测状态,说唤醒词唤醒机器人并对话。例如"魔镜魔镜,今天是几号"。机器人识别到唤醒词后会叮的响一声。
注意:示例程序中hotword.pmdl文件为我的个人声音唤醒模型,你使用此模型将不能唤醒.你需要训练你自己的模型然后替换示例程序中的模型文件。
英文语音例程
注意:在中国,无法直接使用Google的服务。需要科学上网,必须搭建可以访问google的路由器,然后树莓派连接到路由器。
安装Python3虚拟环境
sudo apt-get update sudo apt-get install python3-dev python3-venv python3 -m venv env env/bin/python -m pip install --upgrade pip setuptools wheel source env/bin/activate
- 注意:之后的所有操作都是在虚拟环境中进行,重新打开终端需运行如下命令进入到虚拟环境中。
source ~/env/bin/activate
Google Assistant Service 安装
在开始使用Google Assistant之前,需要先安装Google Assistant Service。以下是Google官方指导的链接。
https://developers.google.com/assistant/sdk/guides/service/python
请根据指南第三步,配置开发人员项目和配置账户,并创建一个OAuth Client ID JSON文件。 不要忘记将JSON文件复制到您的jetson nano。
请根据指南第四步,注册设备模型。
安装Google Assistant SDK
(env) $ sudo apt-get install portaudio19-dev libffi-dev libssl-dev (env) $ python -m pip install --upgrade google-assistant-sdk[samples]
授权Google Assistant SDK 安装或更新授权工具
(env) $ python -m pip install --upgrade google-auth-oauthlib[tool]
生成凭据以能够运行示例代码和工具。引用您在上一步中下载的JSON文件 ;您可能需要将其复制到设备。不要重命名该文件。
(env) $ google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \ --save --headless --client-secrets /path/to/client_secret_ client-id .json
可以在终端中看到一个URL:hlib[tool]
生成凭据以能够运行示例代码和工具。引用您在上一步中下载的JSON文件 ;您可能需要将其复制到设备。不要重命名该文件。
(env) $ google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \ --save --headless --client-secrets /path/to/client_secret_ client-id .json
可以在终端中看到一个URL:
Please visit this URL to authorize this application: https://...
复制URL并将其粘贴到浏览器中(可以在任何计算机上完成)。该页面将要求您登录您的Google帐户。登录到上一步中创建开发人员项目的Google帐户 。 从API批准许可请求后,浏览器中将显示一个代码,例如“ 4 / XXXX”。将此代码复制并粘贴到终端中:
Please go to this URL: https://... Enter the authorization code:
如果授权成功,您将看到类似于以下的响应。如果您看到InvalidGrantError,则输入了无效的代码。请重试,请小心复制并粘贴整个代码。
credentials saved: /path/to/.config/google-oauthlib-tool/credentials.json
运行程序
按键触发对话
运行如下命令测试 my-dev-project为创建的Actions Console项目的Google Cloud Platform项目ID。要在Actions Console中找到项目ID 、 my-model为在上一步中注册设备模型的名称。
(env) $ googlesamples-assistant-pushtotalk --project-id my-dev-project --device-model-id my-model
按Enter键,然后尝试以下一些查询 Who am I? What time is it? 正常情况Google Assitant 会回应。
snowboy语音唤醒对话
cd ~/Audio_Card_for_jetson_nano/google deactivate #退出虚拟环境 python3 demo.py hotword.pmdl
运行程序后将显示"Listening...",表示程序在待机检测状态,说唤醒词唤醒机器人并对话。例如"ok google, Who am I? What time is it?"。机器人识别到唤醒词后会叮的响一声。
注意1:此示例程序中hotword.pmdl文件为我的个人声音唤醒模型,你使用此模型将不能唤醒.你需要训练你自己的模型然后替换示例程序中的模型文件。
注意2:此示例程序使用的是本人的账号,每天有申请次数限制,超过将不再响应,用户可以申请账户修改程序中的audiofileinput.py文件中device_model_id和device_id的值。
snowboy 教程
snowboy是一个开源的语音热词检测项目,可用作语音唤醒功能。下面提供snowboy在jetson nano上使用的详细教程。
安装依赖库
sudo apt-get install swig sudo apt-get install libatlas-base-dev sudo apt-get install portaudio19-dev sudo apt-get install flac pip3 install PyAudio pip3 install SpeechRecognition
下载源码并编译
- 下载snowboy
git clone https://github.com/Kitt-AI/snowboy.git cd snowboy/swig/Python3
- 打开Makefile 找到如下位置,并添加对ARM的判断,否则编译出错。
vi Makefile
ifneq (,$(findstring aarch64,$(shell uname -m))) SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a endif
然后编译
make
运行示例程序
cd ../../examples/Python3
- 修改snowboydecoder.py文件,将from . import snowboydetect 改为 import snowboydetect,去掉 from .
- 测试snowboy唤醒
cd ~/snowboy/examples/Python3 python3 demo.py resources/models/smart_mirror.umdl
- 说smart_mirror,如果有检测到则会显示类似这样的信息,同时会响ding的一声
INFO:snowboy:Keyword 1 detected at time: 2019-12-03 11:30:16
注意:唤醒词采用的是公有模型,理论上对所有人都有效,但是实际可能会不能唤醒或者比较难唤醒。用户需要训练自己的模型或者更改其他唤醒词。
训练声音模型
由于Snowboy官方已经不再更新并且官方网站已经关闭,不能再从官方网站上训练模声音型。
下面根据https://github.com/seasalt-ai/snowboy.git 这个分支生产新的唤醒词模型。
这里提供一个已经搭建好环境的VMware虚拟机镜像,系统版本为ubuntu 16.04 (系统账号密码均为:mylinux).使用VMware WorkStation软件打开即可。
- ubuntu 16.04 snowboy模型生成------------提取码:w3fj
将Audio Card for Jetson Nano模块接到电脑并连接到虚拟机ubuntu 16.04系统,运行如下命令录音三次唤醒词语音。 此处使用相同的Audio Card for Jetson Nano作为录音设备可提供唤醒识别率。
cd snowboy/examples/Python rec -r 16000 -c 1 -b 16 -e signed-integer -t wav record1.wav
运行以下命令来训练您的个人模型
python generate_pmdl.py -r1=record1.wav -r2=record2.wav -r3=record3.wav -lang=en -n=hotword.pmdl
其中record1.wav,record2.wav,record3.wav为三次录音文件,hotword.pmdl为生成的个人声音模型。
FAQ