Преобразователь ГС в текст. С форума Dark2Web.
Шалом! Сегодня поступила мне задача написать бота для телеграмма с возможностью распознавания голоса (Voice to text), так как встроенная функция в телеграмме доступна только с подпиской Premium. Я сразу полез в интернет искать толковые решения для реализации такой функции, но нашел только готовые проекты в виде платных сервисов и кривой пример для работы такой системы на telebot, а как мы знаем, библиотека telebot не асинхронная и не очень подходит для проектов с большим потоком пользователей, но я не исключаю, что если с ней немного поколдовать, она превратиться в асинхронную.
И так, я выбрал библиотеку Speech_recognition (https://pypi.org/project/SpeechRecognition/).
Мне она показалась наиболее удобной и точной в деле распознавания речи. Так же я использовал библиотеки:
- OS. (Идет в наборе с питоном)
- Logging. (https://pypi.org/project/logging/)
- Aiogram. (https://pypi.org/project/aiogram/)
- Pydub. (https://pypi.org/project/pydub/)
Я прикреплю готовый файл, так что можете ничего не писать.
Подготовка к работе бота.
1. Для начала давайте создадим папку voice и поместим файл питона в одну директорию с ней.
2. Теперь давайте откроем файл питона и изменим там TELEGRAM_TOKEN на токен вашего бота. (Получить токен вы можете у https://t.me/BotFather в телеграмме)
Всё! Теперь бота можно запускать или использовать этот код в своих проектах.
Так же я постарался максимально просто и подробно расписать каждую стадию работы программы, но всё же немного затрону основной принцип работы кода.
И так, когда происходит событие, что пользователь отправил голосове сообщение, бот переходит на асинхронную функцию handle_voice_message. Далее получаем файл, определяем его расширение (в нашем случае .ogg) и задаем имя и путь для его сохранения. Теперь мы должны его сохранить.
Так как библиотека speech_recognition не может прочитать файл .ogg, мы используем библиотеку pydub, для конвертации файла в формат .wav. Теперь начинаем уже работать с библиотекой speech_recognition и вызывем recognizer для записи аудио.
Осталось распознать текст и отправить пользователю (я реализовал это через try, чтобы можно было увидеть возможные ошибки в работе библиотеки). Ну и в конце мы удаляем файлы с сервера. (так же я использовал версию питона 3.10.9, если вдруг кто-то хочет знать)