Python语音识别产生不良结果

9

我正在努力让我的语音识别脚本工作,但它不能理解我。

import pyaudio
import speech_recognition as sr

def initSpeech():
    r = sr.Recognizer()

    with sr.Microphone() as source:
        r.adjust_for_ambient_noise(source, duration=2)
        print("Set minimum energy threshold to {}".format(r.energy_threshold))
        print("Say something")

        audio = r.listen(source, phrase_time_limit=10)

        command = ""
        try:
            command = r.recognize_google(audio)
        except:
            print("Coundn't understand you!")

        print(command)

initSpeech()

这是我的代码来识别我的声音,但当我使用以下脚本录制我的声音并将波形文件作为语音识别的输入时,它总是打印出 "Coundn't understand you!"
import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print("* recording")

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print("* done recording")

stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

这段脚本可以录制我的声音,然后将文件“output.wav”作为语音识别的输入。

编辑:

使用:

with open("microphone-results.wav", "wb") as f:
        f.write(audio.get_wav_data())

我录制了我的声音,将被分析。但是听起来非常糟糕,低沉而缓慢,就像电影中的变声器一样。也许这是解决方案的提示。我已经检查了chuck_size和sample_rate的设置,它们与我上面的录音脚本中的设置相同。我的系统:Windows 10。
还有一个问题在GitHub上Github issue 358
Python版本:3.6。
感谢您的帮助!

"不起作用" 不是一个恰当的描述。 - Martin Thoma
首先不要捕获每一个可能的异常。不要使用一个通用的except;移除try..except并告诉我们抛出了什么异常。包括完整的回溯信息。 - Martijn Pieters
我已经完成了。我从谷歌识别中得到了一个未知值异常。这可能是由于糟糕的音频质量引起的(请参见Github问题)。 - Tobias Schäfer
你录制的音频听起来“像变声器”的最可能原因是采样率不匹配。更有可能的是,.WAV文件的指定采样率比你录制时使用的音频接口低,导致保存时出现严重的向下音高转换,因为没有进行正确的采样率转换。所以我的建议是:明确指定sr.Microphone()的采样频率,并确保它与实际使用的源(音频接口/麦克风)相同。 - amitchone
尝试将录制的音频保存为wav格式并进行回放。其次,不要使用“尝试”方法,查看确切的错误。 - BigZee
1个回答

9
您的音频明显没有正确录制,这导致了识别失败。我的猜测是r.adjust_for_ambient_noise无法正常工作(自动语音/静音检测器不容易实现)。首先尝试删除此行并手动设置。
r.energy_threshold = 50
r.dynamic_energy_threshold = False

接下来,将录制的音频保存为.WAV格式并进行听取。在将其发送到ASR引擎之前,必须确保您的音频清晰。

此外,我建议您确保使用您打算使用的麦克风。

print(Microphone.list_microphone_names()[0])

我正在使用recognize_sphinx并测试了recongize_google,但仍无法正确地转录我的语音。我应该调整哪些设置?这是转换为wav文件的录制音频:https://drive.google.com/open?id=1QTf-_g4M6mv7hVye2BoLN-tBARJs3LPb - Naveen Reddy Marthala
1
您提供的音频噪音很大,说话者口音较重。现有技术在这种情况下提供了低质量的转录。 - igrinis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接