使用Python代码进行树莓派上的麦阵列声源定位
偶然发现seeedstudio更新了他们的英文版说明书,然而中文版还没更新[捂脸]。关于DOA的部分,除了原来的使用ODAS Studio的方法以外,又多加了一些使用Python代码直接进行DOA的章节。
0 安装驱动
别忘了用source activate doa
切到专门的环境里,或者conda create -n doa python=3.6
现造一个环境。
安装驱动:
1 | proxychains4 git clone https://github.com/respeaker/seeed-voicecard.git |
检查驱动:
1 | arecord -L # 输入驱动,即录制 |
1 测试LED
说实话,自打买了这个麦阵列,我还从来没试过这12个LED灯[捂脸],试试吧要不感觉对不起这个板子,另外,运行demo需要gpiozero
、spidev
、pyusb
。
1 | proxychains4 git clone --depth 1 https://github.com/respeaker/pixel_ring.git |
控制LED的主要代码其实就在函数show()
,直接在Python交互环境中输入下面的代码,就可以打开12点方向的灯,并渲染为白色,也就是ARGB(0, 64, 64, 64)。
1 | from pixel_ring import pixel_ring |
用于控制的数组是一个48位的list
,从1点钟方向开始,到12点钟方向结束,每四位控制一个LED灯,非常好操作。
2 装DOA相关库
添加seeed提供的apt
源。(靠谱的公司啊)
1 | echo "deb https://seeed-studio.github.io/pi_repo/ stretch main" | sudo tee /etc/apt/sources.list.d/seeed.list |
安装numpy
和pyaudio
:
1 | proxychains4 conda install -y numpy |
安装编译工具:
1 | sudo proxychains4 apt-get install -y swig python-dev libatlas-base-dev build-essential make |
安装snowboy
(热词检测DOA):
1 | proxychains4 git clone --depth 1 https://github.com/Kitt-AI/snowboy.git |
安装seeed的voice-engin
:
1 | proxychains4 git clone https://github.com/voice-engine/voice-engine.git |
测试ok~:
1 | python ~/doa/voice-engine/examples/respeaker_6mic_array_for_pi/kws_doa.py |
如果只是想用DOA功能,可以试试seeed的老项目mic_array:
1 | proxychains4 git clone https://github.com/respeaker/mic_array.git |
对比了一下,跟人家introlab/odas项目差的还是比较远的。直观上看就是我们简单的靠fft
实现的DOA仅仅能做到平面范围内的方位判断,仅输出一个角度(平面offset),速度慢且不支持声源跟踪等功能。而odas的声源定位项目输出两个值,一个平面offset一个法向offset,还能进行声源分辨,多声源跟踪跟踪。odas项目的理论收录在Lightweight and Optimized Sound Source Localization and Tracking Methods for Opened and Closed Microphone Array Configurations中,值得一读。