Проект потоковой передачи аудио и распознавания речи/текста на Python

У меня есть довольно амбициозный проект, и я хотел изложить свой мыслительный процесс, чтобы увидеть, выполним ли этот проект.

Во время радиопередачи радиоведущий обычно выдает билеты, если вы звонили #X в указанный период времени. Так как большинство из нас находится на работе и не всегда может слушать радио для этих возможностей, я подумал: «Может быть, я мог бы написать программу, которая может это сделать». Вот о чем я думал:

  • Прослушивание URL-адреса радиопотока (TuneIn Radio)
  • Проанализируйте входящие данные, извлекая ключевые слова, которые могут привести слушателя к мысли, что приближается возможность получить приз на концерте (например: «Позвоните в 15:40, чтобы получить шанс выиграть билеты на концерт The Who!»).
  • Сделайте вызов Twilio на телефонный номер радиостанции и переадресуйте вызов на свой мобильный телефон в случае успешного вызова.

Я начал возиться с этим и придумал несколько фрагментов кода, которые, как мне кажется, идут в правильном направлении. У меня также есть некоторые опасения, о которых я упомяну после фрагментов кода.

До сих пор я придумал процесс, который использует библиотеку requests для прослушивания URL-адреса потока и записи полученного контента в файл .wav. Оттуда Google Speech Recognizer проанализирует аудиофайл и распечатает текст.

import requests 

stream_url = "http://18073.live.streamtheworld.com:3690/WDHAFM_SC?DIST=TuneIn&TGT=TuneIn&maxServers=2&gender=m&ua=RadioTime&ttag=RadioTime"

r = requests.get(stream_url, stream=True)

f = open("audio.wav", "wb")

for block in r.iter_content(1024):
    f.write(block)

После запуска этого скрипта Ctrl-C аудиофайл сохраняется и его можно прослушать. Затем я должен использовать ffmpeg, чтобы преобразовать файл в настоящий .wav. По какой-то причине f.write сохраняет его с кодеком mp3. Это необходимо, чтобы Google Speech Recognition мог правильно загрузить файл.

import speech_recognition as sr

audio_file = "audio.wav"

r = sr.Recognizer()
af = sr.AudioFile(audio_file)
with af as source:
    audio = r.record(source, duration=4)

text = r.recognize_google(audio)
print(text)

Несколько опасений:

  • Иногда text = r.recognize_google(audio) блокируется. Я не уверен, что это связано с тем, что иногда музыка просто играет из файла.
  • Есть ли способ отфильтровать любую не речь (т.е. музыку без слов)
  • Можно ли транскрибировать звук в реальном времени без записи в файл? Таким образом, мне не нужно разбивать его на куски, копировать файл для чтения, а затем анализировать то, что приходит.

Есть ли лучший подход, который я могу использовать для достижения этого проекта?


person laskeym13    schedule 25.10.2018    source источник