Есть код преобразования голоса в текст в телеграм_боте :
import urllib.request
url = "https://drive.google.com/uc?export=view&id=1aBZnHgsjg7XIVlvpYasOOJ8hurp7V6Ww"
filename = "skillbox_voice_sample.oga"
urllib.request.urlretrieve(url, filename)
import os, sys
import telebot
import speech_recognition
from pydub import AudioSegment
import pathlib
from pathlib import Path
# new_filename = Path(filename.replace('.oga', '.wav'))
# Ниже нужно вставить токен, который дал BotFather при регистрации
# Пример: token = '2007628239:AAEF4ZVqLiRKG7j49EC4vaRwXjJ6DN6xng8'
token = '***************************' # <<< Ваш токен
bot = telebot.TeleBot(token)
def oga2wav(filename):
# Конвертация формата файлов
new_filename = filename.replace('.oga', '.wav')
audio = AudioSegment.from_file(filename)
audio.export(new_filename, format='wav')
new_filename = Path(filename.replace('.oga', '.wav'))
audio = Path(AudioSegment.from_file(filename))
return new_filename
def recognize_speech(oga_filename):
# Перевод голоса в текст + удаление использованных файлов
wav_filename = oga2wav(oga_filename)
recognizer = speech_recognition.Recognizer()
with speech_recognition.WavFile(wav_filename) as source:
wav_audio = recognizer.record(source)
text = recognizer.recognize_google(wav_audio, language='ru')
wav_filename = Path(oga2wav(oga_filename))
recognizer = Path(speech_recognition.Recognizer())
text = Path(recognizer.recognize_google(wav_audio, language='ru'))
if os.path.exists(oga_filename):
os.remove(oga_filename)
if os.path.exists(wav_filename):
os.remove(wav_filename)
# if os.path.isfile('C:/Users/Oleg/PycharmProjects/Telegram_project/skillbox_voice_sample.oga'):
# os.remove(oga_filename)
#
# if os.path.isfile('C:/Users/Oleg/PycharmProjects/Telegram_project/wav_filename'):
# os.remove(wav_filename)
return text
def download_file(bot, file_id):
# Скачивание файла, который прислал пользователь
file_info = bot.get_file(file_id)
downloaded_file = bot.download_file(file_info.file_path)
filename = file_id + file_info.file_path
filename = filename.replace('/', '_')
with open(filename, 'wb') as f:
f.write(downloaded_file)
# file_info = Path(bot.get_file(file_id))
# downloaded_file = Path(bot.download_file(file_info.file_path))
# filename = Path(file_id + file_info.file_path)
return filename
@bot.message_handler(commands=['start'])
def say_hi(message):
# Функция, отправляющая "Привет" в ответ на команду /start
bot.send_message(message.chat.id, 'Привет')
@bot.message_handler(content_types=['voice'])
def transcript(message):
# Функция, отправляющая текст в ответ на голосовое
filename = download_file(bot, message.voice.file_id)
text = recognize_speech(filename)
bot.send_message(message.chat.id, text)
# filename = Path(download_file(bot, message.voice.file_id))
# Запускаем бота. Он будет работать до тех пор, пока работает ячейка
# (крутится значок слева).
# Остановим ячейку - остановится бот
bot.polling()
Установлены библиотеки:
pip install pyTelegramBotAPI SpeechRecognition pydub
На выходе ошибка:
File "C:\Users\Oleg\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1538, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [WinError 2] Не удается найти указанный файл
Этот же код в Colab работает:
https://colab.research.google.com/drive/1HzluTgZFS_ALYOUkpYEt38IN4TUTbkOU
Чего не так?