【问题标题】:Converting Audio Blob to text in Python using Speech recognition使用语音识别将音频 Blob 转换为 Python 中的文本
【发布时间】:2019-07-13 13:16:24
【问题描述】:

为英语道歉....

我正在构建一个聊天机器人应用程序,其中语音通过 HTML5 的 mediaRecorder api 在客户端录制,并作为 Formdata 发送到 python 的 falcon Web 服务。

在 Python 方面,我需要直接将此音频 blob 转换为文本。

目前我正在将此音频 blob 写入 wav 文件,然后从该文件中读取。但是,由于涉及 FileIO,此过程需要很长时间。我需要以某种方式直接使用这个音频块作为语音识别的输入源。

这是我尝试过的:

def on_post(self, req, resp):         

    open("backend.wav",'wb')
      .write(req.get_param('audio_data').file.read());

    mic = sr.AudioFile('backend.wav')
    with mic as source:
       print("Speak !!")
       audio = r.record(source)

    #audio = req
    results = r.recognize_google(audio_data=audio, language="en-US",show_all=True)

    return results;

我不是一个有经验的 Python 开发者,所以如果这是一个愚蠢的问题,请原谅。任何帮助都非常感谢..

【问题讨论】:

  • 如果我没记错的话speek_recognition 仅适用于文件名,它没有直接从内存中获取的选项。它甚至不能使用类文件对象,所以它不能使用io.BytesIO 在内存中创建类文件对象。但也许我错了,它是不同的模块。
  • 亲爱的 Furas,似乎有一个 sr.AudioData() 函数将输入作为:“frame_data”、“sample_rate”和“sample_width”。但是,当我尝试这样做时,我得到了“mic as source: AttributeError: enter
  • 你可以用完整的错误信息(Traceback)提出这个问题

标签: python html speech-recognition


【解决方案1】:

我无法测试它,但它可以工作。

似乎AudioFile 可以使用文件对象,所以这段代码使用io.BytesIO 在内存中创建文件对象并将数据保存在该文件中。这样它就不必使用磁盘了。

import io


def on_post(self, req, resp):    

    f = req.get_param('audio_data').file

    file_obj = io.BytesIO()  # create file-object
    file_obj.write(f.read()) # write in file-object
    file_obj.seek(0) # move to beginning so it will read from beginning

    mic = sr.AudioFile(file_obj) # use file-object
    with mic as source:
         audio = r.record(source)

    result = r.recognize_google(audio_data=audio, language="en-US", show_all=True)

    return result

【讨论】:

  • 感谢 furas 的快速响应,非常感谢。我尝试了您的解决方案,但出现错误:“音频文件无法读取为 PCM WAV、AIFF/AIFF-C 或本机 FLAC;检查文件是否损坏或其他格式”
  • 我只能在磁盘上的文件上测试它 - f = open(filename, 'rb') - 它似乎有效。
  • 是的,它适用于文件名。我将继续寻找一种如何使用音频 blob 完成它的方法。
  • 它不起作用是非常奇怪的。 BytesIO 创建文件的方式与普通文件相同。我对AudioFile(file_obj) 没有意见。至于我,只能解释来自req.get_param('audio_data').file的数据
猜你喜欢
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多