gpt4 book ai didi

python - 几分钟后python音频监听器质量下降

转载 作者:行者123 更新时间:2023-12-02 23:52:56 24 4
gpt4 key购买 nike

我正在尝试设置一个持久的音频监听器。这个想法是记录音频的一部分,发送到Google的语音识别API,然后根据所说的内容运行命令。我知道这已经实现了好几次了;实际上,我从这里借来了大量代码(略作修改):

https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py

我希望它在后台持续运行。目前,它在开始的几分钟内效果很好,但是过一会儿,录音机需要更长的时间才能停止录制(即使完全静音),而且我不确定传送正确的音频到Google的原因是识别质量掉下来很陡。请注意,我目前正在使用非常激进的try / except来解决IOErrors的问题,该问题似乎是在录制第一部分音频后出现的。任何更优雅和/或更有效的解决方案都将受到欢迎。我的代码如下:

#config
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
THRESHOLD = 180 #The threshold intensity that defines silence signal (lower than).
SILENCE_LIMIT = 2 #Silence limit in seconds. The max ammount of seconds where only silence is recorded. When this time passes the recording finishes and the file is delivered.

p = pyaudio.PyAudio()

print "* listening. CTRL+C to finish."

all_m = []
data = ''
rel = RATE/chunk
slid_win = deque(maxlen=SILENCE_LIMIT*rel)
started = False

while (True):
try:
#listening loop, open new stream each time
stream = p.open(format = FORMAT,channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = chunk)
data = stream.read(chunk)

slid_win.append (abs(audioop.avg(data, 2)))

#detect noise
if(True in [ x>THRESHOLD for x in slid_win]):
if(not started):
print "starting record"
started = True
all_m.append(data)
elif (started==True):
stream.close()
print "finished"

#the limit was reached, finish capture and deliver
filename = save_speech(all_m,p)
google(filename)

#reset all
started = False
slid_win = deque(maxlen=SILENCE_LIMIT*rel)
all_m= []

print "listening ..."
except IOError as e:
print "Caught IOError"
stream.close()
pass

其余代码仅涉及转换为flac和向Google发出请求。

重申一下,我的代码在开始的几分钟内效果很好,前提是没有很多背景噪音,并且直接将命令说给了麦克风。除了移动流的打开位置(它最初在while()循环之外)之外,我还尝试过在将文件保存/发送到Google之前关闭PyAudio流。这些变化似乎都有所帮助。然而,由于随着时间的流逝,记录指示器变得越来越不准确,我的直觉是与滑动窗口的“未对准”有关。当然可以肯定是错的。

先谢谢您的帮助。

最佳答案

一种更有效的方式是在专为连续收听而设计的关键字发现模式下使用Pocketsphinx。要尝试它,您需要从主干中 check out 最新的开发版本并在文件上运行发现:

     pocketsphinx_continuouos -kws "oh mighty computer" -infile file.wav

无需互联网连接,消除噪音,您将能够调整检测阈值和关键字发音。

您可以通过Python API使用Pocketspinx:
config = Decoder.default_config()
config.set_string('-kws', "oh mighty computer")
decoder = Decoder(config)

decoder.start_utt('')
stream = open(path.join('file.wav'), 'rb')
while True:
buf = stream.read(1024)
decoder.process_raw(buf, False, False)

关于python - 几分钟后python音频监听器质量下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21926598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com