注:案例来源于PYNQ社区,如果你有好玩的基于PYNQ的项目,欢迎投稿分享:pynq_china@xilinx.com
本案例利用PYNQ自定义Overlay驱动Respeaker,实现了一个智能音箱。ReSpeaker是一个四路ADC芯片AC108位转换芯片的四通道麦克风的设备,它支持I2S接口,在本案例中它需要连接到PYNQ-Z2的树莓派接口。本项目有DOA(Direction of Arrival)实验,和STT(Speech to Text)实验。
快速开始
在已经联网的Pyn-Z2的Terminal中运行以下命令安装
sudo pip3 install git+https://github.com/xupsh/pynq-respeaker.git
安装完成后jupyter_notebooks下将会出现pynq-respeaker文件夹,里面有两个notebook可以运行。
案例演示
DOA实验
这里将包含各种库并,下载bit文件,并初始化AC108。这里每个通道采样5000个数据点。使用MMIO读写音频转换IP的数据。
这是工程的PL部分的结构,ReSpeaker输出的I2S接口的信号接在respeaker_ip上,由它来进行格式转换。PS通过AXI_lite协议总线来读取它的输出。
运行这段代码以后,程序会读取30次四个通道的声音,并且运算出最可能的声音来源的角度。这里可以用一个音乐播放器围绕着ReSpeaker运动,观察音乐播放器不同位置时读出的DOA。
STT实验
运行STT.ipynb,前面的初始化和PL端的设计DOA实验的一致。
在这里,我们需要使用百度提供的语音转写服务。在这里输入百度提供的APP ID、API KEY和SECRET KEY。
这部分设置了采样率44.1kHz,并录制五秒钟的音频。这里我们可以对着ReSpeaker说一小段话,程序将会把音频保存为recong.wav。
录制完毕后可以直接在notebook中播放录制好的声音。为了进行下一步识别,需要把声音转换为16位16kHz采样率的音频文件。
调用百度提供的API使用语音识别服务。dev_pid是识别模式号,1537是指纯汉语普通话含标点识别。在它的输出结果中我们可以看到识别成功,内容是“你好,世界。”。
总结
通过上述案例演示,我们使用了一个自定义的overlay来转换ReSpeaker的数据,完成了DOA和STT实验。
思考
本案例的语音识别部分是通过云语音服务来实现的,本地卡只是实现了语音信号采集,实际上由于FPGA的灵活可配置的特性,我们完全可以在PYNQ-Z2的PL部分实现LSTM等网络,将语音识别功能在本地板卡上实现,鼓励有兴趣的同学基于本Overlay开发更多好玩的项目并来投稿。
项目参考网站: https://github.com/xupsh/pynq-respeaker
百度API使用文档: https://ai.baidu.com/ai-doc/SPEECH/0k38lxja3
文章来源: PYNQ开源社区