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