You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python语音助手使用SpeechRecognition时的音频模糊问题?

解决语音助手唤醒词环节的音频模糊问题

我在用SpeechRecognition库开发Python语音助手,该库兼顾录音与转文本功能,但录音时音频存在模糊问题——这是麦克风采集的普遍问题,我想至少在唤醒词检测环节解决它。此前搜索以下关键词未找到有效方案:

  • voice muffled when microphone is working
  • voice muffled when microphone is working voice recognition python

以下是针对唤醒词环节的优化方案:

1. 优化SpeechRecognition的麦克风配置

调整Recognizer的降噪参数与能量阈值,能大幅提升低质量音频下的唤醒词识别率。修改你的takeCommand函数:

def takeCommand():
    r = sr.Recognizer()
    
    with sr.Microphone() as source:
        print("Listening...")
        # 环境降噪:根据环境噪音调整识别阈值,留1-2秒采样时间适配环境
        r.adjust_for_ambient_noise(source, duration=1)
        # 设置能量阈值:过滤低于该值的噪音,可根据实际环境调整(默认300)
        r.energy_threshold = 400
        # 动态调整能量阈值,适配不同音量的语音输入
        r.dynamic_energy_adjustment_ratio = 1.5
        r.pause_threshold = 0.8
        
        audio = r.listen(source)

    try:
        print("Recognizing...") 
        query = r.recognize_google(audio, language ='en-in')
        print(f"User said: {query}\n")

    except Exception as e:
        print(e) 
        print("Unable to Recognize your voice.") 
        return "None"
    
    return query

2. 使用专用唤醒词检测库

专用唤醒词库(如Porcupine)针对唤醒词场景优化,对模糊音频的鲁棒性远高于通用语音识别。这类库只检测预设的唤醒词,无需全量转文本,能有效过滤噪音与模糊干扰。

示例实现(需先安装对应库):

import pvporcupine
import pyaudio

# 替换为你的Access Key(可从Porcupine官方免费获取)
ACCESS_KEY = "YOUR_ACCESS_KEY"
# 预设唤醒词,支持自定义训练
KEYWORDS = ["alexa", "computer"]

porcupine = pvporcupine.create(access_key=ACCESS_KEY, keywords=KEYWORDS)

pa = pyaudio.PyAudio()
audio_stream = pa.open(
    rate=porcupine.sample_rate,
    channels=1,
    format=pyaudio.paInt16,
    input=True,
    frames_per_buffer=porcupine.frame_length)

print("Waiting for wake word...")
while True:
    pcm = audio_stream.read(porcupine.frame_length)
    pcm = pvporcupine.convert_pcm_to_int16(pcm)
    keyword_index = porcupine.process(pcm)
    
    if keyword_index >= 0:
        print(f"Wake word detected: {KEYWORDS[keyword_index]}")
        # 触发后续语音指令逻辑
        query = takeCommand()
        # ... 你的指令处理代码

3. 音频预处理提升清晰度

对采集到的音频做增益、滤波等预处理,强化人声特征,削弱模糊噪音。可使用pydub库实现:

from pydub import AudioSegment
from pydub.effects import normalize, low_pass_filter

def preprocess_audio(audio):
    # 将SpeechRecognition的AudioData转换为pydub的AudioSegment格式
    audio_segment = AudioSegment(
        data=audio.get_raw_data(),
        sample_width=audio.sample_width,
        frame_rate=audio.sample_rate,
        channels=1)
    
    # 归一化音量,提升整体响度
    normalized = normalize(audio_segment)
    # 低通滤波,过滤高频噪音
    filtered = low_pass_filter(normalized, cutoff=3000)
    
    # 转换回SpeechRecognition可用的格式
    return sr.AudioData(
        filtered.raw_data,
        filtered.frame_rate,
        filtered.sample_width)

# 在takeCommand中调用预处理逻辑
def takeCommand():
    r = sr.Recognizer()
    
    with sr.Microphone() as source:
        print("Listening...")
        r.adjust_for_ambient_noise(source, duration=1)
        audio = r.listen(source)
        
        # 对采集的音频做预处理
        processed_audio = preprocess_audio(audio)

    try:
        print("Recognizing...") 
        query = r.recognize_google(processed_audio, language ='en-in')
        print(f"User said: {query}\n")

    except Exception as e:
        print(e) 
        print("Unable to Recognize your voice.") 
        return "None"
    
    return query

内容的提问来源于stack exchange,提问作者PrinceMask

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:05:20