Как в Телеграмме голосовое делать текстом

В статье рассмотрим как получить текст голосового сообщения в Telegram боте, используя API OpenAI.

voice-to-text

Требования. У вас должна быть Linux система с установленным Python 3.10+. Если вы в России, потребуется VPN. В качестве Telegram фреймворка используется aiogram 3. Для успешного прохождения туториала необходимы некоторые знания aiogram 3.

Транскрибация — это перевод аудио в текст. В нашем случае: перевод голосового сообщения (voice) в текст.

OpenAI API

OpenAI API — это программный интерфейс приложения, который предоставляет доступ к технологиям искусственного интеллекта, разработанным и поддерживаемым OpenAI. Для решения нашей задачи нам понадобится модель Whisper от OpenAI.

Whisper Model — модель, способная транскрибировать аудио файлы в текст.

  • Транскрибирование аудио файла на любом языке.
  • Транскрибирование аудио файла и перевод текста на английский.

Для использования модели необходимо отправить байтовое представление аудио файла размером не более 25 мегабайтов в одном из доступных форматов на endpoint API. Мы будем использовать Python библиотеку openai для выполнения запросов к API в программе.

Как перевести голосовые сообщения в текст

Пример из документации траскрибирующий аудио файл в текст:

# Листинг [1] # Транскрибация аудио файла в текст # Примечание: вам необходимо использовать # OpenAI Python v0.27.0 для работы с этим кодом import openai audio_file = open(«/path/to/file/german.mp3», «rb») transcript = openai.Audio.translate(«whisper-1», audio_file)

Сперва открывается файл по пути «/path/to/file/german.mp3» в binary моде. Далее выполняется метод translate , который принимает название модели «whisper-1» и файл audio_file .

Формат ответа transcript :

# Листинг [2] # Ответ от модели, содержимое transcript

Создание проекта и установка зависимостей

Для начала необходимо установить программу ffmpeg для работы с медиа файлами в ОС Linux. Это программа необходима для работоспособности одной из зависимостей проекта, подробнее о ней далее.

$ sudo apt install ffmpeg

Создайте папку с проектом и настройте виртуальное окружение. В окружение установите фреймворк aiogram 3 (для работы с Telegram API), библиотеку openai (для работы с OpenAI API) не ниже 0.27 версии и библиотеку pydub (для работы с аудио файлами).

Еще по теме:  Как найти номер телефона человека через Телеграмм

$ pip install —pre aiogram $ pip install openai==0.27.0 $ pip install pydub

Для удобства будем работать в одном файле. Создайте новый файл bot.py и поместите туда следующий код. Поменяйте токен бота на свой.

У вас должна была получиться примерно следующая структура проекта:

project/ ├── env/ # Виртуальное окружение └── bot.py # Код с ботом

Запустите бота и проверьте работоспособность. На любое сообщение бот должен возвращать echo.

$ python bot.py

Если всё работает, двигаемся дальше.

Транскрибация аудио в текст

Продолжаем работать в файле bot.py, добавляя последующий код в него. Перед тем как начать работать с библиотекой openai, необходимо проинициализировать API токен. Импортируем библиотеку и инициализируем токен, который вы сгенерировали ранее.

Как отправить голосовое сообщение в телеграм


# Листинг [4] # Инициализация openai ключа import openai openai.api_key = «sk-BhC44H9LVVtSE74BlbkGGtPs0OTGDx21tjPVu7bzl»

Выше был пример из документации OpenAI с транскрибацией (листинг №1). В нём использовался метод transcribe , класса Audio из модуля openai для создания запроса к OpenAI API. Также в классе Audio имеется метод atranscribe для выполнения этого же запроса, но в асинхронном режиме. Метод принимает два аргумента — название модели ( «whisper-1» ) и файл для транскрибации.

Создадим следующую функцию:

# Листинг [5] # Функция для транскрибации аудио файла async def audio_to_text(file_path: str) -> str: «»»Принимает путь к аудио файлу, возвращает текст файла.»»» with open(file_path, «rb») as audio_file: transcript = await openai.Audio.atranscribe( «whisper-1», audio_file ) return transcript[«text»]

Функция принимает путь к аудио файлу file_path . Открывает файл на чтение в binary моде audio_file . Выполняет запрос методом atranscribe класса Audio , передавая название модели и сам файл. В листинге №2 указан формат ответа от модели, поэтому для возвращения результирующего текста обращаемся к ключу «text» ответа transcript .

Далее напишем функцию для сохранения голосового сообщения с сервера Telegram. Для этого подготовим директорию voice_files.

У вас должна была получиться следующая структура проекта:

Еще по теме:  Что значит last seen в Telegram

project/ ├── env/ # Виртуальное окружение ├── voice_files/ # Хранилище войсов в .mp3 формате └── bot.py # Код с ботом

Импортируем io , Voice , AudioSegment .

# Листинг [6] # Необходимые импорты import asyncio import io from aiogram import Bot, Dispatcher, F, Router from aiogram.types import Message, Voice import openai from pydub import AudioSegment

Разберём функцию по шагам:

# Листинг [7] # Функция сохраняющая голосовое сообщение в mp3 async def save_voice_as_mp3(bot: Bot, voice: Voice) -> str: «»»Скачивает голосовое сообщение и сохраняет в формате mp3.»»» voice_file_info = await bot.get_file(voice.file_id) voice_ogg = io.BytesIO() await bot.download_file(voice_file_info.file_path, voice_ogg) voice_mp3_path = f»voice_files/voice-.mp3″ AudioSegment.from_file(voice_ogg, format=»ogg»).export( voice_mp3_path, format=»mp3″ ) return voice_mp3_path

Функция принимает экземпляр бота bot для скачивания файлов и экземпляр голосового сообщения voice с необходимой информацией.

Голосовые сообщения скачиваются в формате .ogg , а модель Whisper с этим форматом не работает. Поэтому мы будем скачивать файл с сервера в переменную voice_ogg , затем конвертировать его в формат .mp3 в папку voice_files.

Метод bot.get_file принимает идентификатор файла голосового сообщения voice и возвращает информацию о файле. Нам нужен путь к файлу.

Создаем байтовую переменную voice_ogg в которую будет скачиваться голосовое сообщение с сервера в формате .ogg . Затем методом bot.download_file , который принимает путь к файлу на сервере и место назначения для сохранения, скачиваем файл. Передаем путь к файлу voice_file_info.file_path и место для сохранения voice_ogg .

Далее используем класс AudioSegment из библиотеки pydub для преобразования формата файла из .ogg в .mp3 . Задаем путь для сохранения файла в переменную voice_mp3_path . Используем метод from_file для открытия файла и сразу же метод export для сохранения конвертированного файла по месту назначения, указывая форматы данных.

Функция возвращает путь к скаченному файлу.

Осталось за малым — соединить всё воедино в нашем обработчике. Для этого отредактируем его следующим образом:

Наш обработчик process_voice_message принимает все голосовые сообщения пользователя, как указано в декораторе. Сперва идет вызов нашей функции save_voice_as_mp3 из листинга №7 для скачивания голосового сообщения в директорию voice_files в формате .mp3 , она возвращает путь к скаченному файлу. Далее вызывается функция audio_to_text из листинга №5 для выполнения запроса к OpenAI API на транскрибацию. Функция возвращает текст аудио файла. Если модель разобрала речь, то возвращается не пустая строка, которую мы распечатываем в чат Telegram бота.

Еще по теме:  Поставить в черный список в Телеграмме

Полный код файла bot.py:

Результат:

Работа бота

В статье мы рассмотрели эффективный способ получения текстовых версий голосовых сообщений в Telegram боте, используя API OpenAI. Использование OpenAI API значительно упрощает процесс транскрибации голосовых сообщений и делает его более точным и надежным. Всем удачи в изучении!

Источник: teletype.in

Telegram-бот Silero бесплатно переводит речь в текст

header

Как превращать голос в текст с помощью Telegram бота

Kozak

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

Итак:
1) Если у вас нет аккаунта Telegram и клиента на каком-либо устройстве, заводим их.
2) Переходим по данной ссылке .
3) Нажимаем Send Message и устанавливаем бота в Telegram.

Как превращать голос в текст с помощью Telegram бота

4) Далее нам нужно выбрать язык, на котором будут аудиодорожки или же голосовые сообщения. Для этого вводим команду /language и выбираем нужный нам язык.

5) Далее выбираем движок, который будет переводить речь в текст. Вводим команду /engine и выбираем движок:
wit.ai — установленный по стандарту, хорошо распознаёт голосовые сообщения, но длина не должна быть больше 50 секунд.
Yandex — не имет ограничений по времени, зато не так хорошо разбирает слова, как wit.ai
Google — один из лучших, потому что он не имеет лимита на длину файла и хорошо распознает голос.

6) Проверяем в работе. Отправляем голосовое сообщение и получаем результат. Лично у меня все напечатало дословно, довольно полезный бот.

Источник: mipped.com

Рейтинг
( Пока оценок нет )
Загрузка ...