Как стать автором
Обновить

Комментарии 14

НЛО прилетело и опубликовало эту надпись здесь

Спасибо , не знал .

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

Проверка, что бот отмечен, выглядит лишней. Вряд ли люди, которые не в состоянии написать текстом, отметят бота.

На самом деле думал об этом, но иногда хочется просто пообщатся голосовыми.

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

Ну и при попытке самостоятельно запустить его, возникло еще пару замечаний и проблем
* os.system выглядит как костыль. Почему бы не использовать ffmpeg библиотеку для питона?
* Зависимости проще было бы указать через pip freeze > requirements.txt
* Зачем нам CHAT_ID, если дальше по коду мы его нигде не используем?
* Различные ошибки, в основном из-за того, что код в статье не полный
Сами ошибки и их исправление

* Не хватает 1 строчки кода, взял её из примера в документации
(venv) [root@vitka-k soundto]$ python soundto.py
Traceback (most recent call last):
File "soundto.py", line 38, in bot.polling()
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/__init__.py", line 622, in polling
self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/__init__.py", line 681, in __threaded_polling
raise e
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/__init__.py", line 644, in __threaded_polling
self.worker_pool.raise_exceptions()
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/util.py", line 130, in raise_exceptions
raise self.exception_info
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/util.py", line 82, in run
task(*args, **kwargs)
File "soundto.py", line 29, in voice_processing
downloaded_file = bot.download_file(file_info.file_path)
NameError: name 'file_info' is not defined


Исправляется добавление строчки перед использованием file_info
file_info = bot.get_file(message.voice.file_id)


* Питон жалуется на отсутствие директории voice и ready, создаем её вручную или через сам питон
FileNotFoundError: [Errno 2] No such file or directory: './voice/aa9cc69a-26d6-4e43-a84e-99e367c47510.ogg'


Кто хочет потестировать — некоторое время будет работать @soundto_bot, дальше могу передать его автору, если он планирует развивать его.
Полный код
import telebot
import uuid
import os
import speech_recognition as sr

language='ru_RU'
TOKEN='YOUR_TOKEN'
#CHAT_ID='-100xxxxxxxxxxxxxxxxxxxxx')
bot = telebot.TeleBot(TOKEN)
r = sr.Recognizer()

def recognise(filename):
    with sr.AudioFile(filename) as source:
        audio_text = r.listen(source)
        try:
            text = r.recognize_google(audio_text,language=language)
            print('Converting audio transcripts into text ...')
            print(text)
            return text
        except:
            print('Sorry.. run again...')
            return "Sorry.. run again..."

@bot.message_handler(content_types=['voice'])
def voice_processing(message):
    filename = str(uuid.uuid4())
    file_name_full="./voice/"+filename+".ogg"
    file_name_full_converted="./ready/"+filename+".wav"
    file_info = bot.get_file(message.voice.file_id)
    downloaded_file = bot.download_file(file_info.file_path)
    with open(file_name_full, 'wb') as new_file:
        new_file.write(downloaded_file)
    os.system("ffmpeg -i "+file_name_full+"  "+file_name_full_converted)
    text=recognise(file_name_full_converted)
    bot.reply_to(message, text)
    os.remove(file_name_full)
    os.remove(file_name_full_converted)

bot.polling()

Google Cloud Speech-to-Text API платное с бесплатными лимитом 60 минут в месяц, каждый запрос округляется до 15 секунд.

Меня удивило, что этот кусок кода сработал без ключа

text = r.recognize_google(audio_text,language=language)

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

Спасибо огромное. По ошибке удалил ее когда писал статью . Однако есть версия с подключеным configparser и немного другим кодом на github . Можно взять как отправную точку: https://github.com/alex5250/TelegramSoundBot

Может вопрос глупый, но объясните

Будет ли бот работать на телефоне? И если да, то что необходимо установить, ведь код должен в чем то обрабатываться.

Боты работают на сервере, а не на телефоне

У меня вопрос зачем нужен такой бот, если на Андроиде есть уже голосовая клавиатура?

Отличный вопрос, однако не все умеют ей пользоваться. Мне намного легче научить компьютер обрабатывать голос, чем объяснить людям как правильно общаться. Особенно сложно если эти люди твои знакомые /друзья (не в обиду им) .

Можно парсить все сообщения в группе как делают другие аналогичные боты без отметки бота. И логику преобразования в текс лучше вынести в отдельную функцию из хендлера.

Про хендлер вы правы .. так делать не хорошо .. однако как отвечал выше иногда хочется в чате видеть только голосовые.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории