У меня есть довольно амбициозный проект, и я хотел изложить свой мыслительный процесс, чтобы увидеть, выполним ли этот проект.
Во время радиопередачи радиоведущий обычно выдает билеты, если вы звонили #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)
блокируется. Я не уверен, что это связано с тем, что иногда музыка просто играет из файла. - Есть ли способ отфильтровать любую не речь (т.е. музыку без слов)
- Можно ли транскрибировать звук в реальном времени без записи в файл? Таким образом, мне не нужно разбивать его на куски, копировать файл для чтения, а затем анализировать то, что приходит.
Есть ли лучший подход, который я могу использовать для достижения этого проекта?