Подробное руководство о том, как создать собственное веб-приложение для преобразования речи в текст для оптимального преобразования аудио в текстовый формат.

Речь является одной из наиболее эффективных форм общения, используемых людьми. Популярность аудиокниг и подкастов за последние несколько лет росла, особенно в связи с быстрым темпом жизни в современную эпоху. Однако чтение всегда было важнейшим аспектом нашей жизни и наиболее предпочтительным методом извлечения информации. Зритель, читающий эту статью, является лучшим тому примером.

Следовательно, необходимость преобразования простых аудиоданных в удобочитаемый текстовый формат для охвата широкого круга аудиторий имеет решающее значение. Будь то субтитры в фильме или преобразование аудиокниг в письменный материал, извлечение текстовых данных из доступной речи является важным приложением. При использовании правильных методов глубокого обучения можно получить оптимизированное преобразование речи в текст.

В этой статье мы поймем, как построить один из наиболее оптимизированных подходов к преобразованию ваших аудиоданных в текст. Мы будем использовать платформу AssemblyAI, которая позволит нам расшифровывать и понимать аудио наиболее эффективным способом. Давайте теперь приступим к началу строительства этого проекта!

Создание веб-приложения преобразования речи в текст:

В этом разделе мы создадим веб-приложение преобразования речи в текст для расшифровки видео. Мы будем использовать простую в использовании технологию токена API AssemblyAI для высокоэффективной расшифровки аудиофайлов. Мы также будем использовать интерактивный веб-фреймворк в Streamlit для развертывания нашего проекта. Во-первых, давайте приобретем все необходимые компоненты для успешного запуска этого проекта.

Устанавливаем все необходимые зависимости:

Два основных требования, которые должны быть установлены пользователями, — это инфраструктура веб-разработки Streamlit для развертывания проекта и библиотека youtube-dl, которая поможет нам загружать видео с YouTube и других подобных видеосайтов. Обе эти библиотеки можно загрузить с помощью простой команды установки pip, как показано ниже.

pip install streamlit
pip install youtube_dl

Эти команды можно вводить, как показано выше, в командной строке. Что касается последней зависимости, нам потребуется установка FFmpeg. Это бесплатный программный проект с открытым исходным кодом, который позволит нам наиболее эффективно обрабатывать аудиофайлы, видеоконтент, потоки и другие мультимедийные файлы. Следовательно, загрузите требования по следующей ссылке и добавьте их прямо в свой путь, перейдя к переменным среды на платформе Windows.

Вы можете либо иметь одну установку FFmpeg с путем к его bin-файлу, либо загрузить все требования для Windows 64 по предоставленной ссылке. Если вы хотите повторить то, что сделал я, вы можете загрузить ffmpeg, ffprobe и ffplay в папку под названием Paths и добавить их в переменные среды, как показано на изображениях ниже.

Теперь, когда мы завершили получение всех необходимых требований к библиотеке, мы можем приступить к созданию нового файла Python и соответствующим образом импортировать их. Я назову этот файл Python final_app.py. Этот файл Python будет содержать все основное содержимое кода для нашего проекта.

import streamlit as st
import youtube_dl
import requests
from config import API_Key

Примечательно, что теперь у нас есть все необходимые импорты, включая библиотеку запросов, которая позволит нам с легкостью получать доступ к URL-ссылкам любого веб-сайта. Однако может возникнуть вопрос, что такое импорт конфигурации, и мы разберемся, что это такое, в следующем разделе.

Создание файла конфигурации:

Прежде чем мы продолжим процесс кодирования, мы посетим платформу AssemblyAI, где мы можем бесплатно создать учетную запись и получить ключ API, который мы можем использовать для легкого понимания и расшифровки аудио. Как только вы войдете в свою учетную запись, вы сможете скопировать свой ключ API в правой части экрана.

На следующем шаге мы создадим еще один файл Python, в котором будет храниться наш ключ API, сгенерированный на платформе AssemblyAI. Не забудьте пометить созданный файл Python как config.py, где мы можем создать переменную с именем API_Key, в которой будет храниться адрес API, который мы ранее скопировали с платформы AssemblyAI. Фрагмент кода показан ниже.

API_Key = "Enter Your Key Here"

Добавляем все необходимые параметры:

После того, как вы закончите создание файла конфигурации, остальная часть проекта закодируется в разделе final_app.py. Во-первых, мы добавим основные параметры, необходимые для загрузки видео, а также установим соответствующие местоположения на веб-сайте AssemblyAI. Давайте проверим блок кода ниже, прежде чем мы поймем объяснение этих параметров.

ydl_opts = {
   'format': 'bestaudio/best',
   'postprocessors': [{
       'key': 'FFmpegExtractAudio',
       'preferredcodec': 'mp3',
       'preferredquality': '192',
   }],
   'ffmpeg-location': './',
   'outtmpl': "./%(id)s.%(ext)s",
}

В приведенном выше блоке кода мы просто определяем некоторые из основных ограничений, необходимых для загрузчика YouTube. Мы загрузим видео в виде лучших аудио и сохраним их на нашем локальном диске в формате mp3. В следующем фрагменте кода мы определим наши параметры для платформы AssemblyAI.

transcript_endpoint = "https://api.assemblyai.com/v2/transcript"
upload_endpoint = 'https://api.assemblyai.com/v2/upload'
headers_auth_only = {'authorization': API_Key}
headers = {
   "authorization": API_Key,
   "content-type": "application/json"
}
CHUNK_SIZE = 5242880

Мы описываем конечные точки, куда мы будем загружать аудиофайл, а также конечные точки, где будет происходить транскрипция этого файла. Наконец, мы также настроим заголовок, указывающий на ключ API, который мы получили ранее. Переменная размера фрагмента поможет нам разбить большие аудиофайлы на более мелкие фрагменты. Давайте перейдем к следующему разделу, где мы будем расшифровывать видео.

Использование AssemblyAI для расшифровки видео YouTube:

В этом разделе мы создадим функцию, которая поможет нам транскрибировать все аудиоданные. Во-первых, мы вызовем функцию кеша из Streamlit, которая будет хранить предыдущие данные и будет выполнять новое действие только в том случае, если аргументы функции будут изменены. Ссылка расшифровки — это основная функция, которая будет выполнять все необходимые действия. Убедитесь, что все остальные операторы и функции в этом разделе определены в функции transscribe_from_link().

@st.cache
def transcribe_from_link(link, categories: bool):

В первой функции в transscribe_from_link() мы будем использовать импорт youtube-dl и загружать аудиоконтент в желаемое место сохранения, используя идентификатор видео. Теперь мы создадим еще одну функцию для чтения содержимого загружаемого файла и загрузки его на веб-сайт AssemblyAI. Ниже приведен фрагмент кода для следующих функций.

_id = link.strip()
def get_vid(_id):
  with youtube_dl.YoutubeDL(ydl_opts) as ydl:
   return ydl.extract_info(_id)
# download the audio of the YouTube video locally
 meta = get_vid(_id)
 save_location = meta['id'] + ".mp3"
print('Saved mp3 to', save_location)
def read_file(filename):
  with open(filename, 'rb') as _file:
   while True:
    data = _file.read(CHUNK_SIZE)
    if not data:
     break
    yield data

В последнем фрагменте кода этого раздела мы будем использовать библиотеку запросов для загрузки загруженного аудиофайла на платформу AssemblyAI. Как только аудиофайл загружен, мы можем начать процесс транскрипции, отправив еще один запрос на выполнение следующего действия. Наконец, мы можем получить доступ к транскрипции аудиофайла с соответствующим идентификатором и сохранить его в конечной точке опроса, содержащем наш окончательный результат.

# upload audio file to AssemblyAI
 upload_response = requests.post(
  upload_endpoint,
  headers=headers_auth_only, data=read_file(save_location)
 )
audio_url = upload_response.json()['upload_url']
 print('Uploaded to', audio_url)
# start the transcription of the audio file
 transcript_request = {
  'audio_url': audio_url,
  'iab_categories': 'True' if categories else 'False',
 }
transcript_response = requests.post(transcript_endpoint, json=transcript_request, headers=headers)
# this is the id of the file that is being transcribed in the AssemblyAI servers
 # we will use this id to access the completed transcription
 transcript_id = transcript_response.json()['id']
 polling_endpoint = transcript_endpoint + "/" + transcript_id
print("Transcribing at", polling_endpoint)
return polling_endpoint

Примечание. Пожалуйста, просмотрите полный раздел кода, чтобы получить улучшенную версию кода, скопированного выше. Все остальные функции и инструкции в приведенном выше блоке кода должны быть определены в функции transscribe_from_link().

Создание веб-приложения:

В этом разделе мы разработаем веб-приложение с использованием фреймворка Streamlit. Во-первых, мы определим несколько функций, которые будем использовать в макете веб-сайта. Веб-приложению может потребоваться некоторое время для завершения выполнения загрузки аудиофайла и получения преобразованных текстовых данных. Чтобы отслеживать затраченное время, мы будем использовать функции get_status и refresh_state, которые позволят нам получить ответ и проверить, работает ли веб-сайт.

Затем мы можем приступить к добавлению заголовка и текстового поля, которое позволит пользователю добавить ссылку, по которой аудио из видео YouTube может быть загружено и транскрибировано соответствующим образом. Мы также добавим кнопку, которая позволит пользователям щелкнуть и проверить статус процесса транскрипции. Код для веб-разработки показан в приведенном ниже фрагменте кода.

if 'status' not in st.session_state:
    st.session_state['status'] = 'submitted'
def get_status(polling_endpoint):
 polling_response = requests.get(polling_endpoint, headers=headers)
 st.session_state['status'] = polling_response.json()['status']
def refresh_state():
 st.session_state['status'] = 'submitted'
st.title('Easily transcribe YouTube videos')
link = st.text_input('Enter your YouTube video link', 'https://youtu.be/dccdadl90vs', on_change=refresh_state)
st.video(link)
st.text("The transcription is " + st.session_state['status'])
polling_endpoint = transcribe_from_link(link, False)
st.button('check_status', on_click=get_status, args=(polling_endpoint,))
transcript=''
if st.session_state['status']=='completed':
 polling_response = requests.get(polling_endpoint, headers=headers)
 transcript = polling_response.json()['text']
st.markdown(transcript)

Полный код:

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

После полной настройки кода используйте следующую команду для запуска программы.

streamlit run final_app.py

Если зрители ищут видеоурок по этой теме, я настоятельно рекомендую перейти по следующей ссылке для краткого объяснения того, как выполнить следующий проект в виде серии из двух частей.

Заключение:

С последовательным развитием области обработки естественного языка модели глубокого обучения становятся все более эффективными в решении связанных с ними задач. Как обсуждалось в этой статье, мы можем достичь очень высоких результатов в задаче преобразования речи в текст, используя современные технологии искусственного интеллекта. Мы расскажем больше о таких интригующих проектах в следующих статьях!

В этой статье мы подробно рассмотрели, как легко создать собственное веб-приложение для успешной транскрипции аудиоданных в форму текста с помощью Streamlit и платформы AssemblyAI. Если у вас есть какие-либо вопросы, связанные с различными пунктами, изложенными в этой статье, не стесняйтесь, дайте мне знать в комментариях ниже. Я постараюсь вернуться к вам с ответом как можно скорее.

Если вы хотите получать уведомления о моих статьях, как только они появляются, перейдите по следующей ссылке, чтобы подписаться на рекомендации по электронной почте. Если вы хотите поддержать других авторов и меня, подпишитесь на ссылку ниже.



Ознакомьтесь с некоторыми другими моими статьями по теме, затронутой в этой статье, которые, возможно, вам также понравится читать!







Всем спасибо, что дочитали до конца. Надеюсь, всем вам понравилось читать статью. Желаю всем прекрасного дня!