Audio 将实时音频数据传送到移动设备上的tensorflow

Audio 将实时音频数据传送到移动设备上的tensorflow,audio,mobile,tensorflow,signal-processing,Audio,Mobile,Tensorflow,Signal Processing,我正在构建一个声音检测应用程序的原型,最终将在手机(iPhone/Android)上运行。它需要接近实时,以便在识别到特定声音时,为用户提供足够快的响应。我希望使用tensorflow来实际构建和训练模型,然后将其部署到移动设备上 我不确定的是,在这种情况下,将数据提供给tensorflow进行推理的最佳方式 选项1:仅向模型提供新采集的样本 在这里,模型本身保留了一个先前信号样本的缓冲区,新样本被附加到该缓冲区,整个过程都得到处理。 比如: samples = tf.placeholder(t

我正在构建一个声音检测应用程序的原型,最终将在手机(iPhone/Android)上运行。它需要接近实时,以便在识别到特定声音时,为用户提供足够快的响应。我希望使用tensorflow来实际构建和训练模型,然后将其部署到移动设备上

我不确定的是,在这种情况下,将数据提供给tensorflow进行推理的最佳方式

选项1:仅向模型提供新采集的样本

在这里,模型本身保留了一个先前信号样本的缓冲区,新样本被附加到该缓冲区,整个过程都得到处理。 比如:

samples = tf.placeholder(tf.int16, shape=(None))
buffer = tf.Variable([], trainable=False, validate_shape=False, dtype=tf.int16)
update_buffer = tf.assign(buffer, tf.concat(0, [buffer, samples]), validate_shape=False)
detection_op = ....process buffer...
session.run([update_buffer, detection_op], feed_dict={samples: [.....]})
这似乎是可行的,但如果每秒将样本推送到模型100次,那么tf.assign内部会发生什么情况(缓冲区可能会变得足够大,如果tf.assign不断分配内存,则可能无法正常工作)

选项2:将整个录制内容馈送到模型

在这里,iPhone应用程序保存状态/录制样本,并将整个录制内容提供给模型。输入可能会变得相当大,在整个录制过程中重新运行检测操作必须在每个循环中不断重新计算相同的值

选项3:提供一个滑动数据窗口

在这里,应用程序保留整个记录的数据,但只向模型提供最新的数据片段。例如,2000年采样率下的最后2秒==以1/100秒的速率馈送4000个样本(每个新样本20个)。模型可能还需要为整个记录保留一些运行总计


建议?

我需要更多地了解您的应用程序需求,但为了简单起见,我建议从选项3开始。对于任意声音,处理此问题的通常方法是:

  • 有一些触发器来检测声音或言语的开始。这可能只是持续的音频水平,或更先进的东西
  • 在一个固定大小的窗口上运行一个频谱图,与噪声的起始点对齐
  • 网络的其余部分可以只是一个标准的图像检测部分(通常缩小尺寸),用于对声音进行分类
有很多变化和其他可能的方法。例如,对于语音,通常使用MFCC作为特征生成器,然后运行LSTM来分离音素,但既然您提到了声音检测,我猜您不需要这么高级的东西