Python语音识别会产生不良结果

tsc*_*dia 6 python speech-recognition windows-10 python-3.6

我正在努力让我的语音识别脚本工作,但它无法理解我.

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()
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

此脚本用于录制我的声音,然后使用此文件"output.wav"作为语音识别的输入.

编辑:

随着,

with open("microphone-results.wav", "wb") as f:
        f.write(audio.get_wav_data())
Run Code Online (Sandbox Code Playgroud)

我录下了将要分析的声音.它听起来非常糟糕,低速和慢速,就像带有语音转换器的坏电影一样.也许这是解决方案的暗示.我已经检查了chuck_size和sample_rate的设置,这些设置与我上面的录制脚本中的设置相同.我的系统:Windows 10

github github问题358也存在问题

Python:3.6

谢谢您的帮助!

igr*_*nis 8

您的音频显然没有正确记录,这会导致识别失败。我的猜测是r.adjust_for_ambient_noise你失败了(自动语音/静音检测器不容易实现)。从删除此行并手动设置开始

r.energy_threshold = 50
r.dynamic_energy_threshold = False
Run Code Online (Sandbox Code Playgroud)

之后,将录制的音频保存为 .WAV 文件并收听。在将音频发送到 ASR 引擎之前,您必须使其清晰。

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

print(Microphone.list_microphone_names()[0])
Run Code Online (Sandbox Code Playgroud)