~ 15 минут
Создание Telegram-бота для распознавания речи с использованием OpenAI Whisper
240
10/6/2024
Создаем Telegram-бот, который распознает голосовые сообщения с помощью OpenAI Whisper. Полный гайд: настройка бота, конвертация аудио и интеграция с Whisper
В этой статье я расскажу о том, как создать Telegram-бота, который сможет распознавать голосовые сообщения и преобразовывать их в текст. Мы будем использовать модельку OpenAI Whisper для распознавания речи, а также инструменты Node.js и ffmpeg для работы с аудиофайлами.
Зачем нужен такой бот?
Telegram — это популярная платформа для общения, где пользователи часто отправляют друг другу голосовые сообщения. Однако не всегда удобно прослушивать эти сообщения, особенно в шумной среде или на работе. В таких ситуациях бот, который способен автоматически преобразовать голос в текст, может быть очень полезен.
Основные шаги создания бота:
- Настройка Telegram-бота
- Конвертация аудиофайлов
- Использование OpenAI Whisper для расшифровки речи
- Отправка результата пользователю
Шаг 1. Создание Telegram-бота
Для начала нам понадобится Telegram-бот. Если у вас его еще нет, создайте нового бота через BotFather в Telegram. После создания вы получите токен, который потребуется для работы с API Telegram.
Далее, создайте проект на Node.js и установите библиотеку для работы с Telegram:
npm install node-telegram-bot-api
В коде инициализируем бота, используя токен, который вы получили от BotFather:
const TelegramBot = require('node-telegram-bot-api') const bot = new TelegramBot(process.env.TELEGRAM_BOT_TOKEN, { polling: true })
Теперь ваш бот готов принимать команды. Например, можно добавить приветственное сообщение при вызове команды /start:
bot.onText(/\/start/, (msg) => { const chatId = msg.chat.id bot.sendMessage(chatId, `Привет, ${msg.from.first_name}! Отправь мне голосовое сообщение, и я расшифрую его.`) })
Шаг 2. Конвертация аудиофайлов
Telegram сохраняет голосовые сообщения в формате .oga, который не поддерживается многими системами распознавания. Поэтому нам нужно преобразовать этот файл в формат .wav. Для этого мы будем использовать библиотеку ffmpeg:
npm install fluent-ffmpeg
Затем добавляем функцию конвертации файла:
const ffmpeg = require('fluent-ffmpeg'); const path = require('path'); const fs = require('fs'); function convertOgaToWav(inputPath, outputPath) { return new Promise((resolve, reject) => { ffmpeg(inputPath) .toFormat('wav') .on('end', () => resolve(outputPath)) .on('error', reject) .save(outputPath); }); }
Теперь бот сможет загружать голосовые сообщения, сохранять их на диск и конвертировать в нужный формат.
Шаг 3. Распознавание речи с помощью OpenAI Whisper
Для распознавания речи мы используем OpenAI Whisper — мощную модель, способную преобразовывать аудиофайлы в текст. Сначала установим библиотеку OpenAI:
npm install openai
Инициализируем API OpenAI, используя ваш API-ключ:
const OpenAI = require('openai') const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
Затем создаем функцию для отправки аудиофайла в OpenAI Whisper:
async function transcribeAudio(filePath) { const audioFile = fs.createReadStream(filePath); const transcription = await openai.audio.transcriptions.create({ file: audioFile, model: 'whisper-1' }); return transcription.text; }
Теперь после конвертации аудиофайла в .wav мы можем отправить его на расшифровку.
Шаг 4. Обработка голосовых сообщений
Теперь свяжем все компоненты вместе. Когда пользователь отправляет голосовое сообщение, бот скачивает его, конвертирует в формат .wav, отправляет в OpenAI для расшифровки и затем отправляет результат обратно пользователю:
bot.on('voice', async (msg) => { const chatId = msg.chat.id const fileId = msg.voice.file_id const fileUrl = await bot.getFileLink(fileId) const inputPath = path.resolve(__dirname, 'input.oga') const outputPath = path.resolve(__dirname, 'output.wav') const response = await axios({ url: fileUrl, responseType: 'stream' }) const writer = fs.createWriteStream(inputPath) response.data.pipe(writer) writer.on('finish', async () => { try { await convertOgaToWav(inputPath, outputPath) const transcript = await transcribeAudio(outputPath) await bot.sendMessage(chatId, `Расшифровка: ${transcript}`) fs.unlinkSync(inputPath) fs.unlinkSync(outputPath) } catch (error) { await bot.sendMessage(chatId, 'Ошибка при обработке голосового сообщения.') } }) })
Заключение
Теперь у вас есть Telegram-бот, который может распознавать голосовые сообщения с помощью OpenAI Whisper! Этот бот — отличное решение для тех, кто хочет быстро преобразовывать голос в текст, будь то в личных или рабочих целях.
Дополнительные шаги
- Масштабируемость: Вы можете расширить функционал бота, добавив поддержку разных языков и улучшив интерфейс взаимодействия с пользователями.
- Оптимизация: Добавьте возможность параллельной обработки нескольких запросов, чтобы повысить производительность бота при большом числе пользователей.
Исходный код
Github: https://github.com/reactcoder-it/telegram-voice-transcriber
Видео на Youtube: https://youtu.be/4OIz51rpl0A?si=bMJDQrTaYK1sdiZr
Надеюсь, эта статья была полезной, и вы смогли создать своего первого бота для распознавания речи!
Для справки
Взгляните на наш стартап:
Выбирай экскурсии и активности по всему миру
Уже зарегистрировано 0 стран, 0 направлений, 0 экскурсий
Есть интересная идея?
И вы очень хотите ее реализовать, пишите нам и получите подробное коммерческое предложение и быструю реализацию