Python Speech_Recognition Bad Results

时间:2015-11-04 15:36:12

标签: python python-3.x speech-recognition

我尝试使用带有Python 3.4的speech_recognition 3.1.2,但我一直都遇到了麻烦。

最初在尝试使用示例WAV识别器时,我遇到了TypeError:' str'不支持缓冲区接口所以我梳理了源代码并进行了以下更改:

    def read(self, size = -1):
        buffer = self.wav_reader.readframes(self.wav_reader.getnframes() if size == -1 else size)
        if type(buffer) is str:
            buffer = buffer.encode(encoding="utf-8", errors="strict")
            print(buffer)
        if self.wav_reader.getnchannels() != 1: # stereo audio
            try:
                buffer = audioop.tomono(buffer, self.wav_reader.getsampwidth(), 1, 1) # convert stereo audio data to mono
            except Exception as e:
                print(e)
        return buffer

从:

    def read(self, size = -1):
        buffer = self.wav_reader.readframes(self.wav_reader.getnframes() if size == -1 else size)
        if self.wav_reader.getnchannels() != 1: # stereo audio
            buffer = audioop.tomono(buffer, self.wav_reader.getsampwidth(), 1, 1) # convert stereo audio data to mono
        return buffer

虽然它现在没有抛出错误但转录质量很糟糕。我可以非常准确地运行python -m speech_recognition,所以我不确定发生了什么。我将energy_threshold提高到4000,以确保它不是环境噪音问题。我甚至使用了2种不同的识别服务(IBM和Google语音识别)。此外,由于某种原因,最后2个缓冲区是空字符串,然后我必须转换为字节对象

b''
b''

任何建议都很棒!

1 个答案:

答案 0 :(得分:1)

我推出了v3.1.3,这应该可以解决问题。使用pip install --upgrade SpeechRecognition升级并尝试修复!

这里实际上有两个因素:

  • Python chunk库中存在一个错误,如果文件指针位于或超过文件末尾,则会返回字符串而不是空字节对象。这是几个月前修复的,但是今天使用的大多数Python版本仍然存在这个错误。
  • 立体声音频未正确转换为单声道 - 频道仍设为立体声。这导致了一些有趣的声音!

请在此处查看更改:https://github.com/Uberi/speech_recognition