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

    你可能感兴趣的文章
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>