我一直在编写一个扩展程序,允许用户发出语音命令来控制他们的浏览器,事情进展顺利,直到遇到灾难性问题。它是这样的:
语音识别对象处于连续模式,每当onerror: 'no-speech'
或onend
事件触发时,它都会重新启动。这样,即使在5分钟的沉默之后,扩展也会一直等待接受输入并在发出命令时做出反应。
经过几天的开发,今天我达到了实际使用中测试它的程度,我发现经过一段时间(并且我没有改变任何东西),我的{{1} }事件开始持续 。在查看控制台时,我会看到在3秒钟内发出18,000个请求,所有请求都被立即拒绝,从而触发onend
并重新启动请求。
我知道在发送请求之前等待声音,或者在不需要远程服务器的情况下拥有本地语音识别功能是最佳的,但是目前的API不允许这样做。
我的怀疑是否正确?我的请求有限吗?
答案 0 :(得分:2)
我的怀疑是否正确?我的请求有限吗?
是
我知道在发送请求之前等待声音,或者在不需要远程服务器的情况下拥有本地语音识别功能是最佳的,但是目前的API不允许这样做。
要隐藏您的请求的IP来源,您可以使用像Tor这样的匿名网络,尽管它不会很快。
假设Google将花费资源来处理系统中记录的所有音频,这是天真的。在您的应用程序开发中,最好依靠提供至少一些保证的API。它可以是商业API,也可以是CMUSphinx等开源实现。
使用CMUSphinx,您还可以通过指定命令的语法来正确实现命令关键字检测并提高准确性。
答案 1 :(得分:1)
您还可以使用语音活动检测(VAD)算法来检测用户何时说话。这可以通过设置音量阈值或频率阈值来完成(例如,人类语音通常小于400hz)。这样,除非有条件,否则您不会向Google发送无用的请求。我不建议使用Tor,因为这会显着增加延迟。 CMUSphinx可能是最好的本地系统选项,但如果仍想使用基于Web的服务,我建议使用语音活动检测算法或查找不同的基于Web的软件。