昆仑山

注册

 

发新话题 回复该主题

程序员奶爸用Tensorflow树莓 [复制链接]

1#
云南白癜风医院哪家好 http://baidianfeng.39.net/a_yqyy/140104/4322071.html
作者

FabioManganiello译者

弯月,责编

杨碧玉头图

CSDN下载自东方IC出品

CSDN(ID:CSDNnews)

以下为译文:

首先,告诉大家一个好消息,我当爸爸了!我不得不暂停一下我的项目来承担一些育儿的重任。

我就在想,这些育儿任务可以自动化吗?我们真的可以将给孩子换尿布的任务交给一个机器人吗?我想我们距离那一天还很遥遥。想一想父母的心得多大才能在自己孩子身上测试这类的设备,但如果能够通过自动化提供一定的帮助的话,也能减轻父母的重担。初为人父,我领悟到的第一件事就是婴儿真的很爱哭,而且即便我在家,也无法保证时刻能够听到孩子宝宝的哭声。通常我们都会使用婴儿监护仪,这就相当于对讲机,即使你在另一个房间也可以听到宝宝的声音。然而,很快我就意识到商用婴儿监护仪非常笨,比我想要的理想设备差得很远。婴儿监护仪无法检测到宝宝的哭声,它们就像对讲机一样,只是简单地将声音从信号源传递到扬声器。而且,由于这些监护仪无法将声音播放到其他音频设备上,因此父母必须将扬声器带到不同的房间。通常,婴儿监护仪都带有低功率的扬声器,而且通常无法连接到外部扬声器上。这意味着,如果我在扬声器所在的房间里播放音乐,而我本人即使与监护仪在同一个房间内,也听不到宝宝的哭声。此外,大多数监护仪使用的都是低功率无线电波,这意味着,如果宝宝在自己房间里,而你需要去地下室的时候,监护仪就无法正常工作了。因此,我构思了一份智能婴儿监护仪的需求:

能够在任何带有廉价USB麦克风的廉价设备上运行,比如树莓派等。

能够检测到婴儿的哭声,并在宝宝开始哭或停止哭泣的时候通知我(最好通过手机);或者在宝宝哭的时候在仪表板上显示跟踪的数据点;或者执行任何我希望执行的任务。不仅仅是充当哑巴对讲机,将声音从源头传递到唯一的兼容设备上。

能够在任何设备上传输音频流,我自己的扬声器、我的智能手机、我的计算机等。

无论声源与扬声器之间的距离是多少,都能够正常工作,我不需要在房屋内移动扬声器。

配有摄像头,这样我就可以实时检查宝宝的状况;或者在宝宝哭的时候,我可以看到婴儿床的图片或简短的录像,以检查一切是否正常。

下面,我们来看看如何使用我们最喜欢的开源工具来完成这项工作。录制一些音频样本首先,入手一款树莓派,在SD卡上安装任何一款兼容的Linux操作系统。推荐使用树莓派3或更高版本来运行Tensorflow模型。此外,还需要入手一个兼容的USB麦克风,任何型号都可以。然后,安装我们需要的依赖项:

[sudo]apt-getinstallffmpeglamelibatlas-base-devalsa-utils[sudo]pip3installtensorflow第一步,我们必须记录足够的音频样本,记录宝宝什么时候哭,什么时候不哭,稍后我们需要这些样本来训练音频检测模型。注意,在此示例中,我将展示如何使用声音检测来识别婴儿的哭声,你也可以使用相同的方法来检测任何类型的声音,只要声音足够长即可(例如警报声或邻居的声音),而且声源必须比背景噪音更大。首先,看一下音频输入设备:arecord-l我的树莓派获得了以下输出(注意我有两个USB麦克风):

****ListofCAPTUREHardwareDevices****cardevice[USBPnPSoundDevice],device0:USBAudio[USBAudio]Subdevices:0/Subdevice#0:subdevice#0card2evice_[USBPnPSoundDevice],device0:USBAudio[USBAudio]Subdevices:0/Subdevice#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/audio-sample_-audio.mp3-labels.json-sample_2-audio.mp3-labels.json...下面是比较无聊的部分:标记我们录制的音频文件。这些文件中包含数个小时的你家宝宝的哭声,可能有点自虐的倾向。在你喜欢的音频播放器或Audacity中打开每个数据集的音频文件,并在每个样本的目录中新建一个labels.json文件。确定哭声开始和结束的确切时间,并以time_string-label的形式将它们的键值结构写入labels.json。例如:

{"00:00":"negative","02:3":"positive","04:57":"negative","5:4":"positive","8:24":"negative"}在上面的示例中,00:00-02:2之间的所有音频片段都被标记为negative,而02:3-04:56之间的所有音频片段都被标记为positive,以此类推。生成数据集在标记完所有音频样本后,接下来我们来生成需要传递给Tensorflow模型的数据集。我创建了一个通用库和一套名为micmon的声音监控实用程序。首先我们来安装这个库:

gitclonegit

github.
分享 转发
TOP
发新话题 回复该主题