我正在开发一个电报机器人,用户在其中发送语音消息,机器人将其转录并发回文本中所说的内容。
为此,我将 python-telegram-bot 库和 Speech_recognition 库与谷歌引擎一起使用。
我的问题是,用户发送的语音消息是 .mp3,但是为了转录它们,我需要将它们转换为 .wav。为此,我必须下载发送到机器人的文件。
有没有办法避免这种情况?我知道这不是一种有效且安全的方法,因为许多活跃用户同时会导致竞争状况并占用大量空间。
def voice_handler(update, context):
bot = context.bot
file = bot.getFile(update.message.voice.file_id)
file.download('voice.mp3')
filename = "voice.wav"
# convert mp3 to wav file
subprocess.call(['ffmpeg', '-i', 'voice.mp3',
'voice.wav', '-y'])
# initialize the recognizer
r = sr.Recognizer()
# open the file
with sr.AudioFile(filename) as source:
# listen for the data (load audio to memory)
audio_data = r.record(source)
# recognize (convert from speech to text)
text = r.recognize_google(audio_data, language='ar-AR')
def main() -> None:
updater.dispatcher.add_handler(MessageHandler(Filters.voice, voice_handler))
最佳答案
正如评论中所指出的,一种选择可能是将文件下载到内存而不是磁盘。
如果这不适合您,您可以每次都给文件一个唯一的 id - 例如使用用户 user_id
甚至是 uuid
- 这将防止文件被覆盖。
关于python - 使用 python-telegram-bot 进行语音识别,无需下载音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72743713/