博客
关于我
用Python将音频内容转换为文本格式,方言可以吗?
阅读量:235 次
发布时间:2019-03-01

本文共 4161 字,大约阅读时间需要 13 分钟。

当对一个或多个人的谈话进行记录时,采用一种高度准确和自动化的方式将口语提取为文本非常有用。这使得后续的分析和功能利用更加便捷。以下将介绍如何使用 AssemblyAI(https://www.assemblyai.com/)的高精度语音转文本Web API从MP3录音中提取文本。

教程要求

本教程将使用以下依赖项。请确保您的环境中安装了Python 3,最好是3.6或更高版本:

  • requests 2.24.0 用于向 AssemblyAI 语音文本API发出HTTP请求
  • AssemblyAI 账户,您可以通过 (https://app.assemblyai.com/login/)注册免费的API访问密钥

搭建开发环境

转到保存Python虚拟环境的目录。我将我的目录保存在用户主目录下的venvs子目录中。使用以下命令为此项目创建一个新的virtualenv:

python3 -m venv ~/venvs/pytranscribe

用 shell 命令激活 virtualenv:

source ~/venvs/pytranscribe/bin/activate

执行上述命令后,命令提示符将发生更改,示例如下:

(pytranscribe) $

请记住,您必须在每个 virtualenv 中使用依赖项的新终端窗口中激活您的 virtualenv。

现在,我们可以将 requests 包安装到已激活但为空的 virtualenv 中:

pip install requests==2.24.0

安装完成后,我们已经准备好开始编码了。

上传、启动和转录音频

我们将编写三个文件来实现音频转文本功能:

  • upload_audio_file.py:将音频文件上传到 AssemblyAI 服务上的安全位置,以便进行处理。
  • initial_transcription.py:向 API 要转录并立即启动。
  • get_transcription.py:检查转录状态或在处理完成后显示转录结果。
  • 创建一个名为 pytranscribe 的新目录,进入该目录:

    mkdir pytranscribe && cd pytranscribe

    导出 API 密钥

    注册 AssemblyAI 帐户并登录 AssemblyAI 仪表板,复制“您的API token”。在终端中执行:

    export ASSEMBLYAI_KEY=your-api-key-here

    请确保在运行脚本的终端中将该标记导出,以保证 API 可访问。

    上传音频文件并进行转录

    创建 upload_audio_file.py 文件,并添加以下代码:

    import argparseimport osimport requestsAPI_URL = "https://api.assemblyai.com/v2/"CDN_URL = "https://cdn.assemblyai.com/"def upload_file_to_api(filename):    if not os.path.exists(filename):        return None    headers = {'authorization': os.getenv("ASSEMBLYAI_KEY")}    response = requests.post(        f"{API_URL}upload",        headers=headers,        data=read_file(filename)    )    return response.json()def read_file(filename, chunk_size=5242880):    with open(filename, 'rb') as _file:        while True:            data = _file.read(chunk_size)            if not data:                break            yield dataif __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument("filename")    args = parser.parse_args()    upload_filename = args.filename    response_json = upload_file_to_api(upload_filename)    if not response_json:        print("file does not exist")    else:        print(f"File uploaded to URL: {response_json['upload_url']}")

    运行脚本:

    python upload_audio_file.py /path/to/your/audio.mp3

    完成后,脚本会打印一条包含唯一URL的消息。保存该URL,以备下一步使用。

    启动转录

    创建 initial_transcription.py 文件,并添加以下代码:

    import argparseimport osimport requestsAPI_URL = "https://api.assemblyai.com/v2/"CDN_URL = "https://cdn.assemblyai.com/"def initiate_transcription(file_id):    endpoint = f"{API_URL}transcript"    json_data = {"audio_url": f"{CDN_URL}upload/{file_id}"}    headers = {        "authorization": os.getenv("ASSEMBLYAI_KEY"),        "content-type": "application/json"    }    response = requests.post(endpoint, json=json_data, headers=headers)    return response.json()if __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument("file_id")    args = parser.parse_args()    file_id = args.file_id    response_json = initiate_transcription(file_id)    print(response_json)

    运行脚本并传入上一步生成的文件标识符:

    python initial_transcription.py gkuu2krb1-8c7f-4fe3-bb69-6b14a2cac067

    API 会返回一个 JSON 响应,其中包含转录标识符。记住该标识符,以便下一步检索转录结果。

    检索转录结果

    创建 get_transcription.py 文件,并添加以下代码:

    import argparseimport osimport requestsAPI_URL = "https://api.assemblyai.com/v2/"def get_transcription(transcription_id):    endpoint = f"{API_URL}transcript/{transcription_id}"    headers = {"authorization": os.getenv("ASSEMBLYAI_KEY")}    response = requests.get(endpoint, headers=headers)    return response.json()if __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument("transcription_id")    args = parser.parse_args()    transcription_id = args.transcription_id    response_json = get_transcription(transcription_id)    if response_json['status'] == "completed":        for word in response_json['words']:            print(word['text'], end=" ")    else:        print(f"current status of transcription request: {response_json['status']}")

    运行脚本并传入上一步生成的转录标识符:

    python get_transcription.py gkuu2krb1-8c7f-4fe3-bb69-6b14a2cac067

    如果转录完成,脚本会打印转录文本;否则,会打印当前状态。

    下一步是什么?

    我们已经完成了一些脚本,这些脚本调用 AssemblyAI API 将带有语音的录音转录为文本输出。您可以查阅文档(https://docs.assemblyai.com/overview/getting-started)来增加一些更高级功能:

    • 支持不同的文件格式
    • 转录双通道/立体声录音
    • 获取扬声器标签(扬声器隔离)

    转载地址:http://npgp.baihongyu.com/

    你可能感兴趣的文章
    Python rsa 加密
    查看>>
    Python RSA操作
    查看>>
    Python轻松实现统计学中重要的相关性分析
    查看>>
    Python scrapy 常见问题及解决 【遇到的坑】
    查看>>
    Python Seborn热图数据的动态更新
    查看>>
    Python Seborn绘制空白直方图
    查看>>
    Python Selenium - 获取href值
    查看>>
    Python Selenium实现自动化测试及Chrome驱动使用!
    查看>>
    Python Selenium搭建UI自动化测试框架
    查看>>
    Python Selenium模块详解
    查看>>
    Python selenium爬取影评生成词云图
    查看>>
    python selenium自动化测试报告
    查看>>
    Python selenium自动化测试框架实战 —— 登录测试案例
    查看>>
    Python Selenium设计模式 —— POM
    查看>>
    Python Serial:如何使用 read 或 readline 函数一次读取多个字符
    查看>>
    Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?
    查看>>
    Python setup.py:数据文件无法复制目录:不存在或不是常规文件
    查看>>
    Python setuptools sdist:仅安装版本化文件
    查看>>
    Python Shell下使用matplotlib
    查看>>
    Python Slice How-to,我知道Python Slice,但我怎么才能使用内置的Slice对象呢?
    查看>>