audio - 将实时音频数据馈送到移动设备上的 tensorflow

标签 audio mobile tensorflow signal-processing

我正在构建最终将在手机(iPhone/Android)上运行的声音检测应用程序的原型(prototype)。当识别到特定声音时,它需要接近实时才能向用户提供足够快的响应。我希望使用 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:提供数据的滑动窗口

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

建议?

最佳答案

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

  • 有一些触发器来检测声音或语音的开始。这可以只是持续的音频电平,或者更高级的东西。
  • 在固定大小的窗口上运行频谱图,与噪声的开始对齐。
  • 网络的其余部分可以只是一个标准的图像检测(通常是缩小尺寸)来对声音进行分类。

  • 有很多变化和其他可能的方法。例如,对于语音,通常使用 MFCC 作为特征生成器,然后运行 ​​LSTM 来分离音素,但既然你提到了声音检测,我猜你不需要这么高级的东西。

    关于audio - 将实时音频数据馈送到移动设备上的 tensorflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41525251/

    相关文章:

    php - Codeigniter user_agent 不工作

    python - 值错误: Duplicate plugins for name projector

    python - 如何在 tensorflow 中累加1到10?

    python - 输入多个数据集到tensorflow模型

    html - 如何在网络浏览器中播放 MKV 视频?

    android - 在Android的Exoplayer中播放WAV音频文件

    android - Mediaplayer没有声音

    javascript - $(window).scroll 在移动设备和 Internet Explorer 上无法正常工作

    ios - 在 HTML5/Phonegap 中保存网页状态

    android - 停止后MediaPlayer无法播放