博客
关于我
用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/

    你可能感兴趣的文章
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    mysql union orderby 无效
    查看>>
    mysql v$session_Oracle 进程查看v$session
    查看>>
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>