2015-11-04 60 views
0

我想使用speech_recognition 3.1.2使用Python 3.4,但我一直在麻烦整个时间。Python Speech_Recognition Bad Results

最初尝试使用刚刚的例子WAV识别我得到类型错误时:“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'' 

任何意见都会很棒!

+0

有可能是在字符串的处理方式方面差异巨大的蟒蛇 2和3之间,你可以看看:http://python3porting.com/ problems.html。所以不知道这个改变是不是微不足道的。 – toine

+0

@toine这就是我最初的想法,但它看起来像他们在Python 3中写的所有东西,考虑到我得到的错误,这很奇怪。 –

回答

1

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

实际上有两个因素在这里:

  • 没有在Python chunk的图书馆,它返回一个字符串,而不是一个空字节的对象,如果文件指针处于或超过文件末尾的错误。这在几个月前已经修复,但是现在使用的大多数Python版本仍然存在该错误。
  • 立体声音频未正确转换为单声道 - 声道仍设置为立体声。这导致了一些有趣的听起来音频!

看到的变化在这里:https://github.com/Uberi/speech_recognition