python - 使用 python-telegram-bot 进行语音识别,无需下载音频文件

标签 python ffmpeg speech-recognition telegram-bot python-telegram-bot

我正在开发一个电报机器人,用户在其中发送语音消息,机器人将其转录并发回文本中所说的内容。
为此,我将 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/

相关文章:

python - Python3.3需要watcher

video - 如何在 Media Foundation 中从 MP4 和 x264 流中提取颜色矩阵

encoding - 流式传输 x264 数据包丢失

ffmpeg - 使用ffmpeg拉rtsp视频流,然后直接push rtmp流,但是出现Segmentation fault

youtube - 视频文件上的谷歌语音识别

android - 同时进行语音转文本和文本转语音

python - 保护或许可 Django 应用程序

python - 小写与小写+标题版本的特定字数不同

Pythontensorflow错误,sys没有属性getdlflags

java - 无法启动服务? (语音识别)