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

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

当对一个或多个人的谈话进行记录时,采用一种高度准确和自动化的方式将口语提取为文本非常有用。这使得后续的分析和功能利用更加便捷。以下将介绍如何使用 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 argparse
    import os
    import requests
    API_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 data
    if __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 argparse
    import os
    import requests
    API_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 argparse
    import os
    import requests
    API_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/

    你可能感兴趣的文章
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>
    MySQL - 解读MySQL事务与锁机制
    查看>>
    MTTR、MTBF、MTTF的大白话理解
    查看>>
    mt_rand
    查看>>
    mysql -存储过程
    查看>>