Adafruit I2S MEMS 麦克风不适用于语音 activity 检测系统
Adafruit I2S MEMS microphone is not working with voice activity detection system
我正在尝试使用 raspberry pi 向文本系统发表演讲。 VAD 有很多问题。我正在使用 DeepCpeech 的 VAD 脚本。 Adafruit I2S MEMS 麦克风仅接受 32 位 PCM 音频。所以我修改了脚本来录制 32 位音频,然后将其转换为 16 位以供 DeepSpeech 处理。框架生成和对话部分如下:
for frame in frames:
if frame is not None:
if spinner: spinner.start()
#Get frame generated by PyAudio and Webrtcvad
dp_frame = np.frombuffer(frame, np.int32)
#Covert to 16-bit PCM
dp_frame=(dp_frame>>16).astype(np.int16)
#Convert speech to text
stream_context.feedAudioContent(dp_frame)
PyAudio 配置为:
'format': paInt32,
'channels': 1,
'rate': 16000,
当 VAD 启动时,它总是生成非空帧,即使周围没有声音也是如此。但是当我每 5 秒设置一个计时器时,它表明录制已成功完成。我认为问题在于能量(电压)会增加一些噪音,这就是麦克风无法检测到静音和结束帧生成的原因。如何解决这个问题?
我搜索了DeepCpeech的VAD脚本,找到了。问题与 webrtcvad 有关。 webrtcvad VAD 仅接受 16 位单声道 PCM 音频,采样频率为 8000、16000、32000 或 48000 Hz。所以你需要把32位的帧转成16位的(我说的是PyAudio输出帧)来处理webrtcvad.is_speech()。我改变了,它工作正常。
我正在尝试使用 raspberry pi 向文本系统发表演讲。 VAD 有很多问题。我正在使用 DeepCpeech 的 VAD 脚本。 Adafruit I2S MEMS 麦克风仅接受 32 位 PCM 音频。所以我修改了脚本来录制 32 位音频,然后将其转换为 16 位以供 DeepSpeech 处理。框架生成和对话部分如下:
for frame in frames:
if frame is not None:
if spinner: spinner.start()
#Get frame generated by PyAudio and Webrtcvad
dp_frame = np.frombuffer(frame, np.int32)
#Covert to 16-bit PCM
dp_frame=(dp_frame>>16).astype(np.int16)
#Convert speech to text
stream_context.feedAudioContent(dp_frame)
PyAudio 配置为:
'format': paInt32,
'channels': 1,
'rate': 16000,
当 VAD 启动时,它总是生成非空帧,即使周围没有声音也是如此。但是当我每 5 秒设置一个计时器时,它表明录制已成功完成。我认为问题在于能量(电压)会增加一些噪音,这就是麦克风无法检测到静音和结束帧生成的原因。如何解决这个问题?
我搜索了DeepCpeech的VAD脚本,找到了。问题与 webrtcvad 有关。 webrtcvad VAD 仅接受 16 位单声道 PCM 音频,采样频率为 8000、16000、32000 或 48000 Hz。所以你需要把32位的帧转成16位的(我说的是PyAudio输出帧)来处理webrtcvad.is_speech()。我改变了,它工作正常。