[sudo]apt-getinstallffmpeglamelibatlas-base-devalsa-utils2[sudo]pip3installtensorflow第一步,我们必须记录足够的音频样本,记录宝宝什么时候哭,什么时候不哭,稍后我们需要这些样本来训练音频检测模型。注意,在此示例中,我将展示如何使用声音检测来识别婴儿的哭声,你也可以使用相同的方法来检测任何类型的声音,只要声音足够长即可(例如警报声或邻居的声音),而且声源必须比背景噪音更大。首先,看一下音频输入设备:
arecord-l我的树莓派获得了以下输出(注意我有两个USB麦克风):
****ListofCAPTUREHardwareDevices****2card:Device[USBPnPSoundDevice],device0:USBAudio[USBAudio]3Subdevices:0/4Subdevice#0:subdevice#05card2:Device_[USBPnPSoundDevice],device0:USBAudio[USBAudio]6Subdevices:0/7Subdevice#0:subdevice#0我想使用第二个麦克风来记录声音,也就是card2,device0。ALSA识别它的方式是hw:2,0(直接访问硬件设备)或plughw:2,0(根据需要推断采样率和格式转换插件)。确保你的SD卡上有足够的空间,或者你也可以使用外部USB驱动器,然后开始录制一些音频:
arecord-Dplughw:2,0-c-fcd
lame-audio.mp3在你宝宝的房间中,录制几分钟或几小时的音频(最好分别录制很长一段时间的安静、宝宝哭泣和其他不相关的声音),完成后按Ctrl-C结束。你可以根据需要多重复几次这个过程,获取一天中不同时刻或不同天的音频样本。标记音频样本在收集到足够的音频样本后,我们需要将它们复制到计算机上,用于训练模型,你可以使用scp复制这些文件,也可以直接从SD卡和USB驱动器上复制。我们把这些文件保存在同一个目录下,比如~/datasets/sound-detect/audio。此外,我们还需要为每个样本新建一个文件夹。每个文件夹都包含一个音频文件(名为audio.mp3)和一个标签文件(名为labels.json),稍后我们将使用标签文件来标记音频文件,比如“positive”/“negative”音频片段。原始数据库的结构大致如下:
~/datasets/sound-detect/audio2-sample_3-audio.mp34-labels.json5-sample_26-audio.mp37-labels.json8...下面是比较无聊的部分:标记我们录制的音频文件。这些文件中包含数个小时的你家宝宝的哭声,可能有点自虐的倾向。在你喜欢的音频播放器或Audacity中打开每个数据集的音频文件,并在每个样本的目录中新建一个labels.json文件。确定哭声开始和结束的确切时间,并以time_string-label的形式将它们的键值结构写入labels.json。例如:
{2"00:00":"negative",3"02:3":"positive",4"04:57":"negative",5"5:4":"positive",6"8:24":"negative"7}在上面的示例中,00:00-02:2之间的所有音频片段都被标记为negative,而02:3-04:56之间的所有音频片段都被标记为positive,以此类推。生成数据集在标记完所有音频样本后,接下来我们来生成需要传递给Tensorflow模型的数据集。我创建了一个通用库和一套名为micmon的声音监控实用程序。首先我们来安装这个库:
gitclonegit
github.