Ошибка при распознавании песни с помощью библиотеки speech_recognition в Python

Есть код:

import speech_recognition as sr
r = sr.Recognizer()
harvard = sr.AudioFile('/content/audio.wav')
with harvard as source:
    audio = r.record(source)
print(r.recognize_google(audio))

Небольшие файлы (длительностью несколько секунд) распознаются и переводятся в текст без проблем. При попытке распознавания файла длительностью несколько минут (песня в формате wav) возникает ошибка:

BrokenPipeError                           Traceback (most recent call last)
/usr/lib/python3.6/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
   1324                 h.request(req.get_method(), req.selector, req.data, headers,
-> 1325                           encode_chunked=req.has_header('Transfer-encoding'))
   1326             except OSError as err: # timeout error

13 frames
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

URLError                                  Traceback (most recent call last)
URLError: <urlopen error [Errno 32] Broken pipe>

During handling of the above exception, another exception occurred:

RequestError                              Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/speech_recognition/__init__.py in recognize_google(self, audio_data, key, language, show_all)
    842             raise RequestError("recognition request failed: {}".format(e.reason))
    843         except URLError as e:
--> 844             raise RequestError("recognition connection failed: {}".format(e.reason))
    845         response_text = response.read().decode("utf-8")
    846 

RequestError: recognition connection failed: [Errno 32] Broken pipe

Ответы (1 шт):

Автор решения: Albra

Спасибо, V-Mor за подсказку. Все верно, библиотека SpeechRecognition, да как в принципе и любая библиотека, критична к объему обрабатываемого аудио файла. Поэтому я определил максимальную длительность аудио, при которой конвертация проходила без ошибок: это 120 сек (кстати, от мощности сервера эта величина не зависит, пробовал увеличивать мощность сервера (количество процессоров, количество памяти)- не помогло. Возможно, с GPU было бы все по-другому). Далее я определял общую длительность аудио с помощью библиотеки ffpeg, нарезал большой файл на фрагменты по 120 сек и конвертировал их по очереди, потом результат склеивал в единый текстовый файл. C'est ls vie))

→ Ссылка