Я в настоящее время сталкиваюсь с ошибкой памяти во время запуска речи Google к тексту - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь создать программу преобразования речи в текст для запуска через WAV-файл, извлечения текста из звуковой дорожки для добавления в текстовый файл, и, к сожалению, я получаю исключение MEMORYERROR , мой код ниже, если вы можете, пожалуйста, помогите мне решить эту проблему, это будет очень признателен Я также знаю о других ошибках, но поскольку я по-прежнему являюсь промежуточным звеном, если вы объясните проблему, пожалуйста, объясните немного проще, чтобы мне было легче понять

import speech_recognition as sr
from tkinter import Tk 
from tkinter.filedialog import askopenfilename # "open file" window to select file

def recognize_speech_from_audio_file(recognizer, audioPath):
    if not isinstance(recognizer, sr.Recognizer): # error if not instance of Recognizer 
        raise TypeError("'recognizer' must be 'Recognizer' instance")
    if not isinstance(audioPath, sr.AudioFile): # error if not instance of AudioFile
        raise TypeError("'audioFile' must be 'AudioFile' instance")

    with audioPath as src: 
        recognizer.adjust_for_ambient_noise(src) # adjust file noise
        audio = recognizer.record(src) # copy new file to variable for use later
    # set up response with api
    response = {
        "success": True,
        "error": None,
        "transcription": None
    }

    try:
        response["transcription"] = recognizer.recognize_google(audio)
    except sr.RequestError:
        response["success"] = False
        response["error"] = "API unavailable"
    except sr.UnknownValueError:
        response["error"] = "Unable to recognize speech"

    return response

if __name__ == "__main__":
    Tk().withdraw()  # we don't want a full GUI, so keep the root window from appearing
    filename = askopenfilename()  # show an "Open" dialog box and return the path to the selected file
    recognizer = sr.Recognizer() 
    audioFile = sr.AudioFile(filename) 
    text = recognize_speech_from_audio_file(recognizer, audioFile) # save transcription to variable
    with open("transcription.txt","r+") as f1:
        f1.write(text) # write text to file
        f1.close() # close file

и вот обратная связь

Traceback (most recent call last):
  File "C:\Users\15017\PycharmProjects\SpeechRecog\venv\lib\site-packages\speech_recognition\__init__.py", line 387, in get_wav_data
    wav_writer.writeframes(raw_data)
  File "C:\Users\15017\AppData\Local\Programs\Python\Python37-32\lib\wave.py", line 438, in writeframes
    self.writeframesraw(data)
  File "C:\Users\15017\AppData\Local\Programs\Python\Python37-32\lib\wave.py", line 433, in writeframesraw
    self._file.write(data)
MemoryError

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (most recent call last):
  File "C:/Users/15017/PycharmProjects/SpeechRecog/SpeechRecognition.py", line 37, in <module>
    text = recognize_speech_from_audio_file(recognizer, audioFile)
  File "C:/Users/15017/PycharmProjects/SpeechRecog/SpeechRecognition.py", line 23, in recognize_speech_from_audio_file
    response["transcription"] = recognizer.recognize_google(audio)
  File "C:\Users\15017\PycharmProjects\SpeechRecog\venv\lib\site-packages\speech_recognition\__init__.py", line 828, in recognize_google
    convert_width=2  # audio samples must be 16-bit
  File "C:\Users\15017\PycharmProjects\SpeechRecog\venv\lib\site-packages\speech_recognition\__init__.py", line 444, in get_flac_data
    wav_data = self.get_wav_data(convert_rate, convert_width)
  File "C:\Users\15017\PycharmProjects\SpeechRecog\venv\lib\site-packages\speech_recognition\__init__.py", line 390, in get_wav_data
    wav_writer.close()
  File "C:\Users\15017\AppData\Local\Programs\Python\Python37-32\lib\wave.py", line 447, in close
    self._patchheader()
  File "C:\Users\15017\AppData\Local\Programs\Python\Python37-32\lib\wave.py", line 495, in _patchheader
    curpos = self._file.tell()
ValueError: I/O operation on closed file.

Process finished with exit code 1
...