我必须开发一个应用程序,在那里我必须听声音使用麦克风。当检测到烟雾警报声音时,应用程序必须通知用户有火灾警报。为此,我考虑了两种可能的解决方案
1:)使用语音到文本识别器将烟雾报警声音转换为文本,并存储该文本。在下一次每当收到烟雾警报声音时,相同的语音到文本识别器将其转换为相关文本,如果该文本与存储的文本匹配,则我认为这是警报声音。
2:)存储报警声音,并通过比较波形将记录的声波与存储的声音进行匹配。这只是我的假设,因为我不是这些领域的专家。
到目前为止,我已经猜到这种声音匹配技术是由audio fingerprinting完成的,即每个音频都有一个不同的指纹,如果我们能够匹配两个音频的指纹,那么它们就被认为是相同的。
为此,我最近找到了以下链接
http://www.royvanrijn.com/blog/2010/06/creating-shazam-in-java/
http://masl.cis.gvsu.edu/2012/01/25/android-echoprint/
https://code.google.com/p/musicg/
这似乎更接近于我的问题的解决方案,我仍然在努力掌握所有这些,但来自你们所有人的任何帮助都将受到广泛的感谢。
发布于 2014-05-14 14:37:31
我建议不要使用语音转文本,因为它不会将警报识别为句子/单词。
我的建议是--阅读关于DFT和FFT的文章。
这是我为images(2d dft) 制作的一个丑陋的可测性设计的小例子。你可以看到算法本身是非常简单的,但在DFT的情况下,它非常慢。对于1D(声音),它应该足够快。
我的建议是-接收声音数据,通过它运行DFT/FFT,您将获得您的信号的频率。也许你可以检查高范围频率是否足够强大,以检测警报。
在您的情况下,我还会检查其他可能性,比如几秒钟的处理频率,看看它们是否与警报频率的近似值匹配。
Good reading about FFT and what's behind it.
https://stackoverflow.com/questions/23647190
复制相似问题