Недавно у меня появилась идея создать сервер, который транскрибирует контент из аудио RSS-потока. Я любитель подкастов (по крайней мере, с 2006 года!), и в некоторых из моих любимых давних шоу они часто упоминают, поднималась ли тема в предыдущих шоу, а затем «Хотелось бы, чтобы мы могли найти это». !». В этот момент я слышу ночной рекламный ролик, восклицающий: «Должен быть лучший способ!». Конечно, поиск аудио — сложная задача, но поиск текста тривиален. Если бы мы могли просто иметь текстовый эквивалент для каждого RSS подкаста, мы могли бы индексировать его, проводить тематический анализ, создавать резюме и т. д.

В наши дни за каждой отличной идеей должно стоять отличное программное обеспечение. Я также хотел изучить Express.js, популярный фреймворк для веб-приложений Node.js. Я выбрал его в качестве своего веб-фреймворка из-за его минималистского дизайна, ориентированного на производительность. Кроме того, все крутые дети делают это.

Теперь о программном обеспечении для транскрипции. Picovoice недавно выпустила движок Leopard Speech-to-Text, который предлагает полную транскрипцию звука на устройстве. Leopard позволит нам загружать новые элементы из RSS-канала непосредственно на наш сервер транскрипции и обрабатывать их там, устраняя любые расходы на пропускную способность и облачные услуги, связанные с отправкой аудио облачному провайдеру для обработки.

Разобравшись с технологией, мы можем приступить к кодированию!

Настройка сервера с Express.js

Наша общая настройка бэкенда будет очень простой. Единая конечная точка для расшифровки по адресу /rss-transcribe, которая будет принимать URL-адрес RSS и страницу общего индекса для тестирования:

Тестовая страница позволит мне вручную ввести URL-адрес RSS-канала подкаста, и он будет отправлен на серверную часть /rss-transcribe для обработки.

Разбор RSS-канала

Для тех, кто не знает, RSS-канал — это, по сути, XML-файл, который периодически размещается и обновляется и обычно представляет собой некоторый поток контекста. Для подкастов каждый узел содержит метаданные о подкасте и ссылку на аудиофайл. Когда наш сервер получает URL-адрес RSS-канала, ему нужно будет получить файл XML, а затем проанализировать его, чтобы получить записи эпизодов подкаста. К счастью, для этого есть npm!

Для синтаксического анализа мы будем использовать отличный пакет парсера RSS от Роберта Бреннана под названием rss-parser. Он возьмет URL-адрес и предоставит нам JSON-представление фида:

Получение аудио

Получив JSON RSS, я смог найти, где в объекте находится аудиоссылка на подкаст. Я попробовал несколько разных каналов, и в каждом из них enclosure.url содержал ссылку на аудиофайл. Сначала я попытался получить URL-адрес по простому HTTP-запросу, но обнаружил, что ссылки на аудио подкастов часто перенаправляют вас несколько раз, что может быть трудно обработать. С известным пакетом запросов axios, используемым вместо HTTP get, это перестало быть проблемой — я смог получить аудиофайл и записать mp3 во временный файл для обработки:

Расшифровка подкаста

Получив аудиофайл, мы можем передать его в механизм преобразования речи в текст Picovoice, Leopard. Чтобы использовать Leopard, нам необходимо зарегистрировать бесплатную учетную запись Picovoice Console. После входа в систему мы можем получить AccessKey, который также предоставит нам бесплатную транскрипцию аудио!

После того, как мы скопировали наш AccessKey, потребуется всего пара строк кода, чтобы получить транскрипцию из нашего файла, которую мы отправим обратно в нашем ответе:

Куда мы идем отсюда?

В настоящее время в моей тестовой настройке мне отправляется транскрипция в ответе, который я затем записываю в текстовый файл в браузере для загрузки. Это позволило мне опробовать систему от начала до конца в качестве пользователя, но это не совсем моя мечта — автоматически транскрибировать RSS-канал и сделать подкаст доступным для поиска. Так каких частей не хватает?

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

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

Есть над чем поработать в следующий раз! А пока ознакомьтесь с исходным кодом и не стесняйтесь вносить в него свои дополнения. Для получения дополнительной информации о SDK и продуктах Picovoice посетите веб-сайт, документы или изучите репозитории GitHub. Если для вашего проекта требуются настраиваемые слова пробуждения или модели контекста, зарегистрируйтесь в Консоли Picovoice.